diff options
author | Christian Duerr <contact@christianduerr.com> | 2020-08-06 00:42:49 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-06 00:42:49 +0000 |
commit | 291de2500f0cbd189a9b017809091b6eb8f8f0ec (patch) | |
tree | a1a5005e33bbc47bf8801066f7214868fb53e971 /alacritty | |
parent | 99c34c7ce92fe02c733b5fd19dd054783038f037 (diff) | |
download | r-alacritty-291de2500f0cbd189a9b017809091b6eb8f8f0ec.tar.gz r-alacritty-291de2500f0cbd189a9b017809091b6eb8f8f0ec.tar.bz2 r-alacritty-291de2500f0cbd189a9b017809091b6eb8f8f0ec.zip |
Use `tcgetpgrp` to get PID for SpawnNewInstance
Fixes #4082.
Diffstat (limited to 'alacritty')
-rw-r--r-- | alacritty/src/event.rs | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/alacritty/src/event.rs b/alacritty/src/event.rs index c30765ae..85dca0ee 100644 --- a/alacritty/src/event.rs +++ b/alacritty/src/event.rs @@ -297,16 +297,20 @@ impl<'a, N: Notify + 'a, T: EventListener> input::ActionContext<T> for ActionCon #[cfg(unix)] let args = { + // Use working directory of controlling process, or fallback to initial shell. + let mut pid = unsafe { libc::tcgetpgrp(tty::master_fd()) }; + if pid < 0 { + pid = tty::child_pid(); + } + #[cfg(not(target_os = "freebsd"))] - let proc_prefix = ""; + let link_path = format!("/proc/{}/cwd", pid); #[cfg(target_os = "freebsd")] - let proc_prefix = "/compat/linux"; - let link_path = format!("{}/proc/{}/cwd", proc_prefix, tty::child_pid()); - if let Ok(path) = fs::read_link(link_path) { - vec!["--working-directory".into(), path] - } else { - Vec::new() - } + let link_path = format!("/compat/linux/proc/{}/cwd", pid); + + fs::read_link(link_path) + .map(|path| vec!["--working-directory".into(), path]) + .unwrap_or_default() }; #[cfg(not(unix))] let args: Vec<String> = Vec::new(); |