diff options
author | Aram Drevekenin <aram@poor.dev> | 2023-02-28 15:47:08 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-28 15:47:08 +0100 |
commit | 9dc3cb19616ece5e363a357fc06e0e75ac8b49e0 (patch) | |
tree | 9e4a287ecc35758cf5568bdc42e55292cb830fea /zellij-server/src | |
parent | b3b0ddbab82ab74c02dbc991b24f4a3c88f2bcbe (diff) |
fix(new-tab): get config parameters from config file (#2203)
* fix(cli): take default shell from config if it exists when opening new tab
* fix(cli): take layout dir from config when opening new tab if it exists
* style(fmt): rustfmt
Diffstat (limited to 'zellij-server/src')
-rw-r--r-- | zellij-server/src/pty.rs | 61 | ||||
-rw-r--r-- | zellij-server/src/unit/screen_tests.rs | 2 |
2 files changed, 46 insertions, 17 deletions
diff --git a/zellij-server/src/pty.rs b/zellij-server/src/pty.rs index d40a166c9..83255e61c 100644 --- a/zellij-server/src/pty.rs +++ b/zellij-server/src/pty.rs @@ -455,18 +455,46 @@ impl Pty { default_editor, } } - pub fn get_default_terminal(&self, cwd: Option<PathBuf>) -> TerminalAction { - let shell = PathBuf::from(env::var("SHELL").unwrap_or_else(|_| { - log::warn!("Cannot read SHELL env, falling back to use /bin/sh"); - "/bin/sh".to_string() - })); - TerminalAction::RunCommand(RunCommand { - args: vec![], - command: shell, - cwd, // note: this might also be filled by the calling function, eg. spawn_terminal - hold_on_close: false, - hold_on_start: false, - }) + pub fn get_default_terminal( + &self, + cwd: Option<PathBuf>, + default_shell: Option<TerminalAction>, + ) -> TerminalAction { + match default_shell { + Some(mut default_shell) => { + if let Some(cwd) = cwd { + match default_shell { + TerminalAction::RunCommand(ref mut command) => { + command.cwd = Some(cwd); + }, + TerminalAction::OpenFile(ref file, line_number, ref mut edit_cwd) => { + match edit_cwd.as_mut() { + Some(edit_cwd) => { + *edit_cwd = cwd.join(&edit_cwd); + }, + None => { + let _ = edit_cwd.insert(cwd.clone()); + }, + }; + }, + } + } + default_shell + }, + None => { + let shell = PathBuf::from(env::var("SHELL").unwrap_or_else(|_| { + log::warn!("Cannot read SHELL env, falling back to use /bin/sh"); + "/bin/sh".to_string() + })); + TerminalAction::RunCommand(RunCommand { + args: vec![], + command: shell, + cwd, // note: this might also be filled by the calling function, eg. spawn_terminal + hold_on_close: false, + hold_on_start: false, + }) + }, + } } fn fill_cwd(&self, terminal_action: &mut TerminalAction, client_id: ClientId) { if let TerminalAction::RunCommand(run_command) = terminal_action { @@ -499,12 +527,12 @@ impl Pty { let terminal_action = match client_or_tab_index { ClientOrTabIndex::ClientId(client_id) => { let mut terminal_action = - terminal_action.unwrap_or_else(|| self.get_default_terminal(None)); + terminal_action.unwrap_or_else(|| self.get_default_terminal(None, None)); self.fill_cwd(&mut terminal_action, client_id); terminal_action }, ClientOrTabIndex::TabIndex(_) => { - terminal_action.unwrap_or_else(|| self.get_default_terminal(None)) + terminal_action.unwrap_or_else(|| self.get_default_terminal(None, None)) }, }; let (hold_on_start, hold_on_close) = match &terminal_action { @@ -589,7 +617,8 @@ impl Pty { ) -> Result<()> { let err_context = || format!("failed to spawn terminals for layout for client {client_id}"); - let mut default_shell = default_shell.unwrap_or_else(|| self.get_default_terminal(None)); + let mut default_shell = + default_shell.unwrap_or_else(|| self.get_default_terminal(None, None)); self.fill_cwd(&mut default_shell, client_id); let extracted_run_instructions = layout.extract_run_instructions(); let extracted_floating_run_instructions = @@ -800,7 +829,7 @@ impl Pty { }, Some(Run::Cwd(cwd)) => { let starts_held = false; // we do not hold Cwd panes - let shell = self.get_default_terminal(Some(cwd)); + let shell = self.get_default_terminal(Some(cwd), Some(default_shell.clone())); match self .bus .os_input diff --git a/zellij-server/src/unit/screen_tests.rs b/zellij-server/src/unit/screen_tests.rs index bf01fded5..5c21273b0 100644 --- a/zellij-server/src/unit/screen_tests.rs +++ b/zellij-server/src/unit/screen_tests.rs @@ -103,7 +103,7 @@ fn send_cli_action_to_server( let os_input = Box::new(mock_screen.os_input.clone()); let to_server = mock_screen.to_server.clone(); let get_current_dir = || PathBuf::from("."); - let actions = Action::actions_from_cli(cli_action, Box::new(get_current_dir)).unwrap(); + let actions = Action::actions_from_cli(cli_action, Box::new(get_current_dir), None).unwrap(); for action in actions { route_action( action, |