From 0a3488324d533c9dae8a3af041ae5b57d4f1e1f8 Mon Sep 17 00:00:00 2001 From: crschnick Date: Sun, 21 Apr 2024 03:22:23 +0000 Subject: [PATCH] Rework init commands for warp --- .../app/terminal/ExternalTerminalType.java | 18 ++++++++++++++++++ .../io/xpipe/app/util/TerminalLauncher.java | 6 ++++-- .../core/process/TerminalInitScriptConfig.java | 3 ++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java index ae37d29a..cf1ec243 100644 --- a/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java @@ -575,6 +575,20 @@ public interface ExternalTerminalType extends PrefsChoiceValue { return toExecute.buildSimple(); }; } + + @Override + public String additionalInitCommands(ShellControl sc) { + if (sc.getShellDialect() == ShellDialects.ZSH) { + return "printf '\\eP$f{\"hook\": \"SourcedRcFileForWarp\", \"value\": { \"shell\": \"zsh\"}}\\x9c'"; + } + if (sc.getShellDialect() == ShellDialects.BASH) { + return "printf '\\eP$f{\"hook\": \"SourcedRcFileForWarp\", \"value\": { \"shell\": \"bash\"}}\\x9c'"; + } + if (sc.getShellDialect() == ShellDialects.FISH) { + return "printf '\\eP$f{\"hook\": \"SourcedRcFileForWarp\", \"value\": { \"shell\": \"fish\"}}\\x9c'"; + } + return null; + } }; ExternalTerminalType CUSTOM = new CustomTerminalType(); List WINDOWS_TERMINALS = List.of( @@ -656,6 +670,10 @@ public interface ExternalTerminalType extends PrefsChoiceValue { .orElse(null); } + default String additionalInitCommands(ShellControl sc) { + return null; + } + boolean supportsTabs(); default String getWebsite() { diff --git a/app/src/main/java/io/xpipe/app/util/TerminalLauncher.java b/app/src/main/java/io/xpipe/app/util/TerminalLauncher.java index e63da7ec..ef0ec776 100644 --- a/app/src/main/java/io/xpipe/app/util/TerminalLauncher.java +++ b/app/src/main/java/io/xpipe/app/util/TerminalLauncher.java @@ -31,7 +31,8 @@ public class TerminalLauncher { new TerminalInitScriptConfig( title, type.shouldClear() - && AppPrefs.get().clearTerminalOnInit().get())); + && AppPrefs.get().clearTerminalOnInit().get(), + type.additionalInitCommands(sc))); var config = new ExternalTerminalType.LaunchConfiguration(null, title, title, script, sc.getShellDialect()); type.launch(config); } @@ -53,7 +54,8 @@ public class TerminalLauncher { var adjustedTitle = prefix + cleanTitle; var terminalConfig = new TerminalInitScriptConfig( adjustedTitle, - type.shouldClear() && AppPrefs.get().clearTerminalOnInit().get()); + type.shouldClear() && AppPrefs.get().clearTerminalOnInit().get(), + cc instanceof ShellControl sc ? type.additionalInitCommands(sc) : null); var request = UUID.randomUUID(); var d = ProcessControlProvider.get().getEffectiveLocalDialect(); diff --git a/core/src/main/java/io/xpipe/core/process/TerminalInitScriptConfig.java b/core/src/main/java/io/xpipe/core/process/TerminalInitScriptConfig.java index e88d9050..2c20987e 100644 --- a/core/src/main/java/io/xpipe/core/process/TerminalInitScriptConfig.java +++ b/core/src/main/java/io/xpipe/core/process/TerminalInitScriptConfig.java @@ -7,8 +7,9 @@ public class TerminalInitScriptConfig { String displayName; boolean clearScreen; + String terminalSpecificCommands; public static TerminalInitScriptConfig ofName(String name) { - return new TerminalInitScriptConfig(name, true); + return new TerminalInitScriptConfig(name, true, null); } }