mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-09-28 23:31:43 +12:00
Kitty fixes
This commit is contained in:
parent
a8f07c3e0f
commit
beb467af5a
3 changed files with 38 additions and 9 deletions
|
@ -1,7 +1,10 @@
|
|||
package io.xpipe.app.terminal;
|
||||
|
||||
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
||||
import io.xpipe.app.util.ApplicationHelper;
|
||||
import io.xpipe.app.util.LocalShell;
|
||||
import io.xpipe.app.util.ShellTemp;
|
||||
import io.xpipe.app.util.ThreadHelper;
|
||||
import io.xpipe.core.process.CommandBuilder;
|
||||
import io.xpipe.core.store.FilePath;
|
||||
import io.xpipe.core.util.XPipeInstallation;
|
||||
|
@ -12,7 +15,7 @@ public class KittyTerminalType {
|
|||
|
||||
@Override
|
||||
public String getId() {
|
||||
return "app.tabby";
|
||||
return "app.kitty";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -22,33 +25,42 @@ public class KittyTerminalType {
|
|||
|
||||
@Override
|
||||
public void launch(LaunchConfiguration configuration) throws Exception {
|
||||
launchInstanceIfNeeded();
|
||||
var toClose = prepare();
|
||||
open(configuration);
|
||||
if (toClose) {
|
||||
closeInitial();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private static FilePath getSocket() throws Exception {
|
||||
try (var sc = LocalShell.getShell().start()) {
|
||||
var temp = sc.getSystemTemporaryDirectory();
|
||||
var temp = ShellTemp.getUserSpecificTempDataDirectory(sc, null);
|
||||
sc.executeSimpleCommand(sc.getShellDialect().getMkdirsCommand(temp.toString()));
|
||||
return temp.join("xpipe_kitty");
|
||||
}
|
||||
}
|
||||
|
||||
private static void launchInstanceIfNeeded() throws Exception {
|
||||
private static boolean prepare() throws Exception {
|
||||
var socket = getSocket();
|
||||
try (var sc = LocalShell.getShell().start()) {
|
||||
if (sc.getShellDialect().createFileExistsCommand(sc,socket.toString()).executeAndCheck()) {
|
||||
return;
|
||||
ApplicationHelper.checkIsInPath(sc, "kitty", "Kitty", null);
|
||||
ApplicationHelper.checkIsInPath(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()) {
|
||||
var payload = JsonNodeFactory.instance.objectNode();
|
||||
payload.put("args", configuration.getDialectLaunchCommand().buildString(sc));
|
||||
payload.putArray("args").add("bash");
|
||||
payload.put("tab_title",configuration.getColoredTitle());
|
||||
payload.put("type", "tab");
|
||||
payload.put("logo_alpha", 0.01);
|
||||
|
@ -57,6 +69,23 @@ public class KittyTerminalType {
|
|||
var json = JsonNodeFactory.instance.objectNode();
|
||||
json.put("cmd", "launch");
|
||||
json.set("payload", payload);
|
||||
json.putArray("version").add(0).add(14).add(2);
|
||||
var jsonString = json.toString();
|
||||
var echoString = "'\\eP@kitty-cmd" + jsonString + "\\e\\\\'";
|
||||
|
||||
sc.executeSimpleCommand(CommandBuilder.of().add("echo", "-en", echoString, "|", "socat", "-").addFile(getSocket()));
|
||||
}
|
||||
}
|
||||
|
||||
private static void closeInitial() throws Exception {
|
||||
try (var sc = LocalShell.getShell().start()) {
|
||||
var payload = JsonNodeFactory.instance.objectNode();
|
||||
payload.put("match", "not recent:0");
|
||||
|
||||
var json = JsonNodeFactory.instance.objectNode();
|
||||
json.put("cmd", "close-tab");
|
||||
json.set("payload", payload);
|
||||
json.putArray("version").add(0).add(14).add(2);
|
||||
var jsonString = json.toString();
|
||||
var echoString = "'\\eP@kitty-cmd" + jsonString + "\\e\\\\'";
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ public class ShellTemp {
|
|||
var temp = proc.getSystemTemporaryDirectory();
|
||||
base = temp.join("xpipe");
|
||||
}
|
||||
return base.join(sub);
|
||||
return sub != null ? base.join(sub) : base;
|
||||
}
|
||||
|
||||
public static void checkTempDirectory(ShellControl proc) throws Exception {
|
||||
|
|
|
@ -187,7 +187,7 @@ public class CommandBuilder {
|
|||
}
|
||||
|
||||
public CommandBuilder addFile(FilePath s) {
|
||||
return addFile(shellControl -> shellControl.getShellDialect().fileArgument(s));
|
||||
return addFile(s.toString());
|
||||
}
|
||||
|
||||
public CommandBuilder addLiteral(String s) {
|
||||
|
|
Loading…
Reference in a new issue