diff options
author | Patrick Decat <pdecat@gmail.com> | 2022-12-18 19:26:09 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-18 18:26:09 +0000 |
commit | ed394afa82ef919937521e5ce72fc467cec203f9 (patch) | |
tree | bc7d078684089e71d0d96f22328c5c266ad22d28 /src/command | |
parent | dcbe84b9af28740a83189c8e8387ab9460906b71 (diff) |
Allow overriding filter and search modes from CLI (#635)
* Allow overriding filter and search modes from CLI arguments
* Use session filter mode for bash up key binding
* We precisely do not want to add quotes here so that all arguments are properly passed
* Add --shell-up-key-binding hidden command argument and filter_mode_shell_up_key_binding configuration option to allow customizing the filter mode used when atuin is invoked from a shell up-key binding
* Correct up binding for zsh
Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
Diffstat (limited to 'src/command')
-rw-r--r-- | src/command/client.rs | 4 | ||||
-rw-r--r-- | src/command/client/search.rs | 27 | ||||
-rw-r--r-- | src/command/client/search/interactive.rs | 6 |
3 files changed, 32 insertions, 5 deletions
diff --git a/src/command/client.rs b/src/command/client.rs index df74ac52..551b2225 100644 --- a/src/command/client.rs +++ b/src/command/client.rs @@ -44,7 +44,7 @@ impl Cmd { .parse_env("ATUIN_LOG") .init(); - let settings = Settings::new().wrap_err("could not load client settings")?; + let mut settings = Settings::new().wrap_err("could not load client settings")?; let db_path = PathBuf::from(settings.db_path.as_str()); let mut db = Sqlite::new(db_path).await?; @@ -53,7 +53,7 @@ impl Cmd { Self::History(history) => history.run(&settings, &mut db).await, Self::Import(import) => import.run(&mut db).await, Self::Stats(stats) => stats.run(&mut db, &settings).await, - Self::Search(search) => search.run(&mut db, &settings).await, + Self::Search(search) => search.run(&mut db, &mut settings).await, #[cfg(feature = "sync")] Self::Sync(sync) => sync.run(settings, &mut db).await, } diff --git a/src/command/client/search.rs b/src/command/client/search.rs index 456846d4..e528576d 100644 --- a/src/command/client/search.rs +++ b/src/command/client/search.rs @@ -3,7 +3,10 @@ use clap::Parser; use eyre::Result; use atuin_client::{ - database::current_context, database::Database, history::History, settings::Settings, + database::current_context, + database::Database, + history::History, + settings::{FilterMode, SearchMode, Settings}, }; use super::history::ListMode; @@ -15,6 +18,7 @@ mod history_list; mod interactive; pub use duration::format_duration; +#[allow(clippy::struct_excessive_bools)] #[derive(Parser)] pub struct Cmd { /// Filter search result by directory @@ -49,6 +53,18 @@ pub struct Cmd { #[arg(long, short)] interactive: bool, + /// Allow overriding filter mode over config + #[arg(long = "filter-mode")] + filter_mode: Option<FilterMode>, + + /// Allow overriding search mode over config + #[arg(long = "search-mode")] + search_mode: Option<SearchMode>, + + /// Marker argument used to inform atuin that it was invoked from a shell up-key binding (hidden from help to avoid confusion) + #[arg(long = "shell-up-key-binding", hide = true)] + shell_up_key_binding: bool, + /// Use human-readable formatting for time #[arg(long)] human: bool, @@ -61,7 +77,14 @@ pub struct Cmd { } impl Cmd { - pub async fn run(self, db: &mut impl Database, settings: &Settings) -> Result<()> { + pub async fn run(self, db: &mut impl Database, settings: &mut Settings) -> Result<()> { + if self.search_mode.is_some() { + settings.search_mode = self.search_mode.unwrap(); + } + if self.filter_mode.is_some() { + settings.filter_mode = self.filter_mode.unwrap(); + } + settings.shell_up_key_binding = self.shell_up_key_binding; if self.interactive { let item = interactive::history(&self.query, settings, db).await?; eprintln!("{item}"); diff --git a/src/command/client/search/interactive.rs b/src/command/client/search/interactive.rs index 2bc07da3..fc22d28f 100644 --- a/src/command/client/search/interactive.rs +++ b/src/command/client/search/interactive.rs @@ -329,7 +329,11 @@ pub async fn history( input, results_state: ListState::default(), context: current_context(), - filter_mode: settings.filter_mode, + filter_mode: if settings.shell_up_key_binding { + settings.filter_mode_shell_up_key_binding + } else { + settings.filter_mode + }, update_needed, }; |