From f5e109ab4160ae359a2c994ce4f6558a5a67c7ca Mon Sep 17 00:00:00 2001 From: Leo Hung <122880911+Leo145x@users.noreply.github.com> Date: Sat, 12 Sep 2026 01:30:40 +0800 Subject: [PATCH] Fix terminal selection resetting to uninstalled Warp (#924) --- .../io/xpipe/app/terminal/WarpTerminalType.java | 16 +++++++++++++++- .../xpipe/app/terminal/WindowsTerminalType.java | 6 ++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/xpipe/app/terminal/WarpTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/WarpTerminalType.java index abfafec40..d5ae6d4cf 100644 --- a/app/src/main/java/io/xpipe/app/terminal/WarpTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/WarpTerminalType.java @@ -9,6 +9,7 @@ import io.xpipe.app.webtop.WebtopApp; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.InvalidPathException; import java.nio.file.Path; public interface WarpTerminalType extends ExternalTerminalType, TrackableTerminalType { @@ -57,7 +58,20 @@ public interface WarpTerminalType extends ExternalTerminalType, TrackableTermina @Override public boolean isAvailable() { - return WindowsRegistry.local().keyExists(WindowsRegistry.HKEY_CURRENT_USER, "Software\\Classes\\warp"); + // The uninstaller leaves the protocol handler key behind + var command = WindowsRegistry.local() + .readStringValueIfPresent( + WindowsRegistry.HKEY_CURRENT_USER, "Software\\Classes\\warp\\shell\\open\\command", null); + if (command.isEmpty()) { + return false; + } + + try { + var split = command.get().split("\""); + return split.length > 1 && Files.exists(Path.of(split[1])); + } catch (InvalidPathException ignored) { + return false; + } } @Override 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 40df835c8..1923fd410 100644 --- a/app/src/main/java/io/xpipe/app/terminal/WindowsTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/WindowsTerminalType.java @@ -181,6 +181,12 @@ public interface WindowsTerminalType extends ExternalTerminalType, TrackableTerm super("app.windowsTerminal", "wt.exe", false); } + @Override + public boolean isAvailable() { + // The executable is a weird link + return Files.exists(getPath().getParent()) || super.isAvailable(); + } + @Override public void launch(TerminalLaunchConfiguration configuration) throws Exception { checkProfile();