diff options
Diffstat (limited to 'dot-oh-my-zsh/custom/plugins/fzf/src/util/util_windows.go')
| -rw-r--r-- | dot-oh-my-zsh/custom/plugins/fzf/src/util/util_windows.go | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/dot-oh-my-zsh/custom/plugins/fzf/src/util/util_windows.go b/dot-oh-my-zsh/custom/plugins/fzf/src/util/util_windows.go new file mode 100644 index 00000000..b3f4e016 --- /dev/null +++ b/dot-oh-my-zsh/custom/plugins/fzf/src/util/util_windows.go @@ -0,0 +1,83 @@ +//go:build windows + +package util + +import ( + "fmt" + "os" + "os/exec" + "strings" + "sync/atomic" + "syscall" +) + +var shellPath atomic.Value + +// ExecCommand executes the given command with $SHELL +func ExecCommand(command string, setpgid bool) *exec.Cmd { + var shell string + if cached := shellPath.Load(); cached != nil { + shell = cached.(string) + } else { + shell = os.Getenv("SHELL") + if len(shell) == 0 { + shell = "cmd" + } else if strings.Contains(shell, "/") { + out, err := exec.Command("cygpath", "-w", shell).Output() + if err == nil { + shell = strings.Trim(string(out), "\n") + } + } + shellPath.Store(shell) + } + return ExecCommandWith(shell, command, setpgid) +} + +// ExecCommandWith executes the given command with the specified shell +// FIXME: setpgid is unused. We set it in the Unix implementation so that we +// can kill preview process with its child processes at once. +// NOTE: For "powershell", we should ideally set output encoding to UTF8, +// but it is left as is now because no adverse effect has been observed. +func ExecCommandWith(shell string, command string, setpgid bool) *exec.Cmd { + var cmd *exec.Cmd + if strings.Contains(shell, "cmd") { + cmd = exec.Command(shell) + cmd.SysProcAttr = &syscall.SysProcAttr{ + HideWindow: false, + CmdLine: fmt.Sprintf(` /v:on/s/c "%s"`, command), + CreationFlags: 0, + } + return cmd + } + + if strings.Contains(shell, "pwsh") || strings.Contains(shell, "powershell") { + cmd = exec.Command(shell, "-NoProfile", "-Command", command) + } else { + cmd = exec.Command(shell, "-c", command) + } + cmd.SysProcAttr = &syscall.SysProcAttr{ + HideWindow: false, + CreationFlags: 0, + } + return cmd +} + +// KillCommand kills the process for the given command +func KillCommand(cmd *exec.Cmd) error { + return cmd.Process.Kill() +} + +// IsWindows returns true on Windows +func IsWindows() bool { + return true +} + +// SetNonblock executes syscall.SetNonblock on file descriptor +func SetNonblock(file *os.File, nonblock bool) { + syscall.SetNonblock(syscall.Handle(file.Fd()), nonblock) +} + +// Read executes syscall.Read on file descriptor +func Read(fd int, b []byte) (int, error) { + return syscall.Read(syscall.Handle(fd), b) +} |
