1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 00:37:45 +00:00

LibVT/LibLine: Delete words when pressing Ctrl+Backspace in Terminal

This commit is contained in:
Zaggy1024 2022-11-16 04:40:11 -06:00 committed by Ali Mohammad Pur
parent f7a252ae85
commit 7aabda37d1
2 changed files with 17 additions and 0 deletions

View file

@ -986,6 +986,12 @@ void Editor::handle_read_event()
case 'F': // ^[[F: end
go_end();
continue;
case 127:
if (modifiers == CSIMod::Ctrl)
erase_alnum_word_backwards();
else
erase_character_backwards();
continue;
case '~':
if (param1 == 3) { // ^[[3~: delete
if (modifiers == CSIMod::Ctrl)

View file

@ -1378,6 +1378,17 @@ void Terminal::handle_key_press(KeyCode key, u32 code_point, u8 flags)
case KeyCode::Key_PageDown:
emit_tilde_with_modifier(6);
return;
case KeyCode::Key_Backspace:
if (ctrl) {
// This is an extension that allows Editor.cpp to delete whole words when
// Ctrl+Backspace is pressed. Ctrl cannot be transmitted without a CSI, and
// ANSI delete (127) is within the valid range for CSI codes in Editor.cpp.
// The code also has the same behavior as backspace when emitted with no CSI,
// though the backspace code (8) is preserved when Ctrl is not pressed.
emit_final_with_modifier(127);
return;
}
break;
case KeyCode::Key_Return:
// The standard says that CR should be generated by the return key.
// The TTY will take care of translating it to CR LF for the terminal.