Fix for lost clipboard contents (#5424) (#5426)

* Fix for lost clipboard contents (#5424)

* PR feedback: Call "setsid" for all unix systems

* PR Feedback: Only install libc for unix targets
This commit is contained in:
gavynriebau 2023-01-16 15:13:48 +08:00 committed by GitHub
parent b6331394a3
commit cce19713fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 3 deletions

1
Cargo.lock generated
View File

@ -1274,6 +1274,7 @@ dependencies = [
"helix-lsp",
"helix-tui",
"helix-vcs",
"libc",
"log",
"once_cell",
"serde",

View File

@ -48,5 +48,8 @@ which = "4.2"
[target.'cfg(windows)'.dependencies]
clipboard-win = { version = "4.5", features = ["std"] }
[target.'cfg(unix)'.dependencies]
libc = "0.2"
[dev-dependencies]
helix-tui = { path = "../helix-tui" }

View File

@ -276,12 +276,27 @@ fn execute(&self, input: Option<&str>, pipe_output: bool) -> Result<Option<Strin
let stdin = input.map(|_| Stdio::piped()).unwrap_or_else(Stdio::null);
let stdout = pipe_output.then(Stdio::piped).unwrap_or_else(Stdio::null);
let mut child = Command::new(self.prg)
let mut command: Command = Command::new(self.prg);
let mut command_mut: &mut Command = command
.args(self.args)
.stdin(stdin)
.stdout(stdout)
.stderr(Stdio::null())
.spawn()?;
.stderr(Stdio::null());
// Fix for https://github.com/helix-editor/helix/issues/5424
if cfg!(unix) {
use std::os::unix::process::CommandExt;
unsafe {
command_mut = command_mut.pre_exec(|| match libc::setsid() {
-1 => Err(std::io::Error::last_os_error()),
_ => Ok(()),
});
}
}
let mut child = command_mut.spawn()?;
if let Some(input) = input {
let mut stdin = child.stdin.take().context("stdin is missing")?;