diff options
Diffstat (limited to 'alacritty/src')
-rw-r--r-- | alacritty/src/event.rs | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/alacritty/src/event.rs b/alacritty/src/event.rs index c3e1b6c8..e81dc0f9 100644 --- a/alacritty/src/event.rs +++ b/alacritty/src/event.rs @@ -299,10 +299,11 @@ impl<'a, N: Notify + 'a, T: EventListener> input::ActionContext<T> for ActionCon } fn spawn_new_instance(&mut self) { - let alacritty = env::args().next().unwrap(); + let mut env_args = env::args(); + let alacritty = env_args.next().unwrap(); #[cfg(unix)] - let args = { + let mut args = { // Use working directory of controlling process, or fallback to initial shell. let mut pid = unsafe { libc::tcgetpgrp(tty::master_fd()) }; if pid < 0 { @@ -314,12 +315,27 @@ impl<'a, N: Notify + 'a, T: EventListener> input::ActionContext<T> for ActionCon #[cfg(target_os = "freebsd")] let link_path = format!("/compat/linux/proc/{}/cwd", pid); + // Add the current working directory as parameter. fs::read_link(link_path) .map(|path| vec!["--working-directory".into(), path]) .unwrap_or_default() }; + #[cfg(not(unix))] - let args: Vec<String> = Vec::new(); + let mut args: Vec<PathBuf> = Vec::new(); + + let working_directory_set = !args.is_empty(); + + // Reuse the arguments passed to Alacritty for the new instance. + while let Some(arg) = env_args.next() { + // Drop working directory from existing parameters. + if working_directory_set && arg == "--working-directory" { + let _ = env_args.next(); + continue; + } + + args.push(arg.into()); + } start_daemon(&alacritty, &args); } |