From 6348166dac8ee9e9fa3a787a02005a1b8e0bec2f Mon Sep 17 00:00:00 2001 From: Zkitefly <2573874409@qq.com> Date: Sun, 1 Sep 2024 00:27:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9C=A8=20Linux/BSD=20?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E4=BD=BF=E7=94=A8=20showFileInExplorer=20(#3?= =?UTF-8?q?233)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update ModListPageSkin.java * Update ModListPageSkin.java * Update FXUtils.java * Update ModListPageSkin.java * 使用 dbus-send * Update FXUtils.java * Update FXUtils.java * update * update --------- Co-authored-by: Glavo --- .../java/org/jackhuang/hmcl/ui/FXUtils.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index 0cb5c433f..d9d78d5f7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -408,6 +408,17 @@ public final class FXUtils { }); } + private static boolean testLinuxCommand(String command) { + try (final InputStream is = Runtime.getRuntime().exec(new String[]{"which", command}).getInputStream()) { + if (is.read() != -1) { + return true; + } + } catch (Throwable ignored) { + } + + return false; + } + public static void showFileInExplorer(Path file) { String path = file.toAbsolutePath().toString(); @@ -416,6 +427,16 @@ public final class FXUtils { openCommands = new String[]{"explorer.exe", "/select,", path}; else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) openCommands = new String[]{"/usr/bin/open", "-R", path}; + else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() && testLinuxCommand("dbus-send")) + openCommands = new String[]{ + "dbus-send", + "--print-reply", + "--dest=org.freedesktop.FileManager1", + "/org/freedesktop/FileManager1", + "org.freedesktop.FileManager1.ShowItems", + "array:string:" + file.toAbsolutePath().toUri(), + "string:" + }; else openCommands = null;