From e1c2b9c783587547cbf740ee76206507fbbde330 Mon Sep 17 00:00:00 2001 From: Dongxu Wang Date: Mon, 29 Jan 2024 18:58:20 +0800 Subject: [PATCH] feat: make history list format configurable (#1638) * feat: make history list format configurable * Update atuin-client/config.toml * review: run format --------- Co-authored-by: Ellie Huxtable --- atuin-client/config.toml | 3 +++ atuin-client/src/settings.rs | 2 ++ atuin/src/command/client/history.rs | 16 ++++++++++++++-- atuin/src/command/client/search.rs | 10 ++++++---- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/atuin-client/config.toml b/atuin-client/config.toml index d18d9783..9a094f88 100644 --- a/atuin-client/config.toml +++ b/atuin-client/config.toml @@ -84,6 +84,9 @@ ## alt-0 .. alt-9 # ctrl_n_shortcuts = false +## default history list format - can also be specified with the --format arg +# history_format = "{time}\t{command}\t{duration}" + ## prevent commands matching any of these regexes from being written to history. ## Note that these regular expressions are unanchored, i.e. if they don't start ## with ^ or end with $, they'll match anywhere in the command. diff --git a/atuin-client/src/settings.rs b/atuin-client/src/settings.rs index 122b8d57..de6b10a4 100644 --- a/atuin-client/src/settings.rs +++ b/atuin-client/src/settings.rs @@ -277,6 +277,7 @@ pub struct Settings { pub word_jump_mode: WordJumpMode, pub word_chars: String, pub scroll_context_lines: usize, + pub history_format: String, #[serde(with = "serde_regex", default = "RegexSet::empty")] pub history_filter: RegexSet, @@ -480,6 +481,7 @@ impl Settings { let session_path = data_dir.join("session"); Ok(Config::builder() + .set_default("history_format", "{time}\t{command}\t{duration}")? .set_default("db_path", db_path.to_str())? .set_default("record_store_path", record_store_path.to_str())? .set_default("key_path", key_path.to_str())? diff --git a/atuin/src/command/client/history.rs b/atuin/src/command/client/history.rs index b91fc57a..e983cc7b 100644 --- a/atuin/src/command/client/history.rs +++ b/atuin/src/command/client/history.rs @@ -366,7 +366,16 @@ impl Cmd { .list(&filters, &context, None, false, include_deleted) .await?; - print_list(&history, mode, format.as_deref(), print0, reverse); + print_list( + &history, + mode, + match format { + None => Some(settings.history_format.as_str()), + _ => format.as_deref(), + }, + print0, + reverse, + ); Ok(()) } @@ -449,7 +458,10 @@ impl Cmd { print_list( last, ListMode::from_flags(human, cmd_only), - format.as_deref(), + match format { + None => Some(settings.history_format.as_str()), + _ => format.as_deref(), + }, false, true, ); diff --git a/atuin/src/command/client/search.rs b/atuin/src/command/client/search.rs index 6a70ed62..f724ef7f 100644 --- a/atuin/src/command/client/search.rs +++ b/atuin/src/command/client/search.rs @@ -176,8 +176,6 @@ impl Cmd { eprintln!("{item}"); } } else { - let list_mode = ListMode::from_flags(self.human, self.cmd_only); - let opt_filter = OptFilters { exit: self.exit, exclude_exit: self.exclude_exit, @@ -218,10 +216,14 @@ impl Cmd { run_non_interactive(settings, opt_filter.clone(), &self.query, &db).await?; } } else { + let format = match self.format { + None => Some(settings.history_format.as_str()), + _ => self.format.as_deref(), + }; super::history::print_list( &entries, - list_mode, - self.format.as_deref(), + ListMode::from_flags(self.human, self.cmd_only), + format, false, true, );