summaryrefslogtreecommitdiffstats
path: root/src/command
diff options
context:
space:
mode:
authorPatrick Decat <pdecat@gmail.com>2022-12-18 19:26:09 +0100
committerGitHub <noreply@github.com>2022-12-18 18:26:09 +0000
commited394afa82ef919937521e5ce72fc467cec203f9 (patch)
treebc7d078684089e71d0d96f22328c5c266ad22d28 /src/command
parentdcbe84b9af28740a83189c8e8387ab9460906b71 (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.rs4
-rw-r--r--src/command/client/search.rs27
-rw-r--r--src/command/client/search/interactive.rs6
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,
};