From 90253eea65eebb75c03fb8665f82588108007141 Mon Sep 17 00:00:00 2001 From: unsecretised Date: Thu, 26 Mar 2026 00:46:55 +0800 Subject: [PATCH] make suggestions optional and configurable via settings page --- src/app.rs | 1 + src/app/pages/settings.rs | 14 ++++++++++++++ src/app/tile/update.rs | 5 +++-- src/config.rs | 2 ++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/app.rs b/src/app.rs index c074dc0..16c7cab 100644 --- a/src/app.rs +++ b/src/app.rs @@ -125,6 +125,7 @@ pub enum SetConfigFields { SearchUrl(String), HapticFeedback(bool), ShowMenubarIcon(bool), + AutoSuggest(bool), Modes(Editable<(String, String)>), Aliases(Editable<(String, String)>), SearchDirs(Editable>), diff --git a/src/app/pages/settings.rs b/src/app/pages/settings.rs index a70211c..58b2241 100644 --- a/src/app/pages/settings.rs +++ b/src/app/pages/settings.rs @@ -126,6 +126,19 @@ pub fn settings_page(config: Config) -> Element<'static, Message> { ), ]); + let theme_clone = theme.clone(); + let auto_suggest = settings_item_row([ + settings_hint_text(theme.clone(), "Suggestions on open"), + checkbox(config.auto_suggest) + .style(move |_, _| settings_checkbox_style(&theme_clone)) + .on_toggle(|input| Message::SetConfig(SetConfigFields::AutoSuggest(input))) + .into(), + notice_item( + theme.clone(), + "If an empty query should give you your most used actions", + ), + ]); + let theme_clone = theme.clone(); let show_scrollbar = settings_item_row([ settings_hint_text(theme.clone(), "Show scrollbar"), @@ -350,6 +363,7 @@ pub fn settings_page(config: Config) -> Element<'static, Message> { debounce.into(), haptic.into(), tray_icon.into(), + auto_suggest.into(), show_scrollbar.into(), clear_on_hide.into(), clear_on_enter.into(), diff --git a/src/app/tile/update.rs b/src/app/tile/update.rs index c3dcfb4..c1ccdff 100644 --- a/src/app/tile/update.rs +++ b/src/app/tile/update.rs @@ -50,7 +50,7 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task { tile.focused = true; tile.visible = true; - if tile.page == Page::Main && tile.query_lc.is_empty() { + if tile.page == Page::Main && tile.query_lc.is_empty() && tile.config.auto_suggest { window::latest() .map(|x| x.unwrap()) .map(|id| Message::SearchQueryChanged(String::new(), id)) @@ -616,6 +616,7 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task { } SetConfigFields::SearchUrl(url) => final_config.search_url = url, SetConfigFields::PlaceHolder(placeholder) => final_config.placeholder = placeholder, + SetConfigFields::AutoSuggest(status) => final_config.auto_suggest = status, SetConfigFields::DebounceDelay(delay) => final_config.debounce_delay = delay, SetConfigFields::HapticFeedback(haptic_feedback) => { final_config.haptic_feedback = haptic_feedback @@ -799,7 +800,7 @@ fn execute_query(tile: &mut Tile, id: Id) -> Task { _ => {} } - if tile.page == Page::Main && tile.query_lc.is_empty() { + if tile.page == Page::Main && tile.query_lc.is_empty() && tile.config.auto_suggest { tile.results = tile.frequent_results(); return resize_for_results_count(id, tile.results.len()); } diff --git a/src/config.rs b/src/config.rs index 28d13a8..7126f0c 100644 --- a/src/config.rs +++ b/src/config.rs @@ -29,6 +29,7 @@ pub struct Config { pub modes: HashMap, pub aliases: HashMap, pub search_dirs: Vec, + pub auto_suggest: bool, pub log_path: String, pub debounce_delay: u64, } @@ -45,6 +46,7 @@ impl Default for Config { search_url: "https://duckduckgo.com/search?q=%s".to_string(), haptic_feedback: false, show_trayicon: true, + auto_suggest: true, search_dirs: vec!["~".to_string()], log_path: "/tmp/rustcast.log".to_string(), modes: HashMap::new(),