summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDongxu Wang <dongxu@apache.org>2024-01-29 18:58:20 +0800
committerGitHub <noreply@github.com>2024-01-29 10:58:20 +0000
commite1c2b9c783587547cbf740ee76206507fbbde330 (patch)
tree78cf0f2cd9df29b432d077f3173fbe64bd599bb8
parent2ef516935747eaacacbe9e075fbc5a23ea9c2a15 (diff)
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 <ellie@elliehuxtable.com>
-rw-r--r--atuin-client/config.toml3
-rw-r--r--atuin-client/src/settings.rs2
-rw-r--r--atuin/src/command/client/history.rs16
-rw-r--r--atuin/src/command/client/search.rs10
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,
);