bread-launcher: implement query modes and result sections (phase 6c)
New query module: parse_query splits a leading =/>/. into calc/cmd/url (falling through to a literal apps query otherwise), eval_calc is a small four-function arithmetic evaluator matching the demo's evalCalc semantics (bad expr/err/∞ included), and builtin_commands/filter_commands cover the > palette. matching::split_sections groups already-sorted entries into recent/apps using LaunchHistory's existing counts, no new tracking. ResultsList::new takes a new `sections` bool: true builds non-selectable "Recent"/"Apps" header rows (build_header_row) ahead of their groups, visible only in the idle empty-query view; set_query/select_next/ select_prev all learned to treat a header row (no DesktopEntry data) as never-selectable. breadbox passes sections=false to keep its own overlay exactly as it was.
This commit is contained in:
parent
d2c68f18b0
commit
00e8d4f28e
5 changed files with 603 additions and 28 deletions
|
|
@ -20,6 +20,7 @@ mod icon;
|
|||
mod launch;
|
||||
mod matching;
|
||||
mod paths;
|
||||
mod query;
|
||||
|
||||
#[cfg(feature = "gtk")]
|
||||
pub mod gtk;
|
||||
|
|
@ -28,8 +29,11 @@ pub use desktop::{load_all_desktop_entries, parse_desktop, strip_exec_codes, Des
|
|||
pub use history::LaunchHistory;
|
||||
pub use icon::IconCache;
|
||||
pub use launch::{do_launch, emit_launched};
|
||||
pub use matching::{fuzzy_matches, fuzzy_score, load_sorted_entries, matches_term, priority_rank};
|
||||
pub use matching::{
|
||||
fuzzy_matches, fuzzy_score, load_sorted_entries, matches_term, priority_rank, split_sections,
|
||||
};
|
||||
pub use paths::{app_dirs, cache_dir, config_dir, home_dir};
|
||||
pub use query::{builtin_commands, eval_calc, filter_commands, parse_query, Command, ParsedQuery, QueryKind};
|
||||
|
||||
/// The launcher's one shared identity, passed to [`cache_dir`]/[`config_dir`]/
|
||||
/// [`IconCache::new`]/[`LaunchHistory::load`] by every host that embeds this
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue