summaryrefslogtreecommitdiffstats
path: root/src/config/mod.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-06-17 10:59:59 +0800
committerGitHub <noreply@github.com>2024-06-17 10:59:59 +0800
commit189f2271bcc6f841264cb960e35e78c870663645 (patch)
tree88dfcce749695668582c05bdc024b1a39ffc06e5 /src/config/mod.rs
parent72e689fab0b414ea943c300c3eb92901c77ce775 (diff)
downloadaichat-189f2271bcc6f841264cb960e35e78c870663645.tar.gz
feat: add `.edit session` repl command (#606)
Diffstat (limited to 'src/config/mod.rs')
-rw-r--r--src/config/mod.rs37
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();