diff options
| author | sigoden <sigoden@gmail.com> | 2024-06-17 10:59:59 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-17 10:59:59 +0800 |
| commit | 189f2271bcc6f841264cb960e35e78c870663645 (patch) | |
| tree | 88dfcce749695668582c05bdc024b1a39ffc06e5 /src/config/mod.rs | |
| parent | 72e689fab0b414ea943c300c3eb92901c77ce775 (diff) | |
| download | aichat-189f2271bcc6f841264cb960e35e78c870663645.tar.gz | |
feat: add `.edit session` repl command (#606)
Diffstat (limited to 'src/config/mod.rs')
| -rw-r--r-- | src/config/mod.rs | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs index efbf984..6cbbc05 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -713,17 +713,42 @@ impl Config { Ok(()) } - pub fn save_session(&mut self, name: &str) -> Result<()> { - let sessions_dir = self.sessions_dir()?; + pub fn save_session(&mut self, name: Option<&str>) -> Result<()> { + let name = match &self.session { + Some(session) => match name { + Some(v) => v.to_string(), + None => session.name().to_string(), + }, + None => bail!("No session"), + }; + let session_path = self.session_file(&name)?; if let Some(session) = self.session.as_mut() { - if !name.is_empty() { - session.set_name(name); - } - session.save(&sessions_dir)?; + session.save(&session_path)?; } Ok(()) } + pub fn edit_session(&mut self) -> Result<()> { + let name = match &self.session { + Some(session) => session.name().to_string(), + None => bail!("No session"), + }; + let editor = match self.buffer_editor() { + Some(editor) => editor, + None => bail!("No editor, please set $EDITOR/$VISUAL."), + }; + let session_path = self.session_file(&name)?; + self.save_session(Some(&name))?; + edit_file(&editor, &session_path).with_context(|| { + format!( + "Failed to edit '{}' with '{editor}'", + session_path.display() + ) + })?; + self.session = Some(Session::load(self, &name, &session_path)?); + Ok(()) + } + pub fn clear_session_messages(&mut self) -> Result<()> { if let Some(session) = self.session.as_mut() { session.clear_messages(); |
