aboutsummaryrefslogtreecommitdiff
path: root/src/config
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-30 01:53:55 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-30 01:55:36 +0300
commit8df1639048529b383358000879b5ee078a90b9f9 (patch)
tree7b0088246c3cc0834ed04cf20bf9726645bdb040 /src/config
parent817a1562db9156e34f13487344ea147618f9070b (diff)
fix: use login shells for macos panes
refs #350
Diffstat (limited to 'src/config')
-rw-r--r--src/config/model.rs14
1 files changed, 14 insertions, 0 deletions
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]