mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-09-30 00:56:56 +13:00
Rework kitty macos support
This commit is contained in:
parent
fe1665eace
commit
3ebaf17c0d
2 changed files with 61 additions and 64 deletions
|
@ -584,47 +584,6 @@ public interface ExternalTerminalType extends PrefsChoiceValue {
|
||||||
ExternalApplicationHelper.startAsync(c);
|
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();
|
ExternalTerminalType CUSTOM = new CustomType();
|
||||||
List<ExternalTerminalType> WINDOWS_TERMINALS = List.of(
|
List<ExternalTerminalType> WINDOWS_TERMINALS = List.of(
|
||||||
TABBY_WINDOWS,
|
TABBY_WINDOWS,
|
||||||
|
@ -653,7 +612,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue {
|
||||||
DEEPIN_TERMINAL,
|
DEEPIN_TERMINAL,
|
||||||
Q_TERMINAL);
|
Q_TERMINAL);
|
||||||
List<ExternalTerminalType> MACOS_TERMINALS =
|
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")
|
@SuppressWarnings("TrivialFunctionalExpressionUsage")
|
||||||
List<ExternalTerminalType> ALL = ((Supplier<List<ExternalTerminalType>>) () -> {
|
List<ExternalTerminalType> ALL = ((Supplier<List<ExternalTerminalType>>) () -> {
|
||||||
|
|
|
@ -25,10 +25,64 @@ public class KittyTerminalType {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void launch(LaunchConfiguration configuration) throws Exception {
|
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();
|
var toClose = prepare();
|
||||||
open(configuration);
|
var socketWrite = CommandBuilder.of().add("socat", "-");
|
||||||
|
open(configuration, socketWrite);
|
||||||
if (toClose) {
|
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 {
|
private static void open(ExternalTerminalType.LaunchConfiguration configuration, CommandBuilder socketWrite) 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 {
|
|
||||||
try (var sc = LocalShell.getShell().start()) {
|
try (var sc = LocalShell.getShell().start()) {
|
||||||
var payload = JsonNodeFactory.instance.objectNode();
|
var payload = JsonNodeFactory.instance.objectNode();
|
||||||
var args = configuration.getDialectLaunchCommand().buildBaseParts(sc);
|
var args = configuration.getDialectLaunchCommand().buildBaseParts(sc);
|
||||||
|
@ -75,11 +113,11 @@ public class KittyTerminalType {
|
||||||
var jsonString = json.toString();
|
var jsonString = json.toString();
|
||||||
var echoString = "'\\eP@kitty-cmd" + jsonString + "\\e\\\\'";
|
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()) {
|
try (var sc = LocalShell.getShell().start()) {
|
||||||
var payload = JsonNodeFactory.instance.objectNode();
|
var payload = JsonNodeFactory.instance.objectNode();
|
||||||
payload.put("match", "not recent:0");
|
payload.put("match", "not recent:0");
|
||||||
|
@ -91,7 +129,7 @@ public class KittyTerminalType {
|
||||||
var jsonString = json.toString();
|
var jsonString = json.toString();
|
||||||
var echoString = "'\\eP@kitty-cmd" + jsonString + "\\e\\\\'";
|
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