diff options
Diffstat (limited to 'crates/atuin-client/src')
| -rw-r--r-- | crates/atuin-client/src/settings.rs | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/crates/atuin-client/src/settings.rs b/crates/atuin-client/src/settings.rs index efbdb33d..10c804fa 100644 --- a/crates/atuin-client/src/settings.rs +++ b/crates/atuin-client/src/settings.rs @@ -370,6 +370,12 @@ pub struct Daemon { pub tcp_port: u64, } +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct Search { + /// The list of enabled filter modes, in order of priority. + pub filters: Vec<FilterMode>, +} + impl Default for Preview { fn default() -> Self { Self { @@ -400,6 +406,20 @@ impl Default for Daemon { } } +impl Default for Search { + fn default() -> Self { + Self { + filters: vec![ + FilterMode::Global, + FilterMode::Host, + FilterMode::Session, + FilterMode::Workspace, + FilterMode::Directory, + ], + } + } +} + // The preview height strategy also takes max_preview_height into account. #[derive(Clone, Debug, Deserialize, Copy, PartialEq, Eq, ValueEnum, Serialize)] pub enum PreviewStrategy { @@ -430,7 +450,7 @@ pub struct Settings { pub key_path: String, pub session_path: String, pub search_mode: SearchMode, - pub filter_mode: FilterMode, + pub filter_mode: Option<FilterMode>, pub filter_mode_shell_up_key_binding: Option<FilterMode>, pub search_mode_shell_up_key_binding: Option<SearchMode>, pub shell_up_key_binding: bool, @@ -487,6 +507,9 @@ pub struct Settings { pub daemon: Daemon, #[serde(default)] + pub search: Search, + + #[serde(default)] pub theme: Theme, } @@ -688,6 +711,13 @@ impl Settings { None } + pub fn default_filter_mode(&self) -> FilterMode { + self.filter_mode + .filter(|x| self.search.filters.contains(x)) + .or(self.search.filters.first().copied()) + .unwrap_or(FilterMode::Global) + } + #[cfg(not(feature = "check-update"))] pub async fn needs_update(&self) -> Option<Version> { None @@ -715,7 +745,7 @@ impl Settings { .set_default("sync_address", "https://api.atuin.sh")? .set_default("sync_frequency", "10m")? .set_default("search_mode", "fuzzy")? - .set_default("filter_mode", "global")? + .set_default("filter_mode", None::<String>)? .set_default("style", "compact")? .set_default("inline_height", 40)? .set_default("show_preview", true)? @@ -758,6 +788,10 @@ impl Settings { .set_default("daemon.socket_path", socket_path.to_str())? .set_default("daemon.systemd_socket", false)? .set_default("daemon.tcp_port", 8889)? + .set_default( + "search.filters", + vec!["global", "host", "session", "workspace", "directory"], + )? .set_default("theme.name", "default")? .set_default("theme.debug", None::<bool>)? .set_default( |
