summaryrefslogtreecommitdiffstats
path: root/src/config
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2023-11-07 19:14:58 +0800
committerGitHub <noreply@github.com>2023-11-07 19:14:58 +0800
commit6bb2ec05be1a502c70e95799af167ab4f6662cd5 (patch)
tree9d2ee1e9aabbcfbaefcc0d79c956fc39c102e866 /src/config
parent534733b77cb1baef1459faa16a45d75c5f6275e3 (diff)
downloadaichat-6bb2ec05be1a502c70e95799af167ab4f6662cd5.tar.gz
feat: add `config.prelude` to allow setting default role/session (#224)
Diffstat (limited to 'src/config')
-rw-r--r--src/config/mod.rs29
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()