mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-09-10 15:46:26 -04:00
Windows ConPTY can't attach a child process to a pseudoconsole via os/exec — Go's stdlib doesn't expose PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE (golang/go#62708). The ConPTY path has to call CreateProcess directly, so it can't hand an *exec.Cmd back to the task runner. Widen NewCmdTask to accept a small Cmd interface satisfied by both *exec.Cmd (via the ExecCmd adapter) and the Windows ConPTY command type we're about to add. Change TerminateProcessGracefully to take *os.Process, which both cmd shapes can provide. Behavior is unchanged on every platform. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
//go:build !windows
|
|
|
|
package oscommands
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"runtime"
|
|
"strings"
|
|
"syscall"
|
|
)
|
|
|
|
func GetPlatform() *Platform {
|
|
shell := getUserShell()
|
|
|
|
prefixForShellFunctionsFile := ""
|
|
if strings.HasSuffix(shell, "bash") {
|
|
prefixForShellFunctionsFile = "shopt -s expand_aliases\n"
|
|
}
|
|
|
|
return &Platform{
|
|
OS: runtime.GOOS,
|
|
Shell: shell,
|
|
ShellArg: "-c",
|
|
PrefixForShellFunctionsFile: prefixForShellFunctionsFile,
|
|
OpenCommand: "open {{filename}}",
|
|
OpenLinkCommand: "open {{link}}",
|
|
}
|
|
}
|
|
|
|
func getUserShell() string {
|
|
if shell := os.Getenv("SHELL"); shell != "" {
|
|
return shell
|
|
}
|
|
|
|
return "bash"
|
|
}
|
|
|
|
func (c *OSCommand) UpdateWindowTitle() error {
|
|
return nil
|
|
}
|
|
|
|
// setRawCmdLine is the non-Windows no-op counterpart of the Windows shim
|
|
// (see the comment there). NewShell's shell-building logic is portable, so
|
|
// this call is reached on every host; only the Windows build does anything.
|
|
func setRawCmdLine(cmd *exec.Cmd, cmdLine string) {}
|
|
|
|
func TerminateProcessGracefully(proc *os.Process) error {
|
|
if proc == nil {
|
|
return nil
|
|
}
|
|
|
|
return proc.Signal(syscall.SIGTERM)
|
|
}
|