From cafc20fc6c47f6b07330fcdc6d8fc9748ecd1bae Mon Sep 17 00:00:00 2001 From: crschnick Date: Tue, 9 Jun 2026 13:06:42 +0000 Subject: [PATCH] Add support for intelligent terminal --- .../xpipe/app/issue/SentryErrorHandler.java | 1 + .../app/terminal/ExternalTerminalType.java | 3 +- .../app/terminal/WindowsTerminalType.java | 64 +++++++++++++++++++ lang/strings/fixed_en.properties | 1 + 4 files changed, 68 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/xpipe/app/issue/SentryErrorHandler.java b/app/src/main/java/io/xpipe/app/issue/SentryErrorHandler.java index 44d3389ba..229afc408 100644 --- a/app/src/main/java/io/xpipe/app/issue/SentryErrorHandler.java +++ b/app/src/main/java/io/xpipe/app/issue/SentryErrorHandler.java @@ -238,6 +238,7 @@ public class SentryErrorHandler implements ErrorHandler { ee.isShouldSendDiagnostics() && !ee.getAttachments().isEmpty())); s.setTag("inStartup", Boolean.toString(AppOperationMode.isInStartup())); s.setTag("inShutdown", Boolean.toString(AppOperationMode.isInShutdown())); + s.setTag("inShutdownHook", Boolean.toString(AppOperationMode.isInShutdownHook())); s.setTag("unhandled", Boolean.toString(ee.isUnhandled())); s.setTag("diagnostics", Boolean.toString(ee.isShouldSendDiagnostics())); 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 7cd241eda..71721c5f0 100644 --- a/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java @@ -483,11 +483,12 @@ public interface ExternalTerminalType extends PrefsChoiceValue { CMD, PWSH, POWERSHELL, + TabbyTerminalType.TABBY_WINDOWS, + WindowsTerminalType.WINDOWS_INTELLIGENT_TERMINAL, MOBAXTERM, SECURECRT, TERMIUS, XSHELL, - TabbyTerminalType.TABBY_WINDOWS, WaveTerminalType.WAVE_WINDOWS); List LINUX_TERMINALS = List.of( AlacrittyTerminalType.ALACRITTY_LINUX, diff --git a/app/src/main/java/io/xpipe/app/terminal/WindowsTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/WindowsTerminalType.java index 9833bf528..fe5c9b79a 100644 --- a/app/src/main/java/io/xpipe/app/terminal/WindowsTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/WindowsTerminalType.java @@ -27,6 +27,7 @@ public interface WindowsTerminalType extends ExternalTerminalType, TrackableTerm ExternalTerminalType WINDOWS_TERMINAL = new Standard(); ExternalTerminalType WINDOWS_TERMINAL_PREVIEW = new Preview(); ExternalTerminalType WINDOWS_TERMINAL_CANARY = new Canary(); + ExternalTerminalType WINDOWS_INTELLIGENT_TERMINAL = new Intelligent(); AtomicInteger windowCounter = new AtomicInteger(101); @@ -341,4 +342,67 @@ public interface WindowsTerminalType extends ExternalTerminalType, TrackableTerm .resolve("Packages\\Microsoft.WindowsTerminalCanary_8wekyb3d8bbwe\\LocalState\\settings.json"); } } + + class Intelligent implements WindowsTerminalType { + + @Override + public boolean isRecommended() { + return false; + } + + @Override + public String getWebsite() { + return "https://devblogs.microsoft.com/commandline/announcing-intelligent-terminal-version-0-1/"; + } + + @Override + public void launch(TerminalLaunchConfiguration configuration) throws Exception { + if (!isAvailable()) { + throw ErrorEventFactory.expected( + new IllegalArgumentException("Windows Intelligent Terminal is not installed at " + getPath())); + } + + checkProfile(); + try (var sc = LocalShell.getShell().start()) { + var exec = getPath(); + var firstScriptFile = configuration.getPanes().getFirst().getScriptFile(); + var spaces = firstScriptFile.toString().contains(" "); + + if (spaces) { + var wd = sc.view().pwd(); + sc.command(CommandBuilder.of().addFile(exec).add(toCommand(configuration))) + .withWorkingDirectory(firstScriptFile.getParent()) + .execute(); + sc.view().cd(wd); + } else { + sc.command(CommandBuilder.of().addFile(exec).add(toCommand(configuration))) + .execute(); + } + } + } + + private Path getPath() { + return AppSystemInfo.ofWindows() + .getLocalAppData() + .resolve("Microsoft\\WindowsApps\\Microsoft.IntelligentTerminal_8wekyb3d8bbwe\\wtai.exe"); + } + + @Override + public boolean isAvailable() { + // The executable is a weird link + return Files.exists(getPath().getParent()); + } + + @Override + public String getId() { + return "app.windowsIntelligentTerminal"; + } + + @Override + public Path getConfigFile() { + return AppSystemInfo.ofWindows() + .getLocalAppData() + .resolve("Packages\\Microsoft.IntelligentTerminal_8wekyb3d8bbwe\\LocalState\\settings.json"); + } + } } diff --git a/lang/strings/fixed_en.properties b/lang/strings/fixed_en.properties index f304308cf..0cbcd17de 100644 --- a/lang/strings/fixed_en.properties +++ b/lang/strings/fixed_en.properties @@ -63,6 +63,7 @@ dashlane=Dashlane lastpass=LastPass macosKeychain=macOS keychain windowsTerminalCanary=Windows Terminal Canary +windowsIntelligentTerminal=Windows Intelligent Terminal secureCrt=SecureCRT xShell=Xshell mobaXterm=MobaXterm