diff options
author | Rohan Poojary <rohanrp23@gmail.com> | 2020-09-06 21:08:49 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-06 15:38:49 +0000 |
commit | 1bf40a8cc77d9082dfb76e028e0f66af88d79958 (patch) | |
tree | ce749ba8df89e8645b6184ee16827c3a0bd4b797 /alacritty | |
parent | 5ee7ae8a274fcc58754aa5a91a14b1dedbb87583 (diff) | |
download | r-alacritty-1bf40a8cc77d9082dfb76e028e0f66af88d79958.tar.gz r-alacritty-1bf40a8cc77d9082dfb76e028e0f66af88d79958.tar.bz2 r-alacritty-1bf40a8cc77d9082dfb76e028e0f66af88d79958.zip |
Pass existing CLI parameters to SpawnNewInstance
Co-authored-by: Christian Duerr <contact@christianduerr.com>
Diffstat (limited to 'alacritty')
-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); } |