diff --git a/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java index e1a6f3975..911f12b77 100644 --- a/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java @@ -67,6 +67,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue { ExternalTerminalType GNOME_TERMINAL = new GnomeTerminalType(); ExternalTerminalType GNOME_CONSOLE = new GnomeConsoleType(); ExternalTerminalType PTYXIS = new PtyxisTerminalType(); + ExternalTerminalType YAKUAKE = new YakuakeTerminalType(); ExternalTerminalType KONSOLE = new KonsoleTerminalType(); ExternalTerminalType XFCE = new SimplePathType("app.xfce", "xfce4-terminal", true) { @Override @@ -473,6 +474,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue { KONSOLE, GNOME_TERMINAL, GhosttyTerminalType.GHOSTTY_LINUX, + YAKUAKE, TILIX, GUAKE, TILDA, diff --git a/app/src/main/java/io/xpipe/app/terminal/YakuakeTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/YakuakeTerminalType.java new file mode 100644 index 000000000..cfe6fd2bc --- /dev/null +++ b/app/src/main/java/io/xpipe/app/terminal/YakuakeTerminalType.java @@ -0,0 +1,68 @@ +package io.xpipe.app.terminal; + +import io.xpipe.app.prefs.ExternalApplicationHelper; +import io.xpipe.app.prefs.ExternalApplicationType; +import io.xpipe.app.process.CommandBuilder; +import io.xpipe.app.process.CommandSupport; +import io.xpipe.app.process.LocalShell; +import io.xpipe.app.util.FlatpakCache; + +public class YakuakeTerminalType implements ExternalApplicationType.LinuxApplication, TrackableTerminalType { + + @Override + public TerminalOpenFormat getOpenFormat() { + return TerminalOpenFormat.TABBED; + } + + @Override + public String getWebsite() { + return "https://apps.kde.org/en-gb/yakuake/"; + } + + @Override + public boolean isRecommended() { + return true; + } + + @Override + public boolean useColoredTitle() { + return true; + } + + @Override + public void launch(TerminalLaunchConfiguration configuration) throws Exception { + CommandSupport.isInLocalPathOrThrow("Yakuake", "yakuake"); + + var toggle = CommandBuilder.of().add("qdbus", "org.kde.yakuake", "/yakuake/window", "org.kde.yakuake.toggleWindowState"); + LocalShell.getShell().command(toggle).execute(); + + var newTab = CommandBuilder.of().add("qdbus", "org.kde.yakuake", "/yakuake/session","org.kde.yakuake.addSession"); + LocalShell.getShell().command(newTab).execute(); + + var renameTab = CommandBuilder.of().add("qdbus", "org.kde.yakuake", "/yakuake/tabs", "setTabTitle").addLiteral(configuration.getColoredTitle()); + LocalShell.getShell().command(renameTab).execute(); + + var run = CommandBuilder.of().add("qdbus", "org.kde.yakuake", "/yakuake/sessions", "runCommandInTerminal").addLiteral(configuration.getColoredTitle()); + LocalShell.getShell().command(run).execute(); + } + + @Override + public String getExecutable() { + return "yakuake"; + } + + @Override + public boolean detach() { + return true; + } + + @Override + public String getId() { + return "app.yakuake"; + } + + @Override + public String getFlatpakId() throws Exception { + return null; + } +} diff --git a/lang/strings/fixed_en.properties b/lang/strings/fixed_en.properties index 29628a6cf..65ed01be1 100644 --- a/lang/strings/fixed_en.properties +++ b/lang/strings/fixed_en.properties @@ -156,3 +156,4 @@ ed25519=ED25519 ed25519Sk=ED25519 (FIDO2) westonEditor=Weston Editor passbolt=Passbolt +yakuake=Yakuake