diff options
| author | sigoden <sigoden@gmail.com> | 2023-11-07 19:14:58 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-07 19:14:58 +0800 |
| commit | 6bb2ec05be1a502c70e95799af167ab4f6662cd5 (patch) | |
| tree | 9d2ee1e9aabbcfbaefcc0d79c956fc39c102e866 /src/config/mod.rs | |
| parent | 534733b77cb1baef1459faa16a45d75c5f6275e3 (diff) | |
| download | aichat-6bb2ec05be1a502c70e95799af167ab4f6662cd5.tar.gz | |
feat: add `config.prelude` to allow setting default role/session (#224)
Diffstat (limited to 'src/config/mod.rs')
| -rw-r--r-- | src/config/mod.rs | 29 |
1 files changed, 27 insertions, 2 deletions
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:<name>, session:<name>) + pub prelude: String, + /// Setup clients pub clients: Vec<ClientConfig>, /// 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<Role> { self.roles .iter() |
