Implement additional readline-like keybindings, including alt-left arrow and alt-right arrow. (#443)

This change adds keybinding support for:

  - `Ctrl+B`: Moves the cursor backward one character.
  - `Ctrl+F`: Moves the cursor forward one character.
  - `Alt+Left Arrow`: Moves the cursor backward one word.
  - `Alt+Right Arrow`: Moves the cursor forward one word.

Closes b/411469305.
This commit is contained in:
DeWitt Clinton
2025-05-20 10:12:07 -07:00
committed by GitHub
parent 6ca446bded
commit ee702c3139
4 changed files with 12 additions and 45 deletions

View File

@@ -1104,16 +1104,22 @@ export function useTextBuffer({
if (key['return'] || input === '\r' || input === '\n') newline();
else if (key['leftArrow'] && !key['meta'] && !key['ctrl'] && !key['alt'])
move('left');
else if (key['ctrl'] && input === 'b') move('left');
else if (key['rightArrow'] && !key['meta'] && !key['ctrl'] && !key['alt'])
move('right');
else if (key['ctrl'] && input === 'f') move('right');
else if (key['upArrow']) move('up');
else if (key['downArrow']) move('down');
else if ((key['meta'] || key['ctrl'] || key['alt']) && key['leftArrow'])
else if ((key['ctrl'] || key['alt']) && key['leftArrow'])
move('wordLeft');
else if ((key['meta'] || key['ctrl'] || key['alt']) && key['rightArrow'])
else if (key['meta'] && input === 'b') move('wordLeft');
else if ((key['ctrl'] || key['alt']) && key['rightArrow'])
move('wordRight');
else if (key['meta'] && input === 'f') move('wordRight');
else if (key['home']) move('home');
else if (key['ctrl'] && input === 'a') move('home');
else if (key['end']) move('end');
else if (key['ctrl'] && input === 'e') move('end');
else if (
(key['meta'] || key['ctrl'] || key['alt']) &&
(key['backspace'] || input === '\x7f')