From 4151ab7aab939a12721a0f4207c87b5c09ace339 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 8 Mar 2022 20:17:31 -0500 Subject: save the history on shell exit --- src/shell/history/entry.rs | 4 ++++ src/shell/history/mod.rs | 21 +++++++++++++++++++++ src/shell/mod.rs | 2 ++ 3 files changed, 27 insertions(+) (limited to 'src') diff --git a/src/shell/history/entry.rs b/src/shell/history/entry.rs index 145e0cf..0491bf7 100644 --- a/src/shell/history/entry.rs +++ b/src/shell/history/entry.rs @@ -227,6 +227,10 @@ impl Entry { &self.cmdline } + pub fn start_time(&self) -> time::OffsetDateTime { + self.start_time + } + pub fn toggle_fullscreen(&mut self) { if let Some(fullscreen) = self.fullscreen { self.fullscreen = Some(!fullscreen); diff --git a/src/shell/history/mod.rs b/src/shell/history/mod.rs index ad6ca44..91149c1 100644 --- a/src/shell/history/mod.rs +++ b/src/shell/history/mod.rs @@ -123,6 +123,27 @@ impl History { } } + pub async fn save(&self) { + // TODO: we'll probably want some amount of flock or something here + let mut fh = tokio::fs::OpenOptions::new() + .append(true) + .open(crate::dirs::history_file()) + .await + .unwrap(); + for entry in &self.entries { + fh.write_all( + format!( + ": {}:0;{}\n", + entry.start_time().unix_timestamp(), + entry.cmd() + ) + .as_bytes(), + ) + .await + .unwrap(); + } + } + fn visible( &self, repl_lines: usize, diff --git a/src/shell/mod.rs b/src/shell/mod.rs index 4a5c5d2..fa7147b 100644 --- a/src/shell/mod.rs +++ b/src/shell/mod.rs @@ -50,6 +50,8 @@ pub async fn main() -> Result { } } + shell.history.save().await; + Ok(0) } -- cgit v1.2.3-54-g00ecf