Skip to content

Commit 8469a5e

Browse files
committed
[sweep] separate haystack keymap
1 parent 16794da commit 8469a5e

File tree

3 files changed

+34
-28
lines changed

3 files changed

+34
-28
lines changed

Cargo.lock

+20-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ resolver = "2"
55
[workspace.package]
66
authors = ["Pavel Aslanov <[email protected]>"]
77
edition = "2021"
8-
version = "0.24.0"
8+
version = "0.24.1"
99
repository = "https://github.com/aslpavel/sweep-rs"
1010

1111
[workspace.dependencies]

sweep-lib/src/sweep.rs

+13-7
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ use surf_n_term::{
3838
Margins, ScrollBarFn, ScrollBarPosition, Text, Tree, TreeId, TreeMut, TreeView, View,
3939
ViewCache, ViewContext, ViewDeserializer, ViewLayout, ViewLayoutStore, ViewMutLayout,
4040
},
41-
CellWrite, Face, FaceAttrs, Glyph, Key, KeyChord, KeyMap, KeyMod, KeyName, Position, Size,
42-
SystemTerminal, Terminal, TerminalAction, TerminalCommand, TerminalEvent, TerminalSize,
43-
TerminalSurface, TerminalSurfaceExt, TerminalWaker,
41+
CellWrite, Face, FaceAttrs, Glyph, Key, KeyChord, KeyMap, KeyMapHandler, KeyMod, KeyName,
42+
Position, Size, SystemTerminal, Terminal, TerminalAction, TerminalCommand, TerminalEvent,
43+
TerminalSize, TerminalSurface, TerminalSurfaceExt, TerminalWaker,
4444
};
4545
use tokio::{
4646
io::{AsyncRead, AsyncWrite},
@@ -1064,6 +1064,8 @@ struct SweepWindow<H: Haystack> {
10641064
ranker: Ranker,
10651065
// haystack
10661066
haystack: Vec<H>,
1067+
// haystack keymap
1068+
haystack_keymap: KeyMapHandler<SweepAction>,
10671069
// haystack context
10681070
haystack_context: H::Context,
10691071
// cached large preview of the current item
@@ -1151,6 +1153,7 @@ where
11511153
marked: Default::default(),
11521154
ranker,
11531155
haystack: Vec::new(),
1156+
haystack_keymap: KeyMapHandler::new(),
11541157
haystack_context,
11551158
preview_large: None,
11561159
render_suppress_sync: None,
@@ -1166,10 +1169,10 @@ where
11661169
let Some(chord) = haystack.hotkey() else {
11671170
return;
11681171
};
1169-
let action = SweepAction::SelectByIndex(index_offset + index);
1170-
let desc = action.description();
1171-
self.key_actions.insert(desc.name, action.clone());
1172-
self.key_map.register(chord, action);
1172+
self.haystack_keymap.register(
1173+
chord.as_ref(),
1174+
SweepAction::SelectByIndex(index_offset + index),
1175+
);
11731176
});
11741177
self.haystack.extend(haystack);
11751178
}
@@ -1513,6 +1516,7 @@ impl<H: Haystack> Window for SweepWindow<H> {
15131516
HaystackClear => {
15141517
self.ranker.haystack_clear();
15151518
self.haystack.clear();
1519+
self.haystack_keymap.clear();
15161520
}
15171521
RankerKeepOrder(toggle) => self.ranker.keep_order(toggle),
15181522
RenderSuppress(suppress) => {
@@ -1558,6 +1562,8 @@ impl<H: Haystack> Window for SweepWindow<H> {
15581562
} else {
15591563
return self.handle_action(&action.clone());
15601564
}
1565+
} else if let Some(action) = self.haystack_keymap.handle(key).cloned() {
1566+
return self.handle_action(&action);
15611567
} else if let Key {
15621568
name: KeyName::Char(c),
15631569
mode: KeyMod::EMPTY,

0 commit comments

Comments
 (0)