aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src
diff options
context:
space:
mode:
Diffstat (limited to 'alacritty/src')
-rw-r--r--alacritty/src/event.rs22
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);
}