lattice_host/
search_line_mode.rs1use lattice_core::BufferKind;
27use lattice_mode::{
28 Keymap, KeymapEntry, LifecycleFuture, Mode, ModeContext, ModeId, ModeKind, keymap_entry,
29};
30
31pub const SEARCH_LINE_BUFFER_NAME: &str = "*search-line*";
34
35pub const SEARCH_LINE_SUBMIT: &str = "action:search-line-submit";
39pub const SEARCH_LINE_CANCEL: &str = "action:search-line-cancel";
40pub const SEARCH_LINE_TOGGLE_EXPAND: &str = "action:search-line-toggle-expand";
41
42pub struct SearchLineMode;
44
45impl SearchLineMode {
46 pub fn mode_id() -> ModeId {
47 ModeId::new("search-line-mode")
48 }
49}
50
51impl Mode for SearchLineMode {
52 type Guard = ();
53
54 fn id(&self) -> ModeId {
55 Self::mode_id()
56 }
57
58 fn kind(&self) -> ModeKind {
59 ModeKind::Major
60 }
61
62 fn target_buffer_kind(&self) -> Option<BufferKind> {
67 None
68 }
69
70 fn options(&self) -> lattice_config::OptionOverrideSet {
74 lattice_config::overrides! {
75 lattice_config::NoFile = true,
76 lattice_config::Wrap = false,
77 lattice_config::Number = false,
78 lattice_config::SignColumnOption = lattice_config::SignColumn::No,
79 lattice_config::CursorLine = false,
80 }
81 }
82
83 fn keymap(&self) -> Keymap {
84 Keymap::from_entries(search_line_entries())
85 }
86
87 fn on_activate(&self, _ctx: ModeContext) -> LifecycleFuture<'_, Self::Guard> {
88 Box::pin(async { Ok(()) })
89 }
90}
91
92fn search_line_entries() -> &'static [KeymapEntry] {
94 use std::sync::OnceLock;
95 static ENTRIES: OnceLock<Vec<KeymapEntry>> = OnceLock::new();
96 ENTRIES.get_or_init(|| {
97 vec![
98 keymap_entry! { mode: Search, chord: "<CR>", doc: "Submit the search pattern", cmd: "action:search-line-submit" },
99 keymap_entry! { mode: Search, chord: "<Esc>", doc: "Cancel the search line", cmd: "action:search-line-cancel" },
100 keymap_entry! { mode: Search, chord: "<C-c>", doc: "Cancel the search line", cmd: "action:search-line-cancel" },
101 keymap_entry! { mode: Search, chord: "<BS>", doc: "Delete a character, or cancel the search when the pattern is empty", cmd: "action:search-line-backspace" },
102 keymap_entry! { mode: Search, chord: "<C-p>", doc: "Previous search history entry", cmd: "action:search-line-history-prev" },
103 keymap_entry! { mode: Search, chord: "<C-n>", doc: "Next search history entry", cmd: "action:search-line-history-next" },
104 keymap_entry! { mode: Search, chord: "<Up>", doc: "Previous search history entry", cmd: "action:search-line-history-prev" },
105 keymap_entry! { mode: Search, chord: "<Down>", doc: "Next search history entry", cmd: "action:search-line-history-next" },
106 keymap_entry! { mode: Search, chord: "<C-x><C-e>", doc: "Expand the `/`·`?` line into the full-modal mini-buffer band (or collapse it)", cmd: "action:search-line-toggle-expand" },
107 keymap_entry! { mode: Normal, chord: "<C-x><C-e>", doc: "Collapse the mini-buffer band back to the one-row `/`·`?` line", cmd: "action:search-line-toggle-expand" },
110 ]
111 })
112}