mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-21 15:10:23 +00:00
Properly work around windows terminal elevation issues
This commit is contained in:
parent
aae09c255f
commit
6d748b24e6
2 changed files with 29 additions and 12 deletions
|
@ -1,7 +1,9 @@
|
||||||
package io.xpipe.app.terminal;
|
package io.xpipe.app.terminal;
|
||||||
|
|
||||||
|
import io.xpipe.app.ext.ProcessControlProvider;
|
||||||
import io.xpipe.app.issue.ErrorEvent;
|
import io.xpipe.app.issue.ErrorEvent;
|
||||||
import io.xpipe.app.util.LocalShell;
|
import io.xpipe.app.util.LocalShell;
|
||||||
|
import io.xpipe.app.util.ScriptHelper;
|
||||||
import io.xpipe.core.process.CommandBuilder;
|
import io.xpipe.core.process.CommandBuilder;
|
||||||
import io.xpipe.core.process.ShellDialects;
|
import io.xpipe.core.process.ShellDialects;
|
||||||
import io.xpipe.core.store.FileNames;
|
import io.xpipe.core.store.FileNames;
|
||||||
|
@ -16,23 +18,38 @@ public interface WindowsTerminalType extends ExternalTerminalType {
|
||||||
ExternalTerminalType WINDOWS_TERMINAL_CANARY = new Canary();
|
ExternalTerminalType WINDOWS_TERMINAL_CANARY = new Canary();
|
||||||
|
|
||||||
private static CommandBuilder toCommand(ExternalTerminalType.LaunchConfiguration configuration) throws Exception {
|
private static CommandBuilder toCommand(ExternalTerminalType.LaunchConfiguration configuration) throws Exception {
|
||||||
|
var cmd = CommandBuilder.of().add("-w", "1", "nt");
|
||||||
|
|
||||||
|
if (configuration.getColor() != null) {
|
||||||
|
cmd.add("--tabColor").addQuoted(configuration.getColor().toHexString());
|
||||||
|
}
|
||||||
|
|
||||||
// A weird behavior in Windows Terminal causes the trailing
|
// A weird behavior in Windows Terminal causes the trailing
|
||||||
// backslash of a filepath to escape the closing quote in the title argument
|
// backslash of a filepath to escape the closing quote in the title argument
|
||||||
// So just remove that slash
|
// So just remove that slash
|
||||||
var fixedName = FileNames.removeTrailingSlash(configuration.getColoredTitle());
|
var fixedName = FileNames.removeTrailingSlash(configuration.getColoredTitle());
|
||||||
|
cmd.add("--title").addQuoted(fixedName);
|
||||||
|
|
||||||
var cmd = CommandBuilder.of().add("-w", "1", "nt");
|
// wt can't elevate a command consisting out of multiple parts if wt is configured to elevate by default
|
||||||
if (configuration.getColor() != null) {
|
// So work around it by just passing a script file if possible
|
||||||
cmd.add("--tabColor").addQuoted(configuration.getColor().toHexString());
|
if (ShellDialects.isPowershell(configuration.getScriptDialect())) {
|
||||||
|
var usesPowershell = ShellDialects.isPowershell(ProcessControlProvider.get().getEffectiveLocalDialect());
|
||||||
|
if (usesPowershell) {
|
||||||
|
// We can't work around it in this case, so let's just hope that there's no elevation configured
|
||||||
|
cmd.add(configuration.getDialectLaunchCommand());
|
||||||
|
} else {
|
||||||
|
// There might be a mismatch if we are for example using logging
|
||||||
|
// In this case we can actually work around the problem
|
||||||
|
cmd.addFile(shellControl -> {
|
||||||
|
var script = ScriptHelper.createExecScript(shellControl, configuration.getDialectLaunchCommand().buildFull(shellControl));
|
||||||
|
return script.toString();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cmd.addFile(configuration.getScriptFile());
|
||||||
}
|
}
|
||||||
// This is a fix for rare wt startup issues when using the full cmd launch command instead of just passing the .bat script
|
|
||||||
// This must be a bug on wt's side, so work around it by just passing the script file
|
return cmd;
|
||||||
var toExec = !ShellDialects.isPowershell(configuration.getScriptDialect())
|
|
||||||
? CommandBuilder.of().addFile(configuration.getScriptFile())
|
|
||||||
: CommandBuilder.of()
|
|
||||||
.add("powershell", "-ExecutionPolicy", "Bypass", "-File")
|
|
||||||
.addFile(configuration.getScriptFile());
|
|
||||||
return cmd.add("--title").addQuoted(fixedName).add(toExec);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -176,7 +176,7 @@ public class CommandBuilder {
|
||||||
return prepend("\"" + s + "\"");
|
return prepend("\"" + s + "\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
public CommandBuilder addFile(Function<ShellControl, String> f) {
|
public CommandBuilder addFile(FailableFunction<ShellControl, String, Exception> f) {
|
||||||
elements.add(sc -> {
|
elements.add(sc -> {
|
||||||
if (f == null) {
|
if (f == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|
Loading…
Reference in a new issue