summaryrefslogtreecommitdiffstats
path: root/zellij-server/src
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2023-02-28 15:47:08 +0100
committerGitHub <noreply@github.com>2023-02-28 15:47:08 +0100
commit9dc3cb19616ece5e363a357fc06e0e75ac8b49e0 (patch)
tree9e4a287ecc35758cf5568bdc42e55292cb830fea /zellij-server/src
parentb3b0ddbab82ab74c02dbc991b24f4a3c88f2bcbe (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.rs61
-rw-r--r--zellij-server/src/unit/screen_tests.rs2
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,