diff --git a/app/src/main/java/io/xpipe/app/browser/FileContextMenu.java b/app/src/main/java/io/xpipe/app/browser/FileContextMenu.java index d6de71c7c..d6b7d90e2 100644 --- a/app/src/main/java/io/xpipe/app/browser/FileContextMenu.java +++ b/app/src/main/java/io/xpipe/app/browser/FileContextMenu.java @@ -83,7 +83,7 @@ final class FileContextMenu extends ContextMenu { if (e != null) { pc.executeSimpleBooleanCommand(e); } - var cmd = pc.command("\"" + entry.getPath() + "\"").prepareTerminalOpen(); + var cmd = pc.command("\"" + entry.getPath() + "\"").prepareTerminalOpen("?"); TerminalHelper.open(FilenameUtils.getBaseName(entry.getPath()), cmd); }); event.consume(); diff --git a/app/src/main/java/io/xpipe/app/browser/OpenFileSystemModel.java b/app/src/main/java/io/xpipe/app/browser/OpenFileSystemModel.java index c32b82c98..c8faae958 100644 --- a/app/src/main/java/io/xpipe/app/browser/OpenFileSystemModel.java +++ b/app/src/main/java/io/xpipe/app/browser/OpenFileSystemModel.java @@ -6,6 +6,7 @@ import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.util.BusyProperty; import io.xpipe.app.util.TerminalHelper; import io.xpipe.app.util.ThreadHelper; +import io.xpipe.app.util.XPipeDaemon; import io.xpipe.core.impl.FileNames; import io.xpipe.core.store.ConnectionFileSystem; import io.xpipe.core.store.FileSystem; @@ -277,7 +278,7 @@ final class OpenFileSystemModel { var connection = ((ConnectionFileSystem) fileSystem).getShellControl(); var command = s.control() .initWith(connection.getShellDialect().getCdCommand(directory)) - .prepareTerminalOpen(); + .prepareTerminalOpen(directory + " - " + XPipeDaemon.getInstance().getStoreName(store.getValue()).orElse("?")); TerminalHelper.open(directory, command); } }); diff --git a/app/src/main/java/io/xpipe/app/exchange/LaunchExchangeImpl.java b/app/src/main/java/io/xpipe/app/exchange/LaunchExchangeImpl.java index 46cdb0313..9f630b147 100644 --- a/app/src/main/java/io/xpipe/app/exchange/LaunchExchangeImpl.java +++ b/app/src/main/java/io/xpipe/app/exchange/LaunchExchangeImpl.java @@ -14,7 +14,7 @@ public class LaunchExchangeImpl extends LaunchExchange public Response handleRequest(BeaconHandler handler, Request msg) throws Exception { var store = getStoreEntryByName(msg.getName(), false); if (store.getStore() instanceof LaunchableStore s) { - var command = s.prepareLaunchCommand(); + var command = s.prepareLaunchCommand(store.getName()); var split = CommandLine.parse(command); return Response.builder().command(List.of(split.toStrings())).build(); } diff --git a/app/src/main/java/io/xpipe/app/util/ScriptHelper.java b/app/src/main/java/io/xpipe/app/util/ScriptHelper.java index 63ef2a194..dc25578b2 100644 --- a/app/src/main/java/io/xpipe/app/util/ScriptHelper.java +++ b/app/src/main/java/io/xpipe/app/util/ScriptHelper.java @@ -39,11 +39,15 @@ public class ScriptHelper { } public static String constructInitFile( - ShellControl processControl, List init, String toExecuteInShell, boolean login) { + ShellControl processControl, List init, String toExecuteInShell, boolean login, String displayName) { ShellDialect t = processControl.getShellDialect(); String nl = t.getNewLine().getNewLineString(); var content = String.join(nl, init.stream().filter(s -> s != null).toList()) + nl; + if (displayName != null) { + content = t.changeTitleCommand(displayName) + "\n" + content; + } + if (login) { var applyProfilesCommand = t.applyProfileFilesCommand(); if (applyProfilesCommand != null) { diff --git a/app/src/main/java/io/xpipe/app/util/TerminalHelper.java b/app/src/main/java/io/xpipe/app/util/TerminalHelper.java index f01d0b8ec..d8374c835 100644 --- a/app/src/main/java/io/xpipe/app/util/TerminalHelper.java +++ b/app/src/main/java/io/xpipe/app/util/TerminalHelper.java @@ -9,7 +9,7 @@ import java.io.IOException; public class TerminalHelper { public static void open(String title, CommandControl cc) throws Exception { - var command = cc.prepareTerminalOpen(); + var command = cc.prepareTerminalOpen(title); open(title, command); } diff --git a/core/src/main/java/io/xpipe/core/process/ProcessControl.java b/core/src/main/java/io/xpipe/core/process/ProcessControl.java index 4fa3ad73f..2b0722bb0 100644 --- a/core/src/main/java/io/xpipe/core/process/ProcessControl.java +++ b/core/src/main/java/io/xpipe/core/process/ProcessControl.java @@ -17,7 +17,7 @@ public interface ProcessControl extends Closeable, AutoCloseable { ProcessControl sensitive(); - String prepareTerminalOpen() throws Exception; + String prepareTerminalOpen(String displayName) throws Exception; void closeStdin() throws IOException; diff --git a/core/src/main/java/io/xpipe/core/process/ShellControl.java b/core/src/main/java/io/xpipe/core/process/ShellControl.java index 3e29618e1..ffa0f91ba 100644 --- a/core/src/main/java/io/xpipe/core/process/ShellControl.java +++ b/core/src/main/java/io/xpipe/core/process/ShellControl.java @@ -21,9 +21,9 @@ public interface ShellControl extends ProcessControl { ShellControl withMessageFormatter(Function formatter); - String prepareTerminalOpen() throws Exception; + String prepareTerminalOpen(String displayName) throws Exception; - String prepareIntermediateTerminalOpen(String content) throws Exception; + String prepareIntermediateTerminalOpen(String content, String displayName) throws Exception; String getTemporaryDirectory() throws Exception; diff --git a/core/src/main/java/io/xpipe/core/process/ShellDialect.java b/core/src/main/java/io/xpipe/core/process/ShellDialect.java index cb19ecf16..34ef64f8d 100644 --- a/core/src/main/java/io/xpipe/core/process/ShellDialect.java +++ b/core/src/main/java/io/xpipe/core/process/ShellDialect.java @@ -28,6 +28,8 @@ public interface ShellDialect { return null; } + String changeTitleCommand(String newTitle); + default String applyProfileFilesCommand() { return null; } diff --git a/core/src/main/java/io/xpipe/core/store/CommandExecutionStore.java b/core/src/main/java/io/xpipe/core/store/CommandExecutionStore.java index 2c185033a..6b1e52488 100644 --- a/core/src/main/java/io/xpipe/core/store/CommandExecutionStore.java +++ b/core/src/main/java/io/xpipe/core/store/CommandExecutionStore.java @@ -5,8 +5,8 @@ import io.xpipe.core.process.CommandControl; public interface CommandExecutionStore extends DataStore, LaunchableStore { @Override - default String prepareLaunchCommand() throws Exception { - return create().prepareTerminalOpen(); + default String prepareLaunchCommand(String displayName) throws Exception { + return create().prepareTerminalOpen(displayName); } CommandControl create() throws Exception; diff --git a/core/src/main/java/io/xpipe/core/store/LaunchableStore.java b/core/src/main/java/io/xpipe/core/store/LaunchableStore.java index 1c03ee22a..3c0672f0a 100644 --- a/core/src/main/java/io/xpipe/core/store/LaunchableStore.java +++ b/core/src/main/java/io/xpipe/core/store/LaunchableStore.java @@ -2,5 +2,5 @@ package io.xpipe.core.store; public interface LaunchableStore extends DataStore { - String prepareLaunchCommand() throws Exception; + String prepareLaunchCommand(String displayName) throws Exception; } diff --git a/core/src/main/java/io/xpipe/core/store/ShellStore.java b/core/src/main/java/io/xpipe/core/store/ShellStore.java index ac423acbc..aa560a8ee 100644 --- a/core/src/main/java/io/xpipe/core/store/ShellStore.java +++ b/core/src/main/java/io/xpipe/core/store/ShellStore.java @@ -23,8 +23,8 @@ public interface ShellStore extends DataStore, StatefulDataStore, LaunchableStor } @Override - default String prepareLaunchCommand() throws Exception { - return control().prepareTerminalOpen(); + default String prepareLaunchCommand(String displayName) throws Exception { + return control().prepareTerminalOpen(displayName); } default ShellControl control() {