Rework default bindings

This commit removes all bindings which are sending escapes from
the default configuration file, adds bindings for F13-F24, adds bindings
for ScrollToTop/ScrollToBottom actions, removes bindings for Super + F1-F12,
fixes bindings for Alt + F1-F12.

Fixes #2688.
This commit is contained in:
Kirill Chibisov 2019-09-18 22:21:01 +03:00 committed by Christian Duerr
parent 52fecd71b9
commit 9a14ca42d3
3 changed files with 147 additions and 198 deletions

View File

@ -18,6 +18,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Completions for `--class` and `-t` (short title)
- Change the mouse cursor when hovering over the message bar and its close button
- Support combined bold and italic text (with `font.bold_italic` to customize it)
- Extra bindings for F13-F20
- Terminal escape bindings with combined modifiers
- Bindings for ScrollToTop and ScrollToBottom actions
### Changed
@ -44,6 +47,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Use text mouse cursor when mouse mode is temporarily disabled with shift
- Wayland primary selection clipboard not storing text when selection is stopped outside of the window
- Block URL highlight while a selection is active
- Bindings for Alt + F1-F12
### Removed
- Bindings for Super/Command + F1-F12
## 0.3.3

View File

@ -452,7 +452,7 @@ mouse_bindings:
# - `key`: Identifier of the key pressed
#
# - A-Z
# - F1-F12
# - F1-F24
# - Key0-Key9
#
# A full list with available key codes can be found here:
@ -563,109 +563,11 @@ key_bindings:
#- { key: W, mods: Command, action: Quit }
#- { key: F, mods: Command|Control, action: ToggleFullscreen }
- { key: Paste, action: Paste }
- { key: Copy, action: Copy }
- { key: L, mods: Control, action: ClearLogNotice }
- { key: L, mods: Control, chars: "\x0c" }
- { key: Home, mods: Alt, chars: "\x1b[1;3H" }
- { key: Home, chars: "\x1bOH", mode: AppCursor }
- { key: Home, chars: "\x1b[H", mode: ~AppCursor }
- { key: End, mods: Alt, chars: "\x1b[1;3F" }
- { key: End, chars: "\x1bOF", mode: AppCursor }
- { key: End, chars: "\x1b[F", mode: ~AppCursor }
- { key: PageUp, mods: Shift, action: ScrollPageUp, mode: ~Alt }
- { key: PageUp, mods: Shift, chars: "\x1b[5;2~", mode: Alt }
- { key: PageUp, mods: Control, chars: "\x1b[5;5~" }
- { key: PageUp, mods: Alt, chars: "\x1b[5;3~" }
- { key: PageUp, chars: "\x1b[5~" }
- { key: PageDown, mods: Shift, action: ScrollPageDown, mode: ~Alt }
- { key: PageDown, mods: Shift, chars: "\x1b[6;2~", mode: Alt }
- { key: PageDown, mods: Control, chars: "\x1b[6;5~" }
- { key: PageDown, mods: Alt, chars: "\x1b[6;3~" }
- { key: PageDown, chars: "\x1b[6~" }
- { key: Tab, mods: Shift, chars: "\x1b[Z" }
- { key: Back, chars: "\x7f" }
- { key: Back, mods: Alt, chars: "\x1b\x7f" }
- { key: Insert, chars: "\x1b[2~" }
- { key: Delete, chars: "\x1b[3~" }
- { key: Left, mods: Shift, chars: "\x1b[1;2D" }
- { key: Left, mods: Control, chars: "\x1b[1;5D" }
- { key: Left, mods: Alt, chars: "\x1b[1;3D" }
- { key: Left, chars: "\x1b[D", mode: ~AppCursor }
- { key: Left, chars: "\x1bOD", mode: AppCursor }
- { key: Right, mods: Shift, chars: "\x1b[1;2C" }
- { key: Right, mods: Control, chars: "\x1b[1;5C" }
- { key: Right, mods: Alt, chars: "\x1b[1;3C" }
- { key: Right, chars: "\x1b[C", mode: ~AppCursor }
- { key: Right, chars: "\x1bOC", mode: AppCursor }
- { key: Up, mods: Shift, chars: "\x1b[1;2A" }
- { key: Up, mods: Control, chars: "\x1b[1;5A" }
- { key: Up, mods: Alt, chars: "\x1b[1;3A" }
- { key: Up, chars: "\x1b[A", mode: ~AppCursor }
- { key: Up, chars: "\x1bOA", mode: AppCursor }
- { key: Down, mods: Shift, chars: "\x1b[1;2B" }
- { key: Down, mods: Control, chars: "\x1b[1;5B" }
- { key: Down, mods: Alt, chars: "\x1b[1;3B" }
- { key: Down, chars: "\x1b[B", mode: ~AppCursor }
- { key: Down, chars: "\x1bOB", mode: AppCursor }
- { key: F1, chars: "\x1bOP" }
- { key: F2, chars: "\x1bOQ" }
- { key: F3, chars: "\x1bOR" }
- { key: F4, chars: "\x1bOS" }
- { key: F5, chars: "\x1b[15~" }
- { key: F6, chars: "\x1b[17~" }
- { key: F7, chars: "\x1b[18~" }
- { key: F8, chars: "\x1b[19~" }
- { key: F9, chars: "\x1b[20~" }
- { key: F10, chars: "\x1b[21~" }
- { key: F11, chars: "\x1b[23~" }
- { key: F12, chars: "\x1b[24~" }
- { key: F1, mods: Shift, chars: "\x1b[1;2P" }
- { key: F2, mods: Shift, chars: "\x1b[1;2Q" }
- { key: F3, mods: Shift, chars: "\x1b[1;2R" }
- { key: F4, mods: Shift, chars: "\x1b[1;2S" }
- { key: F5, mods: Shift, chars: "\x1b[15;2~" }
- { key: F6, mods: Shift, chars: "\x1b[17;2~" }
- { key: F7, mods: Shift, chars: "\x1b[18;2~" }
- { key: F8, mods: Shift, chars: "\x1b[19;2~" }
- { key: F9, mods: Shift, chars: "\x1b[20;2~" }
- { key: F10, mods: Shift, chars: "\x1b[21;2~" }
- { key: F11, mods: Shift, chars: "\x1b[23;2~" }
- { key: F12, mods: Shift, chars: "\x1b[24;2~" }
- { key: F1, mods: Control, chars: "\x1b[1;5P" }
- { key: F2, mods: Control, chars: "\x1b[1;5Q" }
- { key: F3, mods: Control, chars: "\x1b[1;5R" }
- { key: F4, mods: Control, chars: "\x1b[1;5S" }
- { key: F5, mods: Control, chars: "\x1b[15;5~" }
- { key: F6, mods: Control, chars: "\x1b[17;5~" }
- { key: F7, mods: Control, chars: "\x1b[18;5~" }
- { key: F8, mods: Control, chars: "\x1b[19;5~" }
- { key: F9, mods: Control, chars: "\x1b[20;5~" }
- { key: F10, mods: Control, chars: "\x1b[21;5~" }
- { key: F11, mods: Control, chars: "\x1b[23;5~" }
- { key: F12, mods: Control, chars: "\x1b[24;5~" }
- { key: F1, mods: Alt, chars: "\x1b[1;6P" }
- { key: F2, mods: Alt, chars: "\x1b[1;6Q" }
- { key: F3, mods: Alt, chars: "\x1b[1;6R" }
- { key: F4, mods: Alt, chars: "\x1b[1;6S" }
- { key: F5, mods: Alt, chars: "\x1b[15;6~" }
- { key: F6, mods: Alt, chars: "\x1b[17;6~" }
- { key: F7, mods: Alt, chars: "\x1b[18;6~" }
- { key: F8, mods: Alt, chars: "\x1b[19;6~" }
- { key: F9, mods: Alt, chars: "\x1b[20;6~" }
- { key: F10, mods: Alt, chars: "\x1b[21;6~" }
- { key: F11, mods: Alt, chars: "\x1b[23;6~" }
- { key: F12, mods: Alt, chars: "\x1b[24;6~" }
- { key: F1, mods: Super, chars: "\x1b[1;3P" }
- { key: F2, mods: Super, chars: "\x1b[1;3Q" }
- { key: F3, mods: Super, chars: "\x1b[1;3R" }
- { key: F4, mods: Super, chars: "\x1b[1;3S" }
- { key: F5, mods: Super, chars: "\x1b[15;3~" }
- { key: F6, mods: Super, chars: "\x1b[17;3~" }
- { key: F7, mods: Super, chars: "\x1b[18;3~" }
- { key: F8, mods: Super, chars: "\x1b[19;3~" }
- { key: F9, mods: Super, chars: "\x1b[20;3~" }
- { key: F10, mods: Super, chars: "\x1b[21;3~" }
- { key: F11, mods: Super, chars: "\x1b[23;3~" }
- { key: F12, mods: Super, chars: "\x1b[24;3~" }
- { key: NumpadEnter, chars: "\n" }
- { key: Paste, action: Paste }
- { key: Copy, action: Copy }
- { key: L, mods: Control, action: ClearLogNotice }
- { key: L, mods: Control, chars: "\x0c" }
- { key: PageUp, mods: Shift, action: ScrollPageUp, mode: ~Alt }
- { key: PageDown, mods: Shift, action: ScrollPageDown, mode: ~Alt }
- { key: Home, mods: Shift, action: ScrollToTop, mode: ~Alt }
- { key: End, mods: Shift, action: ScrollToBottom, mode: ~Alt }

View File

@ -71,113 +71,152 @@ pub fn default_key_bindings() -> Vec<KeyBinding> {
let mut bindings = bindings!(
KeyBinding;
Key::Paste; Action::Paste;
Key::Copy; Action::Copy;
Key::Copy; Action::Copy;
Key::L, [ctrl: true]; Action::ClearLogNotice;
Key::L, [ctrl: true]; Action::Esc("\x0c".into());
Key::Home, [alt: true]; Action::Esc("\x1b[1;3H".into());
Key::PageUp, [shift: true], ~TermMode::ALT_SCREEN; Action::ScrollPageUp;
Key::PageDown, [shift: true], ~TermMode::ALT_SCREEN; Action::ScrollPageDown;
Key::Home, [shift: true], ~TermMode::ALT_SCREEN; Action::ScrollToTop;
Key::End, [shift: true], ~TermMode::ALT_SCREEN; Action::ScrollToBottom;
Key::Home, +TermMode::APP_CURSOR; Action::Esc("\x1bOH".into());
Key::Home, ~TermMode::APP_CURSOR; Action::Esc("\x1b[H".into());
Key::End, [alt: true]; Action::Esc("\x1b[1;3F".into());
Key::End, +TermMode::APP_CURSOR; Action::Esc("\x1bOF".into());
Key::End, ~TermMode::APP_CURSOR; Action::Esc("\x1b[F".into());
Key::PageUp, [shift: true], ~TermMode::ALT_SCREEN; Action::ScrollPageUp;
Key::PageUp, [shift: true], +TermMode::ALT_SCREEN; Action::Esc("\x1b[5;2~".into());
Key::PageUp, [ctrl: true]; Action::Esc("\x1b[5;5~".into());
Key::PageUp, [alt: true]; Action::Esc("\x1b[5;3~".into());
Key::PageUp; Action::Esc("\x1b[5~".into());
Key::PageDown, [shift: true], ~TermMode::ALT_SCREEN; Action::ScrollPageDown;
Key::PageDown, [shift: true], +TermMode::ALT_SCREEN; Action::Esc("\x1b[6;2~".into());
Key::PageDown, [ctrl: true]; Action::Esc("\x1b[6;5~".into());
Key::PageDown, [alt: true]; Action::Esc("\x1b[6;3~".into());
Key::Home, [shift: true], +TermMode::ALT_SCREEN; Action::Esc("\x1b[1;2H".into());
Key::End, +TermMode::APP_CURSOR; Action::Esc("\x1bOF".into());
Key::End, ~TermMode::APP_CURSOR; Action::Esc("\x1b[F".into());
Key::End, [shift: true], +TermMode::ALT_SCREEN; Action::Esc("\x1b[1;2F".into());
Key::PageUp; Action::Esc("\x1b[5~".into());
Key::PageUp, [shift: true], +TermMode::ALT_SCREEN; Action::Esc("\x1b[5;2~".into());
Key::PageDown; Action::Esc("\x1b[6~".into());
Key::Tab, [shift: true]; Action::Esc("\x1b[Z".into());
Key::PageDown, [shift: true], +TermMode::ALT_SCREEN; Action::Esc("\x1b[6;2~".into());
Key::Tab, [shift: true]; Action::Esc("\x1b[Z".into());
Key::Back; Action::Esc("\x7f".into());
Key::Back, [alt: true]; Action::Esc("\x1b\x7f".into());
Key::Insert; Action::Esc("\x1b[2~".into());
Key::Delete; Action::Esc("\x1b[3~".into());
Key::Left, [shift: true]; Action::Esc("\x1b[1;2D".into());
Key::Left, [ctrl: true]; Action::Esc("\x1b[1;5D".into());
Key::Left, [alt: true]; Action::Esc("\x1b[1;3D".into());
Key::Left, ~TermMode::APP_CURSOR; Action::Esc("\x1b[D".into());
Key::Left, +TermMode::APP_CURSOR; Action::Esc("\x1bOD".into());
Key::Right, [shift: true]; Action::Esc("\x1b[1;2C".into());
Key::Right, [ctrl: true]; Action::Esc("\x1b[1;5C".into());
Key::Right, [alt: true]; Action::Esc("\x1b[1;3C".into());
Key::Right, ~TermMode::APP_CURSOR; Action::Esc("\x1b[C".into());
Key::Up, +TermMode::APP_CURSOR; Action::Esc("\x1bOA".into());
Key::Up, ~TermMode::APP_CURSOR; Action::Esc("\x1b[A".into());
Key::Down, +TermMode::APP_CURSOR; Action::Esc("\x1bOB".into());
Key::Down, ~TermMode::APP_CURSOR; Action::Esc("\x1b[B".into());
Key::Right, +TermMode::APP_CURSOR; Action::Esc("\x1bOC".into());
Key::Up, [shift: true]; Action::Esc("\x1b[1;2A".into());
Key::Up, [ctrl: true]; Action::Esc("\x1b[1;5A".into());
Key::Up, [alt: true]; Action::Esc("\x1b[1;3A".into());
Key::Up, ~TermMode::APP_CURSOR; Action::Esc("\x1b[A".into());
Key::Up, +TermMode::APP_CURSOR; Action::Esc("\x1bOA".into());
Key::Down, [shift: true]; Action::Esc("\x1b[1;2B".into());
Key::Down, [ctrl: true]; Action::Esc("\x1b[1;5B".into());
Key::Down, [alt: true]; Action::Esc("\x1b[1;3B".into());
Key::Down, ~TermMode::APP_CURSOR; Action::Esc("\x1b[B".into());
Key::Down, +TermMode::APP_CURSOR; Action::Esc("\x1bOB".into());
Key::F1; Action::Esc("\x1bOP".into());
Key::F2; Action::Esc("\x1bOQ".into());
Key::F3; Action::Esc("\x1bOR".into());
Key::F4; Action::Esc("\x1bOS".into());
Key::F5; Action::Esc("\x1b[15~".into());
Key::F6; Action::Esc("\x1b[17~".into());
Key::F7; Action::Esc("\x1b[18~".into());
Key::F8; Action::Esc("\x1b[19~".into());
Key::F9; Action::Esc("\x1b[20~".into());
Key::Right, ~TermMode::APP_CURSOR; Action::Esc("\x1b[C".into());
Key::Left, +TermMode::APP_CURSOR; Action::Esc("\x1bOD".into());
Key::Left, ~TermMode::APP_CURSOR; Action::Esc("\x1b[D".into());
Key::F1; Action::Esc("\x1bOP".into());
Key::F2; Action::Esc("\x1bOQ".into());
Key::F3; Action::Esc("\x1bOR".into());
Key::F4; Action::Esc("\x1bOS".into());
Key::F5; Action::Esc("\x1b[15~".into());
Key::F6; Action::Esc("\x1b[17~".into());
Key::F7; Action::Esc("\x1b[18~".into());
Key::F8; Action::Esc("\x1b[19~".into());
Key::F9; Action::Esc("\x1b[20~".into());
Key::F10; Action::Esc("\x1b[21~".into());
Key::F11; Action::Esc("\x1b[23~".into());
Key::F12; Action::Esc("\x1b[24~".into());
Key::F1, [shift: true]; Action::Esc("\x1b[1;2P".into());
Key::F2, [shift: true]; Action::Esc("\x1b[1;2Q".into());
Key::F3, [shift: true]; Action::Esc("\x1b[1;2R".into());
Key::F4, [shift: true]; Action::Esc("\x1b[1;2S".into());
Key::F5, [shift: true]; Action::Esc("\x1b[15;2~".into());
Key::F6, [shift: true]; Action::Esc("\x1b[17;2~".into());
Key::F7, [shift: true]; Action::Esc("\x1b[18;2~".into());
Key::F8, [shift: true]; Action::Esc("\x1b[19;2~".into());
Key::F9, [shift: true]; Action::Esc("\x1b[20;2~".into());
Key::F10, [shift: true]; Action::Esc("\x1b[21;2~".into());
Key::F11, [shift: true]; Action::Esc("\x1b[23;2~".into());
Key::F12, [shift: true]; Action::Esc("\x1b[24;2~".into());
Key::F1, [ctrl: true]; Action::Esc("\x1b[1;5P".into());
Key::F2, [ctrl: true]; Action::Esc("\x1b[1;5Q".into());
Key::F3, [ctrl: true]; Action::Esc("\x1b[1;5R".into());
Key::F4, [ctrl: true]; Action::Esc("\x1b[1;5S".into());
Key::F5, [ctrl: true]; Action::Esc("\x1b[15;5~".into());
Key::F6, [ctrl: true]; Action::Esc("\x1b[17;5~".into());
Key::F7, [ctrl: true]; Action::Esc("\x1b[18;5~".into());
Key::F8, [ctrl: true]; Action::Esc("\x1b[19;5~".into());
Key::F9, [ctrl: true]; Action::Esc("\x1b[20;5~".into());
Key::F10, [ctrl: true]; Action::Esc("\x1b[21;5~".into());
Key::F11, [ctrl: true]; Action::Esc("\x1b[23;5~".into());
Key::F12, [ctrl: true]; Action::Esc("\x1b[24;5~".into());
Key::F1, [alt: true]; Action::Esc("\x1b[1;6P".into());
Key::F2, [alt: true]; Action::Esc("\x1b[1;6Q".into());
Key::F3, [alt: true]; Action::Esc("\x1b[1;6R".into());
Key::F4, [alt: true]; Action::Esc("\x1b[1;6S".into());
Key::F5, [alt: true]; Action::Esc("\x1b[15;6~".into());
Key::F6, [alt: true]; Action::Esc("\x1b[17;6~".into());
Key::F7, [alt: true]; Action::Esc("\x1b[18;6~".into());
Key::F8, [alt: true]; Action::Esc("\x1b[19;6~".into());
Key::F9, [alt: true]; Action::Esc("\x1b[20;6~".into());
Key::F10, [alt: true]; Action::Esc("\x1b[21;6~".into());
Key::F11, [alt: true]; Action::Esc("\x1b[23;6~".into());
Key::F12, [alt: true]; Action::Esc("\x1b[24;6~".into());
Key::F1, [logo: true]; Action::Esc("\x1b[1;3P".into());
Key::F2, [logo: true]; Action::Esc("\x1b[1;3Q".into());
Key::F3, [logo: true]; Action::Esc("\x1b[1;3R".into());
Key::F4, [logo: true]; Action::Esc("\x1b[1;3S".into());
Key::F5, [logo: true]; Action::Esc("\x1b[15;3~".into());
Key::F6, [logo: true]; Action::Esc("\x1b[17;3~".into());
Key::F7, [logo: true]; Action::Esc("\x1b[18;3~".into());
Key::F8, [logo: true]; Action::Esc("\x1b[19;3~".into());
Key::F9, [logo: true]; Action::Esc("\x1b[20;3~".into());
Key::F10, [logo: true]; Action::Esc("\x1b[21;3~".into());
Key::F11, [logo: true]; Action::Esc("\x1b[23;3~".into());
Key::F12, [logo: true]; Action::Esc("\x1b[24;3~".into());
Key::F13; Action::Esc("\x1b[25~".into());
Key::F14; Action::Esc("\x1b[26~".into());
Key::F15; Action::Esc("\x1b[28~".into());
Key::F16; Action::Esc("\x1b[29~".into());
Key::F17; Action::Esc("\x1b[31~".into());
Key::F18; Action::Esc("\x1b[32~".into());
Key::F19; Action::Esc("\x1b[33~".into());
Key::F20; Action::Esc("\x1b[34~".into());
Key::NumpadEnter; Action::Esc("\n".into());
);
// Code Modifiers
// ---------+---------------------------
// 2 | Shift
// 3 | Alt
// 4 | Shift + Alt
// 5 | Control
// 6 | Shift + Control
// 7 | Alt + Control
// 8 | Shift + Alt + Control
// ---------+---------------------------
//
// from: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-PC-Style-Function-Keys
let modifiers = vec![
ModifiersState { shift: true, ..ModifiersState::default() },
ModifiersState { alt: true, ..ModifiersState::default() },
ModifiersState { shift: true, alt: true, ..ModifiersState::default() },
ModifiersState { ctrl: true, ..ModifiersState::default() },
ModifiersState { shift: true, ctrl: true, ..ModifiersState::default() },
ModifiersState { alt: true, ctrl: true, ..ModifiersState::default() },
ModifiersState { shift: true, alt: true, ctrl: true, ..ModifiersState::default() },
];
for (index, mods) in modifiers.iter().enumerate() {
let modifiers_code = index + 2;
bindings.extend(bindings!(
KeyBinding;
Key::Up, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[1;{}A", modifiers_code));
Key::Down, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[1;{}B", modifiers_code));
Key::Right, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[1;{}C", modifiers_code));
Key::Left, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[1;{}D", modifiers_code));
Key::F1, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[1;{}P", modifiers_code));
Key::F2, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[1;{}Q", modifiers_code));
Key::F3, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[1;{}R", modifiers_code));
Key::F4, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[1;{}S", modifiers_code));
Key::F5, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[15;{}~", modifiers_code));
Key::F6, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[17;{}~", modifiers_code));
Key::F7, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[18;{}~", modifiers_code));
Key::F8, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[19;{}~", modifiers_code));
Key::F9, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[20;{}~", modifiers_code));
Key::F10, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[21;{}~", modifiers_code));
Key::F11, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[23;{}~", modifiers_code));
Key::F12, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[24;{}~", modifiers_code));
Key::F13, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[25;{}~", modifiers_code));
Key::F14, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[26;{}~", modifiers_code));
Key::F15, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[28;{}~", modifiers_code));
Key::F16, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[29;{}~", modifiers_code));
Key::F17, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[31;{}~", modifiers_code));
Key::F18, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[32;{}~", modifiers_code));
Key::F19, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[33;{}~", modifiers_code));
Key::F20, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[34;{}~", modifiers_code));
));
// We're adding the following bindings with `Shift` manually above, so skipping them here
// modifiers_code != Shift
if modifiers_code != 2 {
bindings.extend(bindings!(
KeyBinding;
Key::PageUp, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[5;{}~", modifiers_code));
Key::PageDown, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[6;{}~", modifiers_code));
Key::End, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[1;{}F", modifiers_code));
Key::Home, [shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl];
Action::Esc(format!("\x1b[1;{}H", modifiers_code));
));
}
}
bindings.extend(platform_key_bindings());
bindings