@@ -4,7 +4,7 @@ use helix_core::unicode::{segmentation::UnicodeSegmentation, width::UnicodeWidth
4
4
use serde:: de:: { self , Deserialize , Deserializer } ;
5
5
use std:: fmt;
6
6
7
- pub use crate :: keyboard:: { KeyCode , KeyModifiers } ;
7
+ pub use crate :: keyboard:: { KeyCode , KeyModifiers , MediaKeyCode , ModifierKeyCode } ;
8
8
9
9
#[ derive( Debug , PartialOrd , PartialEq , Eq , Clone , Hash ) ]
10
10
pub enum Event {
@@ -119,6 +119,40 @@ pub(crate) mod keys {
119
119
pub ( crate ) const MINUS : & str = "minus" ;
120
120
pub ( crate ) const LESS_THAN : & str = "lt" ;
121
121
pub ( crate ) const GREATER_THAN : & str = "gt" ;
122
+ pub ( crate ) const CAPS_LOCK : & str = "capslock" ;
123
+ pub ( crate ) const SCROLL_LOCK : & str = "scrolllock" ;
124
+ pub ( crate ) const NUM_LOCK : & str = "numlock" ;
125
+ pub ( crate ) const PRINT_SCREEN : & str = "printscreen" ;
126
+ pub ( crate ) const PAUSE : & str = "pause" ;
127
+ pub ( crate ) const MENU : & str = "menu" ;
128
+ pub ( crate ) const KEYPAD_BEGIN : & str = "keypadbegin" ;
129
+ pub ( crate ) const PLAY : & str = "play" ;
130
+ pub ( crate ) const PAUSE_MEDIA : & str = "pausemedia" ;
131
+ pub ( crate ) const PLAY_PAUSE : & str = "playpause" ;
132
+ pub ( crate ) const REVERSE : & str = "reverse" ;
133
+ pub ( crate ) const STOP : & str = "stop" ;
134
+ pub ( crate ) const FAST_FORWARD : & str = "fastforward" ;
135
+ pub ( crate ) const REWIND : & str = "rewind" ;
136
+ pub ( crate ) const TRACK_NEXT : & str = "tracknext" ;
137
+ pub ( crate ) const TRACK_PREVIOUS : & str = "trackprevious" ;
138
+ pub ( crate ) const RECORD : & str = "record" ;
139
+ pub ( crate ) const LOWER_VOLUME : & str = "lowervolume" ;
140
+ pub ( crate ) const RAISE_VOLUME : & str = "raisevolume" ;
141
+ pub ( crate ) const MUTE_VOLUME : & str = "mutevolume" ;
142
+ pub ( crate ) const LEFT_SHIFT : & str = "leftshift" ;
143
+ pub ( crate ) const LEFT_CONTROL : & str = "leftcontrol" ;
144
+ pub ( crate ) const LEFT_ALT : & str = "leftalt" ;
145
+ pub ( crate ) const LEFT_SUPER : & str = "leftsuper" ;
146
+ pub ( crate ) const LEFT_HYPER : & str = "lefthyper" ;
147
+ pub ( crate ) const LEFT_META : & str = "leftmeta" ;
148
+ pub ( crate ) const RIGHT_SHIFT : & str = "rightshift" ;
149
+ pub ( crate ) const RIGHT_CONTROL : & str = "rightcontrol" ;
150
+ pub ( crate ) const RIGHT_ALT : & str = "rightalt" ;
151
+ pub ( crate ) const RIGHT_SUPER : & str = "rightsuper" ;
152
+ pub ( crate ) const RIGHT_HYPER : & str = "righthyper" ;
153
+ pub ( crate ) const RIGHT_META : & str = "rightmeta" ;
154
+ pub ( crate ) const ISO_LEVEL_3_SHIFT : & str = "isolevel3shift" ;
155
+ pub ( crate ) const ISO_LEVEL_5_SHIFT : & str = "isolevel5shift" ;
122
156
}
123
157
124
158
impl fmt:: Display for KeyEvent {
@@ -163,6 +197,44 @@ impl fmt::Display for KeyEvent {
163
197
KeyCode :: Char ( '>' ) => f. write_str ( keys:: GREATER_THAN ) ?,
164
198
KeyCode :: F ( i) => f. write_fmt ( format_args ! ( "F{}" , i) ) ?,
165
199
KeyCode :: Char ( c) => f. write_fmt ( format_args ! ( "{}" , c) ) ?,
200
+ KeyCode :: CapsLock => f. write_str ( keys:: CAPS_LOCK ) ?,
201
+ KeyCode :: ScrollLock => f. write_str ( keys:: SCROLL_LOCK ) ?,
202
+ KeyCode :: NumLock => f. write_str ( keys:: NUM_LOCK ) ?,
203
+ KeyCode :: PrintScreen => f. write_str ( keys:: PRINT_SCREEN ) ?,
204
+ KeyCode :: Pause => f. write_str ( keys:: PAUSE ) ?,
205
+ KeyCode :: Menu => f. write_str ( keys:: MENU ) ?,
206
+ KeyCode :: KeypadBegin => f. write_str ( keys:: KEYPAD_BEGIN ) ?,
207
+ KeyCode :: Media ( MediaKeyCode :: Play ) => f. write_str ( keys:: PLAY ) ?,
208
+ KeyCode :: Media ( MediaKeyCode :: Pause ) => f. write_str ( keys:: PAUSE_MEDIA ) ?,
209
+ KeyCode :: Media ( MediaKeyCode :: PlayPause ) => f. write_str ( keys:: PLAY_PAUSE ) ?,
210
+ KeyCode :: Media ( MediaKeyCode :: Stop ) => f. write_str ( keys:: STOP ) ?,
211
+ KeyCode :: Media ( MediaKeyCode :: Reverse ) => f. write_str ( keys:: REVERSE ) ?,
212
+ KeyCode :: Media ( MediaKeyCode :: FastForward ) => f. write_str ( keys:: FAST_FORWARD ) ?,
213
+ KeyCode :: Media ( MediaKeyCode :: Rewind ) => f. write_str ( keys:: REWIND ) ?,
214
+ KeyCode :: Media ( MediaKeyCode :: TrackNext ) => f. write_str ( keys:: TRACK_NEXT ) ?,
215
+ KeyCode :: Media ( MediaKeyCode :: TrackPrevious ) => f. write_str ( keys:: TRACK_PREVIOUS ) ?,
216
+ KeyCode :: Media ( MediaKeyCode :: Record ) => f. write_str ( keys:: RECORD ) ?,
217
+ KeyCode :: Media ( MediaKeyCode :: LowerVolume ) => f. write_str ( keys:: LOWER_VOLUME ) ?,
218
+ KeyCode :: Media ( MediaKeyCode :: RaiseVolume ) => f. write_str ( keys:: RAISE_VOLUME ) ?,
219
+ KeyCode :: Media ( MediaKeyCode :: MuteVolume ) => f. write_str ( keys:: MUTE_VOLUME ) ?,
220
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftShift ) => f. write_str ( keys:: LEFT_SHIFT ) ?,
221
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftControl ) => f. write_str ( keys:: LEFT_CONTROL ) ?,
222
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftAlt ) => f. write_str ( keys:: LEFT_ALT ) ?,
223
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftSuper ) => f. write_str ( keys:: LEFT_SUPER ) ?,
224
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftHyper ) => f. write_str ( keys:: LEFT_HYPER ) ?,
225
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftMeta ) => f. write_str ( keys:: LEFT_META ) ?,
226
+ KeyCode :: Modifier ( ModifierKeyCode :: RightShift ) => f. write_str ( keys:: RIGHT_SHIFT ) ?,
227
+ KeyCode :: Modifier ( ModifierKeyCode :: RightControl ) => f. write_str ( keys:: RIGHT_CONTROL ) ?,
228
+ KeyCode :: Modifier ( ModifierKeyCode :: RightAlt ) => f. write_str ( keys:: RIGHT_ALT ) ?,
229
+ KeyCode :: Modifier ( ModifierKeyCode :: RightSuper ) => f. write_str ( keys:: RIGHT_SUPER ) ?,
230
+ KeyCode :: Modifier ( ModifierKeyCode :: RightHyper ) => f. write_str ( keys:: RIGHT_HYPER ) ?,
231
+ KeyCode :: Modifier ( ModifierKeyCode :: RightMeta ) => f. write_str ( keys:: RIGHT_META ) ?,
232
+ KeyCode :: Modifier ( ModifierKeyCode :: IsoLevel3Shift ) => {
233
+ f. write_str ( keys:: ISO_LEVEL_3_SHIFT ) ?
234
+ }
235
+ KeyCode :: Modifier ( ModifierKeyCode :: IsoLevel5Shift ) => {
236
+ f. write_str ( keys:: ISO_LEVEL_5_SHIFT ) ?
237
+ }
166
238
} ;
167
239
Ok ( ( ) )
168
240
}
@@ -192,6 +264,40 @@ impl UnicodeWidthStr for KeyEvent {
192
264
KeyCode :: F ( 1 ..=9 ) => 2 ,
193
265
KeyCode :: F ( _) => 3 ,
194
266
KeyCode :: Char ( c) => c. width ( ) . unwrap_or ( 0 ) ,
267
+ KeyCode :: CapsLock => keys:: CAPS_LOCK . len ( ) ,
268
+ KeyCode :: ScrollLock => keys:: SCROLL_LOCK . len ( ) ,
269
+ KeyCode :: NumLock => keys:: NUM_LOCK . len ( ) ,
270
+ KeyCode :: PrintScreen => keys:: PRINT_SCREEN . len ( ) ,
271
+ KeyCode :: Pause => keys:: PAUSE . len ( ) ,
272
+ KeyCode :: Menu => keys:: MENU . len ( ) ,
273
+ KeyCode :: KeypadBegin => keys:: KEYPAD_BEGIN . len ( ) ,
274
+ KeyCode :: Media ( MediaKeyCode :: Play ) => keys:: PLAY . len ( ) ,
275
+ KeyCode :: Media ( MediaKeyCode :: Pause ) => keys:: PAUSE_MEDIA . len ( ) ,
276
+ KeyCode :: Media ( MediaKeyCode :: PlayPause ) => keys:: PLAY_PAUSE . len ( ) ,
277
+ KeyCode :: Media ( MediaKeyCode :: Stop ) => keys:: STOP . len ( ) ,
278
+ KeyCode :: Media ( MediaKeyCode :: Reverse ) => keys:: REVERSE . len ( ) ,
279
+ KeyCode :: Media ( MediaKeyCode :: FastForward ) => keys:: FAST_FORWARD . len ( ) ,
280
+ KeyCode :: Media ( MediaKeyCode :: Rewind ) => keys:: REWIND . len ( ) ,
281
+ KeyCode :: Media ( MediaKeyCode :: TrackNext ) => keys:: TRACK_NEXT . len ( ) ,
282
+ KeyCode :: Media ( MediaKeyCode :: TrackPrevious ) => keys:: TRACK_PREVIOUS . len ( ) ,
283
+ KeyCode :: Media ( MediaKeyCode :: Record ) => keys:: RECORD . len ( ) ,
284
+ KeyCode :: Media ( MediaKeyCode :: LowerVolume ) => keys:: LOWER_VOLUME . len ( ) ,
285
+ KeyCode :: Media ( MediaKeyCode :: RaiseVolume ) => keys:: RAISE_VOLUME . len ( ) ,
286
+ KeyCode :: Media ( MediaKeyCode :: MuteVolume ) => keys:: MUTE_VOLUME . len ( ) ,
287
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftShift ) => keys:: LEFT_SHIFT . len ( ) ,
288
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftControl ) => keys:: LEFT_CONTROL . len ( ) ,
289
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftAlt ) => keys:: LEFT_ALT . len ( ) ,
290
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftSuper ) => keys:: LEFT_SUPER . len ( ) ,
291
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftHyper ) => keys:: LEFT_HYPER . len ( ) ,
292
+ KeyCode :: Modifier ( ModifierKeyCode :: LeftMeta ) => keys:: LEFT_META . len ( ) ,
293
+ KeyCode :: Modifier ( ModifierKeyCode :: RightShift ) => keys:: RIGHT_SHIFT . len ( ) ,
294
+ KeyCode :: Modifier ( ModifierKeyCode :: RightControl ) => keys:: RIGHT_CONTROL . len ( ) ,
295
+ KeyCode :: Modifier ( ModifierKeyCode :: RightAlt ) => keys:: RIGHT_ALT . len ( ) ,
296
+ KeyCode :: Modifier ( ModifierKeyCode :: RightSuper ) => keys:: RIGHT_SUPER . len ( ) ,
297
+ KeyCode :: Modifier ( ModifierKeyCode :: RightHyper ) => keys:: RIGHT_HYPER . len ( ) ,
298
+ KeyCode :: Modifier ( ModifierKeyCode :: RightMeta ) => keys:: RIGHT_META . len ( ) ,
299
+ KeyCode :: Modifier ( ModifierKeyCode :: IsoLevel3Shift ) => keys:: ISO_LEVEL_3_SHIFT . len ( ) ,
300
+ KeyCode :: Modifier ( ModifierKeyCode :: IsoLevel5Shift ) => keys:: ISO_LEVEL_5_SHIFT . len ( ) ,
195
301
} ;
196
302
if self . modifiers . contains ( KeyModifiers :: SHIFT ) {
197
303
width += 2 ;
@@ -235,6 +341,40 @@ impl std::str::FromStr for KeyEvent {
235
341
keys:: MINUS => KeyCode :: Char ( '-' ) ,
236
342
keys:: LESS_THAN => KeyCode :: Char ( '<' ) ,
237
343
keys:: GREATER_THAN => KeyCode :: Char ( '>' ) ,
344
+ keys:: CAPS_LOCK => KeyCode :: CapsLock ,
345
+ keys:: SCROLL_LOCK => KeyCode :: ScrollLock ,
346
+ keys:: NUM_LOCK => KeyCode :: NumLock ,
347
+ keys:: PRINT_SCREEN => KeyCode :: PrintScreen ,
348
+ keys:: PAUSE => KeyCode :: Pause ,
349
+ keys:: MENU => KeyCode :: Menu ,
350
+ keys:: KEYPAD_BEGIN => KeyCode :: KeypadBegin ,
351
+ keys:: PLAY => KeyCode :: Media ( MediaKeyCode :: Play ) ,
352
+ keys:: PAUSE_MEDIA => KeyCode :: Media ( MediaKeyCode :: Pause ) ,
353
+ keys:: PLAY_PAUSE => KeyCode :: Media ( MediaKeyCode :: PlayPause ) ,
354
+ keys:: STOP => KeyCode :: Media ( MediaKeyCode :: Stop ) ,
355
+ keys:: REVERSE => KeyCode :: Media ( MediaKeyCode :: Reverse ) ,
356
+ keys:: FAST_FORWARD => KeyCode :: Media ( MediaKeyCode :: FastForward ) ,
357
+ keys:: REWIND => KeyCode :: Media ( MediaKeyCode :: Rewind ) ,
358
+ keys:: TRACK_NEXT => KeyCode :: Media ( MediaKeyCode :: TrackNext ) ,
359
+ keys:: TRACK_PREVIOUS => KeyCode :: Media ( MediaKeyCode :: TrackPrevious ) ,
360
+ keys:: RECORD => KeyCode :: Media ( MediaKeyCode :: Record ) ,
361
+ keys:: LOWER_VOLUME => KeyCode :: Media ( MediaKeyCode :: LowerVolume ) ,
362
+ keys:: RAISE_VOLUME => KeyCode :: Media ( MediaKeyCode :: RaiseVolume ) ,
363
+ keys:: MUTE_VOLUME => KeyCode :: Media ( MediaKeyCode :: MuteVolume ) ,
364
+ keys:: LEFT_SHIFT => KeyCode :: Modifier ( ModifierKeyCode :: LeftShift ) ,
365
+ keys:: LEFT_CONTROL => KeyCode :: Modifier ( ModifierKeyCode :: LeftControl ) ,
366
+ keys:: LEFT_ALT => KeyCode :: Modifier ( ModifierKeyCode :: LeftAlt ) ,
367
+ keys:: LEFT_SUPER => KeyCode :: Modifier ( ModifierKeyCode :: LeftSuper ) ,
368
+ keys:: LEFT_HYPER => KeyCode :: Modifier ( ModifierKeyCode :: LeftHyper ) ,
369
+ keys:: LEFT_META => KeyCode :: Modifier ( ModifierKeyCode :: LeftMeta ) ,
370
+ keys:: RIGHT_SHIFT => KeyCode :: Modifier ( ModifierKeyCode :: RightShift ) ,
371
+ keys:: RIGHT_CONTROL => KeyCode :: Modifier ( ModifierKeyCode :: RightControl ) ,
372
+ keys:: RIGHT_ALT => KeyCode :: Modifier ( ModifierKeyCode :: RightAlt ) ,
373
+ keys:: RIGHT_SUPER => KeyCode :: Modifier ( ModifierKeyCode :: RightSuper ) ,
374
+ keys:: RIGHT_HYPER => KeyCode :: Modifier ( ModifierKeyCode :: RightHyper ) ,
375
+ keys:: RIGHT_META => KeyCode :: Modifier ( ModifierKeyCode :: RightMeta ) ,
376
+ keys:: ISO_LEVEL_3_SHIFT => KeyCode :: Modifier ( ModifierKeyCode :: IsoLevel3Shift ) ,
377
+ keys:: ISO_LEVEL_5_SHIFT => KeyCode :: Modifier ( ModifierKeyCode :: IsoLevel5Shift ) ,
238
378
single if single. chars ( ) . count ( ) == 1 => KeyCode :: Char ( single. chars ( ) . next ( ) . unwrap ( ) ) ,
239
379
function if function. len ( ) > 1 && function. starts_with ( 'F' ) => {
240
380
let function: String = function. chars ( ) . skip ( 1 ) . collect ( ) ;
0 commit comments