From 189f2271bcc6f841264cb960e35e78c870663645 Mon Sep 17 00:00:00 2001 From: sigoden Date: Mon, 17 Jun 2024 10:59:59 +0800 Subject: feat: add `.edit session` repl command (#606) --- src/config/mod.rs | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) (limited to 'src/config/mod.rs') 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(); -- cgit v1.2.3