Skip to content

Commit c42c1be

Browse files
committed
fix: fixed forced workspace mode enablement
1 parent 2ee8801 commit c42c1be

File tree

2 files changed

+61
-20
lines changed

2 files changed

+61
-20
lines changed

Diff for: crates/atuin-client/src/settings.rs

+56-14
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,28 @@ pub struct Daemon {
373373
#[derive(Clone, Debug, Deserialize, Serialize)]
374374
pub struct Search {
375375
/// The list of enabled filter modes, in order of priority.
376-
pub filters: Vec<FilterMode>,
376+
pub filters: EnabledFilterModes,
377+
}
378+
379+
#[derive(Clone, Debug, Deserialize, Serialize)]
380+
pub struct EnabledFilterModes(Vec<FilterMode>);
381+
382+
impl EnabledFilterModes {
383+
pub fn specified(&self) -> &[FilterMode] {
384+
&self.0
385+
}
386+
387+
pub fn resolved(&self, legacy_workspaces: bool) -> &[FilterMode] {
388+
if self.0.len() == 0 {
389+
if legacy_workspaces {
390+
DEFAULT_LEGACY_WORKSPACE_FILTER_MODES
391+
} else {
392+
DEFAULT_FILTER_MODES
393+
}
394+
} else {
395+
&self.0
396+
}
397+
}
377398
}
378399

379400
impl Default for Preview {
@@ -409,17 +430,33 @@ impl Default for Daemon {
409430
impl Default for Search {
410431
fn default() -> Self {
411432
Self {
412-
filters: vec![
413-
FilterMode::Global,
414-
FilterMode::Host,
415-
FilterMode::Session,
416-
FilterMode::Workspace,
417-
FilterMode::Directory,
418-
],
433+
filters: EnabledFilterModes(vec![]),
419434
}
420435
}
421436
}
422437

438+
const DEFAULT_FILTER_MODES: &[FilterMode] = &[
439+
FilterMode::Global,
440+
FilterMode::Host,
441+
FilterMode::Session,
442+
FilterMode::Workspace,
443+
FilterMode::Directory,
444+
];
445+
446+
const DEFAULT_LEGACY_WORKSPACE_FILTER_MODES: &[FilterMode] = &[
447+
FilterMode::Workspace,
448+
FilterMode::Global,
449+
FilterMode::Host,
450+
FilterMode::Session,
451+
FilterMode::Directory,
452+
];
453+
454+
impl Default for EnabledFilterModes {
455+
fn default() -> Self {
456+
Self(DEFAULT_FILTER_MODES.into())
457+
}
458+
}
459+
423460
// The preview height strategy also takes max_preview_height into account.
424461
#[derive(Clone, Debug, Deserialize, Copy, PartialEq, Eq, ValueEnum, Serialize)]
425462
pub enum PreviewStrategy {
@@ -712,12 +749,21 @@ impl Settings {
712749
}
713750

714751
pub fn default_filter_mode(&self) -> FilterMode {
752+
if self.search.filters.specified().is_empty() && self.workspaces {
753+
return FilterMode::Workspace;
754+
}
755+
756+
let filters = self.filter_modes();
715757
self.filter_mode
716-
.filter(|x| self.search.filters.contains(x))
717-
.or(self.search.filters.first().copied())
758+
.filter(|x| filters.contains(x))
759+
.or(filters.first().copied())
718760
.unwrap_or(FilterMode::Global)
719761
}
720762

763+
pub fn filter_modes(&self) -> &[FilterMode] {
764+
self.search.filters.resolved(self.workspaces)
765+
}
766+
721767
#[cfg(not(feature = "check-update"))]
722768
pub async fn needs_update(&self) -> Option<Version> {
723769
None
@@ -788,10 +834,6 @@ impl Settings {
788834
.set_default("daemon.socket_path", socket_path.to_str())?
789835
.set_default("daemon.systemd_socket", false)?
790836
.set_default("daemon.tcp_port", 8889)?
791-
.set_default(
792-
"search.filters",
793-
vec!["global", "host", "session", "workspace", "directory"],
794-
)?
795837
.set_default("theme.name", "default")?
796838
.set_default("theme.debug", None::<bool>)?
797839
.set_default(

Diff for: crates/atuin/src/command/client/search/engines.rs

+5-6
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,14 @@ pub struct SearchState {
2626

2727
impl SearchState {
2828
pub(crate) fn rotate_filter_mode(&mut self, settings: &Settings, offset: isize) {
29-
let mut i = settings
30-
.search
31-
.filters
29+
let filters = settings.filter_modes();
30+
let mut i = filters
3231
.iter()
3332
.position(|&m| m == self.filter_mode)
3433
.unwrap_or_default();
35-
for _ in 0..settings.search.filters.len() {
36-
i = (i.wrapping_add_signed(offset)) % settings.search.filters.len();
37-
let mode = settings.search.filters[i];
34+
for _ in 0..filters.len() {
35+
i = (i.wrapping_add_signed(offset)) % filters.len();
36+
let mode = filters[i];
3837
if self.filter_mode_available(mode, settings) {
3938
self.filter_mode = mode;
4039
break;

0 commit comments

Comments
 (0)