mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-06-23 08:30:38 +12:00
Rework kitty macos support
This commit is contained in:
parent
fe1665eace
commit
3ebaf17c0d
|
@ -584,47 +584,6 @@ public interface ExternalTerminalType extends PrefsChoiceValue {
|
|||
ExternalApplicationHelper.startAsync(c);
|
||||
}
|
||||
};
|
||||
ExternalTerminalType KITTY_MACOS = new MacOsType("app.kitty", "kitty") {
|
||||
|
||||
@Override
|
||||
public boolean supportsTabs() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsColoredTitle() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void launch(LaunchConfiguration configuration) throws Exception {
|
||||
if (!MacOsPermissions.waitForAccessibilityPermissions()) {
|
||||
return;
|
||||
}
|
||||
|
||||
try (ShellControl pc = LocalShell.getShell()) {
|
||||
pc.osascriptCommand(String.format(
|
||||
"""
|
||||
if application "Kitty" is running then
|
||||
tell application "Kitty" to activate
|
||||
tell application "System Events" to tell process "Kitty" to keystroke "t" using command down
|
||||
else
|
||||
tell application "Kitty" to activate
|
||||
end if
|
||||
delay 1
|
||||
tell application "System Events"
|
||||
tell process "Kitty"
|
||||
keystroke "%s"
|
||||
delay 0.01
|
||||
key code 36
|
||||
end tell
|
||||
end tell
|
||||
""",
|
||||
configuration.getScriptFile().toString().replaceAll("\"", "\\\\\"")))
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
};
|
||||
ExternalTerminalType CUSTOM = new CustomType();
|
||||
List<ExternalTerminalType> WINDOWS_TERMINALS = List.of(
|
||||
TABBY_WINDOWS,
|
||||
|
@ -653,7 +612,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue {
|
|||
DEEPIN_TERMINAL,
|
||||
Q_TERMINAL);
|
||||
List<ExternalTerminalType> MACOS_TERMINALS =
|
||||
List.of(ITERM2, TABBY_MAC_OS, ALACRITTY_MACOS, KITTY_MACOS, WARP, WEZ_MACOS, MACOS_TERMINAL);
|
||||
List.of(ITERM2, TABBY_MAC_OS, ALACRITTY_MACOS, KittyTerminalType.KITTY_MACOS, WARP, WEZ_MACOS, MACOS_TERMINAL);
|
||||
|
||||
@SuppressWarnings("TrivialFunctionalExpressionUsage")
|
||||
List<ExternalTerminalType> ALL = ((Supplier<List<ExternalTerminalType>>) () -> {
|
||||
|
|
|
@ -25,10 +25,64 @@ public class KittyTerminalType {
|
|||
|
||||
@Override
|
||||
public void launch(LaunchConfiguration configuration) throws Exception {
|
||||
try (var sc = LocalShell.getShell().start()) {
|
||||
CommandSupport.isInPathOrThrow(sc, "kitty", "Kitty", null);
|
||||
CommandSupport.isInPathOrThrow(sc, "socat", "socat", null);
|
||||
}
|
||||
|
||||
var toClose = prepare();
|
||||
open(configuration);
|
||||
var socketWrite = CommandBuilder.of().add("socat", "-");
|
||||
open(configuration, socketWrite);
|
||||
if (toClose) {
|
||||
closeInitial();
|
||||
closeInitial(socketWrite);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean prepare() throws Exception {
|
||||
var socket = getSocket();
|
||||
try (var sc = LocalShell.getShell().start()) {
|
||||
if (sc.executeSimpleBooleanCommand("test -w " + sc.getShellDialect().fileArgument(socket))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
sc.executeSimpleCommand(CommandBuilder.of().add("kitty").add("-o", "allow_remote_control=socket-only", "--listen-on", "unix:" + getSocket(), "--detach"));
|
||||
ThreadHelper.sleep(1500);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public static final ExternalTerminalType KITTY_MACOS = new ExternalTerminalType.MacOsType("app.kitty", "kitty") {
|
||||
|
||||
@Override
|
||||
public boolean supportsTabs() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void launch(LaunchConfiguration configuration) throws Exception {
|
||||
try (var sc = LocalShell.getShell().start()) {
|
||||
CommandSupport.isInPathOrThrow(sc, "nc", "Netcat", null);
|
||||
}
|
||||
|
||||
var toClose = prepare();
|
||||
var socketWrite = CommandBuilder.of().add("nc", "-U");
|
||||
open(configuration, socketWrite);
|
||||
if (toClose) {
|
||||
closeInitial(socketWrite);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean prepare() throws Exception {
|
||||
var socket = getSocket();
|
||||
try (var sc = LocalShell.getShell().start()) {
|
||||
if (sc.executeSimpleBooleanCommand("test -w " + sc.getShellDialect().fileArgument(socket))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
sc.executeSimpleCommand(CommandBuilder.of().add("open", "-a", "kitty.app", "--args").add("-o", "allow_remote_control=socket-only", "--listen-on", "unix:" + getSocket()));
|
||||
ThreadHelper.sleep(1000);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -41,23 +95,7 @@ public class KittyTerminalType {
|
|||
}
|
||||
}
|
||||
|
||||
private static boolean prepare() throws Exception {
|
||||
var socket = getSocket();
|
||||
try (var sc = LocalShell.getShell().start()) {
|
||||
CommandSupport.isInPathOrThrow(sc, "kitty", "Kitty", null);
|
||||
CommandSupport.isInPathOrThrow(sc, "socat", "socat", null);
|
||||
|
||||
if (sc.executeSimpleBooleanCommand("test -w " + sc.getShellDialect().fileArgument(socket))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
sc.executeSimpleCommand(CommandBuilder.of().add("kitty").add("-o", "allow_remote_control=socket-only", "--listen-on", "unix:" + getSocket(), "--detach"));
|
||||
ThreadHelper.sleep(1500);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private static void open(ExternalTerminalType.LaunchConfiguration configuration) throws Exception {
|
||||
private static void open(ExternalTerminalType.LaunchConfiguration configuration, CommandBuilder socketWrite) throws Exception {
|
||||
try (var sc = LocalShell.getShell().start()) {
|
||||
var payload = JsonNodeFactory.instance.objectNode();
|
||||
var args = configuration.getDialectLaunchCommand().buildBaseParts(sc);
|
||||
|
@ -75,11 +113,11 @@ public class KittyTerminalType {
|
|||
var jsonString = json.toString();
|
||||
var echoString = "'\\eP@kitty-cmd" + jsonString + "\\e\\\\'";
|
||||
|
||||
sc.executeSimpleCommand(CommandBuilder.of().add("echo", "-en", echoString, "|", "socat", "-").addFile(getSocket()));
|
||||
sc.executeSimpleCommand(CommandBuilder.of().add("echo", "-en", echoString, "|").add(socketWrite).addFile(getSocket()));
|
||||
}
|
||||
}
|
||||
|
||||
private static void closeInitial() throws Exception {
|
||||
private static void closeInitial( CommandBuilder socketWrite) throws Exception {
|
||||
try (var sc = LocalShell.getShell().start()) {
|
||||
var payload = JsonNodeFactory.instance.objectNode();
|
||||
payload.put("match", "not recent:0");
|
||||
|
@ -91,7 +129,7 @@ public class KittyTerminalType {
|
|||
var jsonString = json.toString();
|
||||
var echoString = "'\\eP@kitty-cmd" + jsonString + "\\e\\\\'";
|
||||
|
||||
sc.executeSimpleCommand(CommandBuilder.of().add("echo", "-en", echoString, "|", "socat", "-").addFile(getSocket()));
|
||||
sc.executeSimpleCommand(CommandBuilder.of().add("echo", "-en", echoString, "|").add(socketWrite).addFile(getSocket()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue