aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src/event.rs
diff options
context:
space:
mode:
authorChristian Duerr <contact@christianduerr.com>2020-08-06 00:42:49 +0000
committerGitHub <noreply@github.com>2020-08-06 00:42:49 +0000
commit291de2500f0cbd189a9b017809091b6eb8f8f0ec (patch)
treea1a5005e33bbc47bf8801066f7214868fb53e971 /alacritty/src/event.rs
parent99c34c7ce92fe02c733b5fd19dd054783038f037 (diff)
downloadr-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/src/event.rs')
-rw-r--r--alacritty/src/event.rs20
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();