From 6bb2ec05be1a502c70e95799af167ab4f6662cd5 Mon Sep 17 00:00:00 2001 From: sigoden Date: Tue, 7 Nov 2023 19:14:58 +0800 Subject: feat: add `config.prelude` to allow setting default role/session (#224) --- src/config/mod.rs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'src/config') diff --git a/src/config/mod.rs b/src/config/mod.rs index e6fef5f..22c58bb 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -60,9 +60,11 @@ pub struct Config { pub wrap_code: bool, /// Automatically copy the last output to the clipboard pub auto_copy: bool, - /// REPL keybindings. values: emacs, vi + /// REPL keybindings. (emacs, vi) pub keybindings: Keybindings, - /// Setup AIs + /// Set a default role or session (role:, session:) + pub prelude: String, + /// Setup clients pub clients: Vec, /// Predefined roles #[serde(skip)] @@ -94,6 +96,7 @@ impl Default for Config { wrap_code: false, auto_copy: false, keybindings: Default::default(), + prelude: String::new(), clients: vec![ClientConfig::default()], roles: vec![], role: None, @@ -145,6 +148,28 @@ impl Config { Ok(config) } + pub fn onstart(&mut self) -> Result<()> { + let prelude = self.prelude.clone(); + let err_msg = || format!("Invalid prelude '{}", prelude); + match prelude.split_once(':') { + Some(("role", name)) => { + if self.role.is_none() && self.session.is_none() { + self.set_role(name).with_context(err_msg)?; + } + } + Some(("session", name)) => { + if self.session.is_none() { + self.start_session(Some(name)).with_context(err_msg)?; + } + } + Some(_) => { + bail!("{}", err_msg()) + } + None => {} + } + Ok(()) + } + pub fn retrieve_role(&self, name: &str) -> Result { self.roles .iter() -- cgit v1.2.3