aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill Chibisov <contact@kchibisov.com>2025-05-03 07:05:22 +0900
committerGitHub <noreply@github.com>2025-05-03 07:05:22 +0900
commitdef47a5dd511ed20607eb5d9e5e7140afd16b31d (patch)
tree088657dd9b8c8d94179be7e1a613a820067f0f01
parenta0c4dfe962fdb0ee00b85de1cd2af16a0e8e2e9e (diff)
downloadr-alacritty-def47a5dd511ed20607eb5d9e5e7140afd16b31d.tar.gz
r-alacritty-def47a5dd511ed20607eb5d9e5e7140afd16b31d.tar.bz2
r-alacritty-def47a5dd511ed20607eb5d9e5e7140afd16b31d.zip
Fix disambiguation for Enter/Tab/Backspace
The keys were not disambiguated, but they should be. Was just an oversight.
-rw-r--r--CHANGELOG.md1
-rw-r--r--alacritty/src/config/bindings.rs8
-rw-r--r--alacritty/src/input/keyboard.rs11
3 files changed, 14 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 509183fe..0cb79b0c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,7 @@ Notable changes to the `alacritty_terminal` crate are documented in its
- Crash when OpenGL context resets
- Modifier keys clearing selection with kitty keyboard protocol enabled
- `glyph_offset.y` not applied to strikeout
+- `Enter`,`Tab`, `Backspace` not disambiguated with `shift` in kitty keyboard's disambiguate mode
## 0.15.1
diff --git a/alacritty/src/config/bindings.rs b/alacritty/src/config/bindings.rs
index 931b0583..d7ce9a9e 100644
--- a/alacritty/src/config/bindings.rs
+++ b/alacritty/src/config/bindings.rs
@@ -449,11 +449,11 @@ pub fn default_key_bindings() -> Vec<KeyBinding> {
F2, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_ESC_CODES; Action::Esc("\x1bOQ".into());
F3, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_ESC_CODES; Action::Esc("\x1bOR".into());
F4, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_ESC_CODES; Action::Esc("\x1bOS".into());
- Tab, ModifiersState::SHIFT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC; Action::Esc("\x1b[Z".into());
- Tab, ModifiersState::SHIFT | ModifiersState::ALT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC; Action::Esc("\x1b\x1b[Z".into());
+ Tab, ModifiersState::SHIFT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_ESC_CODES; Action::Esc("\x1b[Z".into());
+ Tab, ModifiersState::SHIFT | ModifiersState::ALT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_ESC_CODES; Action::Esc("\x1b\x1b[Z".into());
Backspace, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC; Action::Esc("\x7f".into());
- Backspace, ModifiersState::ALT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC; Action::Esc("\x1b\x7f".into());
- Backspace, ModifiersState::SHIFT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC; Action::Esc("\x7f".into());
+ Backspace, ModifiersState::ALT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_ESC_CODES; Action::Esc("\x1b\x7f".into());
+ Backspace, ModifiersState::SHIFT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_ESC_CODES; Action::Esc("\x7f".into());
Enter => KeyLocation::Numpad, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::REPORT_ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_ESC_CODES; Action::Esc("\n".into());
// Vi mode.
Space, ModifiersState::SHIFT | ModifiersState::CONTROL, ~BindingMode::SEARCH; Action::ToggleViMode;
diff --git a/alacritty/src/input/keyboard.rs b/alacritty/src/input/keyboard.rs
index ccdeac3f..113472c4 100644
--- a/alacritty/src/input/keyboard.rs
+++ b/alacritty/src/input/keyboard.rs
@@ -152,8 +152,15 @@ impl<T: EventListener, A: ActionContext<T>> Processor<T, A> {
let disambiguate = mode.contains(TermMode::DISAMBIGUATE_ESC_CODES)
&& (key.logical_key == Key::Named(NamedKey::Escape)
- || (!mods.is_empty() && mods != ModifiersState::SHIFT)
- || key.location == KeyLocation::Numpad);
+ || key.location == KeyLocation::Numpad
+ || (!mods.is_empty()
+ && (mods != ModifiersState::SHIFT
+ || matches!(
+ key.logical_key,
+ Key::Named(NamedKey::Tab)
+ | Key::Named(NamedKey::Enter)
+ | Key::Named(NamedKey::Backspace)
+ ))));
match key.logical_key {
_ if disambiguate => true,