mirror of
https://github.com/xpipe-io/xpipe.git
synced 2026-05-06 04:40:37 +00:00
Rework
This commit is contained in:
@@ -139,7 +139,7 @@ public interface ExternalApplicationType extends PrefsValue {
|
||||
+ " not installed. Install it and refresh the environment by restarting XPipe"));
|
||||
}
|
||||
|
||||
args.add(0, FlatpakCache.runCommand(getFlatpakId()));
|
||||
args.add(0, FlatpakCache.getRunCommand(getFlatpakId()));
|
||||
if (detach()) {
|
||||
ExternalApplicationHelper.startAsync(args);
|
||||
} else {
|
||||
|
||||
@@ -436,7 +436,7 @@ public interface ExternalEditorType extends PrefsChoiceValue {
|
||||
public void launch(Path file) throws Exception {
|
||||
var exec = CommandSupport.isInLocalPath(getExecutable())
|
||||
? CommandBuilder.of().addFile(getExecutable())
|
||||
: FlatpakCache.runCommand(getFlatpakId());
|
||||
: FlatpakCache.getRunCommand(getFlatpakId());
|
||||
|
||||
if (FlatpakCache.getApp(getFlatpakId()).isEmpty()) {
|
||||
CommandSupport.isInPathOrThrow(LocalShell.getShell(), getExecutable());
|
||||
@@ -807,7 +807,7 @@ public interface ExternalEditorType extends PrefsChoiceValue {
|
||||
CommandSupport.isInPathOrThrow(LocalShell.getShell(), getExecutable());
|
||||
}
|
||||
|
||||
var builder = FlatpakCache.runCommand(getFlatpakId()).addFile(file.toString());
|
||||
var builder = FlatpakCache.getRunCommand(getFlatpakId()).addFile(file.toString());
|
||||
ExternalApplicationHelper.startAsync(builder);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,13 +42,12 @@ public class ShellTemp {
|
||||
if (proc.getOsType() != OsType.WINDOWS && proc.getOsType() != OsType.MACOS) {
|
||||
var temp = proc.getSystemTemporaryDirectory();
|
||||
base = temp.join("xpipe");
|
||||
proc.command(proc.getShellDialect().getMkdirsCommand(base.toString()))
|
||||
.execute();
|
||||
proc.view().mkdir(base);
|
||||
// We have to make sure that also other users can create files here
|
||||
// This command should work in all shells
|
||||
proc.command("chmod 777 " + proc.getShellDialect().fileArgument(base))
|
||||
.executeAndCheck();
|
||||
var user = proc.getShellDialect().printUsernameCommand(proc).readStdoutOrThrow();
|
||||
var user = proc.view().user();
|
||||
base = base.join(user);
|
||||
} else {
|
||||
var temp = proc.getSystemTemporaryDirectory();
|
||||
|
||||
@@ -26,7 +26,7 @@ public class FreeRdpClient implements ExternalRdpClient {
|
||||
if (!v2 && OsType.ofLocal() == OsType.LINUX) {
|
||||
var flatpak = FlatpakCache.getApp("com.freerdp.FreeRDP");
|
||||
if (flatpak.isPresent()) {
|
||||
exec = FlatpakCache.runCommand("com.freerdp.FreeRDP");
|
||||
exec = FlatpakCache.getRunCommand("com.freerdp.FreeRDP");
|
||||
v3 = true;
|
||||
} else {
|
||||
CommandSupport.isInPathOrThrow(LocalShell.getShell(), "xfreerdp");
|
||||
|
||||
@@ -34,7 +34,6 @@ public interface KittyTerminalType extends ExternalTerminalType, TrackableTermin
|
||||
private static FilePath getSocket() throws Exception {
|
||||
try (var sc = LocalShell.getShell().start()) {
|
||||
var temp = ShellTemp.createUserSpecificTempDataDirectory(sc, null);
|
||||
sc.executeSimpleCommand(sc.getShellDialect().getMkdirsCommand(temp.toString()));
|
||||
return temp.join(AppNames.ofCurrent().getSnakeName() + "_kitty");
|
||||
}
|
||||
}
|
||||
@@ -134,7 +133,6 @@ public interface KittyTerminalType extends ExternalTerminalType, TrackableTermin
|
||||
|
||||
@Override
|
||||
default boolean isRecommended() {
|
||||
// There are some race conditions with the socket, although that should be fixed to some degree
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package io.xpipe.app.terminal;
|
||||
|
||||
import io.xpipe.app.issue.ErrorEventFactory;
|
||||
import io.xpipe.app.prefs.AppPrefs;
|
||||
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;
|
||||
import io.xpipe.app.util.ThreadHelper;
|
||||
import io.xpipe.app.util.WindowsRegistry;
|
||||
import io.xpipe.core.OsType;
|
||||
|
||||
@@ -95,6 +97,11 @@ public interface WezTerminalType extends ExternalTerminalType, TrackableTerminal
|
||||
|
||||
class Linux implements ExternalApplicationType, WezTerminalType {
|
||||
|
||||
@Override
|
||||
public boolean supportsSplitView() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TerminalOpenFormat getOpenFormat() {
|
||||
return TerminalOpenFormat.NEW_WINDOW_OR_TABBED;
|
||||
@@ -110,7 +117,7 @@ public interface WezTerminalType extends ExternalTerminalType, TrackableTerminal
|
||||
base = CommandBuilder.of().addFile("wezterm");
|
||||
} else {
|
||||
if (flatpak.isPresent()) {
|
||||
base = FlatpakCache.runCommand("org.wezfurlong.wezterm");
|
||||
base = FlatpakCache.getRunCommand("org.wezfurlong.wezterm");
|
||||
} else {
|
||||
base = CommandBuilder.of().addFile("wezterm");
|
||||
}
|
||||
@@ -120,23 +127,53 @@ public interface WezTerminalType extends ExternalTerminalType, TrackableTerminal
|
||||
.command(CommandBuilder.of()
|
||||
.add(base)
|
||||
.add("cli", "spawn")
|
||||
.addFile(configuration.single().getScriptFile()))
|
||||
.addFile(configuration.getPanes().getFirst().getScriptFile()))
|
||||
.executeAndCheck();
|
||||
}
|
||||
|
||||
if (runGui) {
|
||||
var start = System.currentTimeMillis();
|
||||
CommandBuilder base;
|
||||
if (CommandSupport.isInLocalPath("wezterm-gui")) {
|
||||
base = CommandBuilder.of().addFile("wezterm-gui");
|
||||
} else {
|
||||
if (flatpak.isPresent()) {
|
||||
base = FlatpakCache.runCommand("org.wezfurlong.wezterm");
|
||||
base = FlatpakCache.getRunCommand("org.wezfurlong.wezterm");
|
||||
} else {
|
||||
base = CommandBuilder.of().addFile("wezterm-gui");
|
||||
}
|
||||
}
|
||||
ExternalApplicationHelper.startAsync(
|
||||
CommandBuilder.of().add(base).add("start").addFile(configuration.single().getScriptFile()));
|
||||
CommandBuilder.of().add(base).add("start").addFile(configuration.getPanes().getFirst().getScriptFile()));
|
||||
var elapsed = System.currentTimeMillis() - start;
|
||||
// Is there a better way?
|
||||
ThreadHelper.sleep(elapsed * 10);
|
||||
}
|
||||
|
||||
if (configuration.getPanes().size() > 1) {
|
||||
CommandBuilder base;
|
||||
if (CommandSupport.isInLocalPath("wezterm")) {
|
||||
base = CommandBuilder.of().addFile("wezterm");
|
||||
} else {
|
||||
if (flatpak.isPresent()) {
|
||||
base = FlatpakCache.getRunCommand("org.wezfurlong.wezterm");
|
||||
} else {
|
||||
base = CommandBuilder.of().addFile("wezterm");
|
||||
}
|
||||
}
|
||||
|
||||
var direction = AppPrefs.get().terminalSplitStrategy().getValue();
|
||||
|
||||
for (int i = 1; i < configuration.getPanes().size(); i++) {
|
||||
LocalShell.getShell()
|
||||
.command(CommandBuilder.of()
|
||||
.add(base)
|
||||
.add("cli", "split-pane")
|
||||
.addIf(direction == TerminalSplitStrategy.HORIZONTAL, "--horizontal")
|
||||
.addIf(direction == TerminalSplitStrategy.VERTICAL, "--verical")
|
||||
.addFile(configuration.getPanes().getFirst().getScriptFile()))
|
||||
.executeAndCheck();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,6 +194,11 @@ public interface WezTerminalType extends ExternalTerminalType, TrackableTerminal
|
||||
|
||||
class MacOs implements ExternalApplicationType.MacApplication, WezTerminalType {
|
||||
|
||||
@Override
|
||||
public boolean supportsSplitView() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TerminalOpenFormat getOpenFormat() {
|
||||
return TerminalOpenFormat.NEW_WINDOW_OR_TABBED;
|
||||
|
||||
@@ -44,7 +44,7 @@ public class FlatpakCache {
|
||||
return Optional.ofNullable(app);
|
||||
}
|
||||
|
||||
public static CommandBuilder runCommand(String id) {
|
||||
public static CommandBuilder getRunCommand(String id) {
|
||||
return CommandBuilder.of()
|
||||
.add("flatpak", "run")
|
||||
.add("--filesystem=" + AppSystemInfo.ofLinux().getTemp())
|
||||
|
||||
Reference in New Issue
Block a user