From 8df1639048529b383358000879b5ee078a90b9f9 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Sat, 30 May 2026 01:53:55 +0300 Subject: fix: use login shells for macos panes refs #350 --- src/config/model.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/config') diff --git a/src/config/model.rs b/src/config/model.rs index 84d03bc2..77af2f75 100644 --- a/src/config/model.rs +++ b/src/config/model.rs @@ -63,11 +63,22 @@ impl<'de> Deserialize<'de> for NewTerminalCwdConfig { } } +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Deserialize, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum ShellModeConfig { + #[default] + Auto, + Login, + NonLogin, +} + #[derive(Debug, Default, Deserialize)] #[serde(default)] pub struct TerminalConfig { /// Executable used for new interactive panes. Empty means SHELL, then /bin/sh. pub default_shell: String, + /// Startup mode for new interactive pane shells. + pub shell_mode: ShellModeConfig, /// CWD policy for new interactive panes, tabs, and workspaces. pub new_cwd: NewTerminalCwdConfig, } @@ -494,13 +505,16 @@ mod tests { fn terminal_default_shell_defaults_empty_and_parses() { let default_config = Config::default(); assert!(default_config.terminal.default_shell.is_empty()); + assert_eq!(default_config.terminal.shell_mode, ShellModeConfig::Auto); let toml = r#" [terminal] default_shell = "nu" +shell_mode = "non_login" "#; let config: Config = toml::from_str(toml).unwrap(); assert_eq!(config.terminal.default_shell, "nu"); + assert_eq!(config.terminal.shell_mode, ShellModeConfig::NonLogin); } #[test] -- cgit v1.2.3