diff options
Diffstat (limited to 'alacritty/src/event.rs')
-rw-r--r-- | alacritty/src/event.rs | 47 |
1 files changed, 8 insertions, 39 deletions
diff --git a/alacritty/src/event.rs b/alacritty/src/event.rs index 4af372c9..7fb54b39 100644 --- a/alacritty/src/event.rs +++ b/alacritty/src/event.rs @@ -30,20 +30,18 @@ use alacritty_terminal::index::{Boundary, Column, Direction, Line, Point, Side}; use alacritty_terminal::selection::{Selection, SelectionType}; use alacritty_terminal::term::search::{Match, RegexSearch}; use alacritty_terminal::term::{ClipboardType, SizeInfo, Term, TermMode}; -#[cfg(not(windows))] -use alacritty_terminal::tty; use crate::cli::{Options as CliOptions, TerminalOptions as TerminalCliOptions}; use crate::clipboard::Clipboard; use crate::config::ui_config::{HintAction, HintInternalAction}; use crate::config::{self, UiConfig}; +#[cfg(not(windows))] +use crate::daemon::foreground_process_path; use crate::daemon::start_daemon; use crate::display::hint::HintMatch; use crate::display::window::Window; use crate::display::{self, Display}; use crate::input::{self, ActionContext as _, FONT_SIZE_STEP}; -#[cfg(target_os = "macos")] -use crate::macos; use crate::message_bar::{Message, MessageBuffer}; use crate::scheduler::{Scheduler, TimerId, Topic}; use crate::window_context::WindowContext; @@ -354,27 +352,19 @@ impl<'a, N: Notify + 'a, T: EventListener> input::ActionContext<T> for ActionCon let mut env_args = env::args(); let alacritty = env_args.next().unwrap(); - // Use working directory of controlling process, or fallback to initial shell, then add it - // as working-directory parameter. - #[cfg(unix)] - let mut args = foreground_process_path() - .map(|path| vec!["--working-directory".into(), path]) - .unwrap_or_default(); - - #[cfg(not(unix))] - let mut args: Vec<PathBuf> = Vec::new(); - - let working_directory_set = !args.is_empty(); + let mut args: Vec<String> = Vec::new(); // Reuse the arguments passed to Alacritty for the new instance. + #[allow(clippy::while_let_on_iterator)] while let Some(arg) = env_args.next() { - // Drop working directory from existing parameters. - if working_directory_set && arg == "--working-directory" { + // On unix, the working directory of the foreground shell is used by `start_daemon`. + #[cfg(not(windows))] + if arg == "--working-directory" { let _ = env_args.next(); continue; } - args.push(arg.into()); + args.push(arg); } start_daemon(&alacritty, &args); @@ -1389,24 +1379,3 @@ impl EventListener for EventProxy { let _ = self.proxy.send_event(Event::new(event.into(), self.window_id)); } } - -#[cfg(not(windows))] -pub fn foreground_process_path() -> Result<PathBuf, Box<dyn Error>> { - let mut pid = unsafe { libc::tcgetpgrp(tty::master_fd()) }; - if pid < 0 { - pid = tty::child_pid(); - } - - #[cfg(not(any(target_os = "macos", target_os = "freebsd")))] - let link_path = format!("/proc/{}/cwd", pid); - #[cfg(target_os = "freebsd")] - let link_path = format!("/compat/linux/proc/{}/cwd", pid); - - #[cfg(not(target_os = "macos"))] - let cwd = std::fs::read_link(link_path)?; - - #[cfg(target_os = "macos")] - let cwd = macos::proc::cwd(pid)?; - - Ok(cwd) -} |