aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crates/atuin-client/src/settings.rs68
-rw-r--r--crates/atuin/src/command/client/history.rs5
-rw-r--r--crates/atuin/src/command/client/scripts.rs2
-rw-r--r--crates/atuin/src/command/client/search.rs2
-rw-r--r--crates/atuin/src/command/client/search/interactive.rs8
5 files changed, 74 insertions, 11 deletions
diff --git a/crates/atuin-client/src/settings.rs b/crates/atuin-client/src/settings.rs
index 489c1a83..87ed9383 100644
--- a/crates/atuin-client/src/settings.rs
+++ b/crates/atuin-client/src/settings.rs
@@ -735,10 +735,20 @@ impl Settings {
None
}
- pub fn default_filter_mode(&self) -> FilterMode {
+ pub fn default_filter_mode(&self, git_root: bool) -> FilterMode {
self.filter_mode
.filter(|x| self.search.filters.contains(x))
- .or(self.search.filters.first().copied())
+ .or_else(|| {
+ self.search
+ .filters
+ .iter()
+ .find(|x| match (x, git_root, self.workspaces) {
+ (FilterMode::Workspace, true, true) => true,
+ (FilterMode::Workspace, _, _) => false,
+ (_, _, _) => true,
+ })
+ .copied()
+ })
.unwrap_or(FilterMode::Global)
}
@@ -979,4 +989,58 @@ mod tests {
Ok(())
}
+
+ #[test]
+ fn can_choose_workspace_filters_when_in_git_context() -> Result<()> {
+ let mut settings = super::Settings::default();
+ settings.search.filters = vec![
+ super::FilterMode::Workspace,
+ super::FilterMode::Host,
+ super::FilterMode::Directory,
+ super::FilterMode::Session,
+ super::FilterMode::Global,
+ ];
+ settings.workspaces = true;
+
+ assert_eq!(
+ settings.default_filter_mode(true),
+ super::FilterMode::Workspace,
+ );
+
+ Ok(())
+ }
+
+ #[test]
+ fn wont_choose_workspace_filters_when_not_in_git_context() -> Result<()> {
+ let mut settings = super::Settings::default();
+ settings.search.filters = vec![
+ super::FilterMode::Workspace,
+ super::FilterMode::Host,
+ super::FilterMode::Directory,
+ super::FilterMode::Session,
+ super::FilterMode::Global,
+ ];
+ settings.workspaces = true;
+
+ assert_eq!(settings.default_filter_mode(false), super::FilterMode::Host,);
+
+ Ok(())
+ }
+
+ #[test]
+ fn wont_choose_workspace_filters_when_workspaces_disabled() -> Result<()> {
+ let mut settings = super::Settings::default();
+ settings.search.filters = vec![
+ super::FilterMode::Workspace,
+ super::FilterMode::Host,
+ super::FilterMode::Directory,
+ super::FilterMode::Session,
+ super::FilterMode::Global,
+ ];
+ settings.workspaces = false;
+
+ assert_eq!(settings.default_filter_mode(true), super::FilterMode::Host,);
+
+ Ok(())
+ }
}
diff --git a/crates/atuin/src/command/client/history.rs b/crates/atuin/src/command/client/history.rs
index 028db5f1..177ec82e 100644
--- a/crates/atuin/src/command/client/history.rs
+++ b/crates/atuin/src/command/client/history.rs
@@ -514,7 +514,10 @@ impl Cmd {
(true, true) => [Session, Directory],
(true, false) => [Session, Global],
(false, true) => [Global, Directory],
- (false, false) => [settings.default_filter_mode(), Global],
+ (false, false) => [
+ settings.default_filter_mode(context.git_root.is_some()),
+ Global,
+ ],
};
let history = db
diff --git a/crates/atuin/src/command/client/scripts.rs b/crates/atuin/src/command/client/scripts.rs
index 65ceabde..851755af 100644
--- a/crates/atuin/src/command/client/scripts.rs
+++ b/crates/atuin/src/command/client/scripts.rs
@@ -230,7 +230,7 @@ impl Cmd {
let context = atuin_client::database::current_context();
// Get the last N+1 commands, filtering by the default mode
- let filters = [settings.default_filter_mode()];
+ let filters = [settings.default_filter_mode(context.git_root.is_some())];
let mut history = history_db
.list(&filters, &context, Some(count), false, false)
diff --git a/crates/atuin/src/command/client/search.rs b/crates/atuin/src/command/client/search.rs
index 4103901a..be00ee99 100644
--- a/crates/atuin/src/command/client/search.rs
+++ b/crates/atuin/src/command/client/search.rs
@@ -314,7 +314,7 @@ async fn run_non_interactive(
..filter_options
};
- let filter_mode = settings.default_filter_mode();
+ let filter_mode = settings.default_filter_mode(context.git_root.is_some());
let results = db
.search(
diff --git a/crates/atuin/src/command/client/search/interactive.rs b/crates/atuin/src/command/client/search/interactive.rs
index b01e75db..fc6164d6 100644
--- a/crates/atuin/src/command/client/search/interactive.rs
+++ b/crates/atuin/src/command/client/search/interactive.rs
@@ -18,9 +18,7 @@ use super::{
use atuin_client::{
database::{Database, current_context},
history::{History, HistoryId, HistoryStats, store::HistoryStore},
- settings::{
- CursorStyle, ExitMode, FilterMode, KeymapMode, PreviewStrategy, SearchMode, Settings,
- },
+ settings::{CursorStyle, ExitMode, KeymapMode, PreviewStrategy, SearchMode, Settings},
};
use crate::command::client::search::history_list::HistoryHighlighter;
@@ -1260,9 +1258,7 @@ pub async fn history(
filter_mode: settings
.filter_mode_shell_up_key_binding
.filter(|_| settings.shell_up_key_binding)
- .or_else(|| Some(settings.default_filter_mode()))
- .filter(|&x| x != FilterMode::Workspace || context.git_root.is_some())
- .unwrap_or(FilterMode::Global),
+ .unwrap_or_else(|| settings.default_filter_mode(context.git_root.is_some())),
context,
},
engine: engines::engine(search_mode),