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();