feat(keymap): add Ctrl-r redo intent
Decodes Ctrl+R (HID 0x15) to a new Key::Redo, the inverse of the editor's `u`. Meaningful in Normal mode; ignored elsewhere.
This commit is contained in:
@@ -34,6 +34,9 @@ pub enum Key {
|
||||
HalfPageDown,
|
||||
/// Ctrl+U — scroll up half a screen (vim `Ctrl-u`).
|
||||
HalfPageUp,
|
||||
/// Ctrl+R — redo (vim `Ctrl-r`); the inverse of `u`. Meaningful in Normal;
|
||||
/// ignored elsewhere.
|
||||
Redo,
|
||||
/// Caps Lock tapped on its own. A no-op for now; groundwork for a future
|
||||
/// vim-style normal mode.
|
||||
Escape,
|
||||
@@ -146,6 +149,7 @@ fn translate(usage: u8, shift: bool, ctrl: bool, cmd: bool) -> Option<Key> {
|
||||
0x1a if ctrl => return Some(Key::DeleteWord), // Ctrl+W, readline-style
|
||||
0x07 if ctrl => return Some(Key::HalfPageDown), // Ctrl+D, half-page down
|
||||
0x18 if ctrl => return Some(Key::HalfPageUp), // Ctrl+U, half-page up
|
||||
0x15 if ctrl => return Some(Key::Redo), // Ctrl+R, redo
|
||||
_ => {}
|
||||
}
|
||||
|
||||
@@ -385,6 +389,15 @@ mod tests {
|
||||
assert_eq!(translate(0x29, true, false, false), Some(Key::Char('~')));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn translate_ctrl_navigation_and_redo_chords() {
|
||||
assert_eq!(translate(0x07, false, true, false), Some(Key::HalfPageDown)); // Ctrl+D
|
||||
assert_eq!(translate(0x18, false, true, false), Some(Key::HalfPageUp)); // Ctrl+U
|
||||
assert_eq!(translate(0x15, false, true, false), Some(Key::Redo)); // Ctrl+R
|
||||
// Without Ctrl these are ordinary letters, not intents.
|
||||
assert_eq!(translate(0x15, false, false, false), Some(Key::Char('r')));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn translate_ctrl_or_cmd_swallows_plain_chars() {
|
||||
assert_eq!(translate(0x04, false, true, false), None); // Ctrl+a
|
||||
|
||||
Reference in New Issue
Block a user