Rework kitty macos support

This commit is contained in:
crschnick 2024-04-01 08:06:14 +00:00
parent fe1665eace
commit 3ebaf17c0d
2 changed files with 61 additions and 64 deletions

View file

@ -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>>) () -> {

View file

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