Kill running preview process after 500ms when focus has changed

Close #1383
Close #1384
This commit is contained in:
Junegunn Choi
2018-09-27 15:27:08 +09:00
parent 27c40dc6b0
commit 0d748a0699
5 changed files with 82 additions and 18 deletions

View File

@@ -9,17 +9,26 @@ import (
)
// ExecCommand executes the given command with $SHELL
func ExecCommand(command string) *exec.Cmd {
func ExecCommand(command string, setpgid bool) *exec.Cmd {
shell := os.Getenv("SHELL")
if len(shell) == 0 {
shell = "sh"
}
return ExecCommandWith(shell, command)
return ExecCommandWith(shell, command, setpgid)
}
// ExecCommandWith executes the given command with the specified shell
func ExecCommandWith(shell string, command string) *exec.Cmd {
return exec.Command(shell, "-c", command)
func ExecCommandWith(shell string, command string, setpgid bool) *exec.Cmd {
cmd := exec.Command(shell, "-c", command)
if setpgid {
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
}
return cmd
}
// KillCommand kills the process for the given command
func KillCommand(cmd *exec.Cmd) error {
return syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)
}
// IsWindows returns true on Windows
@@ -27,7 +36,7 @@ func IsWindows() bool {
return false
}
// SetNonBlock executes syscall.SetNonblock on file descriptor
// SetNonblock executes syscall.SetNonblock on file descriptor
func SetNonblock(file *os.File, nonblock bool) {
syscall.SetNonblock(int(file.Fd()), nonblock)
}