@@ -38,9 +38,9 @@ use surf_n_term::{
38
38
Margins , ScrollBarFn , ScrollBarPosition , Text , Tree , TreeId , TreeMut , TreeView , View ,
39
39
ViewCache , ViewContext , ViewDeserializer , ViewLayout , ViewLayoutStore , ViewMutLayout ,
40
40
} ,
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 ,
44
44
} ;
45
45
use tokio:: {
46
46
io:: { AsyncRead , AsyncWrite } ,
@@ -1064,6 +1064,8 @@ struct SweepWindow<H: Haystack> {
1064
1064
ranker : Ranker ,
1065
1065
// haystack
1066
1066
haystack : Vec < H > ,
1067
+ // haystack keymap
1068
+ haystack_keymap : KeyMapHandler < SweepAction > ,
1067
1069
// haystack context
1068
1070
haystack_context : H :: Context ,
1069
1071
// cached large preview of the current item
@@ -1151,6 +1153,7 @@ where
1151
1153
marked : Default :: default ( ) ,
1152
1154
ranker,
1153
1155
haystack : Vec :: new ( ) ,
1156
+ haystack_keymap : KeyMapHandler :: new ( ) ,
1154
1157
haystack_context,
1155
1158
preview_large : None ,
1156
1159
render_suppress_sync : None ,
@@ -1166,10 +1169,10 @@ where
1166
1169
let Some ( chord) = haystack. hotkey ( ) else {
1167
1170
return ;
1168
1171
} ;
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
+ ) ;
1173
1176
} ) ;
1174
1177
self . haystack . extend ( haystack) ;
1175
1178
}
@@ -1513,6 +1516,7 @@ impl<H: Haystack> Window for SweepWindow<H> {
1513
1516
HaystackClear => {
1514
1517
self . ranker . haystack_clear ( ) ;
1515
1518
self . haystack . clear ( ) ;
1519
+ self . haystack_keymap . clear ( ) ;
1516
1520
}
1517
1521
RankerKeepOrder ( toggle) => self . ranker . keep_order ( toggle) ,
1518
1522
RenderSuppress ( suppress) => {
@@ -1558,6 +1562,8 @@ impl<H: Haystack> Window for SweepWindow<H> {
1558
1562
} else {
1559
1563
return self . handle_action ( & action. clone ( ) ) ;
1560
1564
}
1565
+ } else if let Some ( action) = self . haystack_keymap . handle ( key) . cloned ( ) {
1566
+ return self . handle_action ( & action) ;
1561
1567
} else if let Key {
1562
1568
name : KeyName :: Char ( c) ,
1563
1569
mode : KeyMod :: EMPTY ,
0 commit comments