Don't emit text for NamedKey without text repr

When the key doesn't have textual representation we shouldn't emit
the text for them, since they are processed via bindings.

Also, fix the logic to handle named keys with disambiguate without
special modes/modifiers.

Fixes #7423.
This commit is contained in:
Kirill Chibisov 2023-12-08 09:28:50 +04:00 committed by GitHub
parent 1a143d11d3
commit e12c750edb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 9 deletions

View File

@ -107,15 +107,19 @@ impl<T: EventListener, A: ActionContext<T>> Processor<T, A> {
mods: ModifiersState, mods: ModifiersState,
) -> bool { ) -> bool {
if mode.contains(TermMode::REPORT_ALL_KEYS_AS_ESC) { if mode.contains(TermMode::REPORT_ALL_KEYS_AS_ESC) {
true return true;
} else if mode.contains(TermMode::DISAMBIGUATE_ESC_CODES) { }
let on_numpad = key.location == KeyLocation::Numpad;
let is_escape = key.logical_key == Key::Named(NamedKey::Escape); let disambiguate = mode.contains(TermMode::DISAMBIGUATE_ESC_CODES)
is_escape || (!mods.is_empty() && mods != ModifiersState::SHIFT) || on_numpad && (key.logical_key == Key::Named(NamedKey::Escape)
} else { || (!mods.is_empty() && mods != ModifiersState::SHIFT)
// `Delete` key always has text attached to it, but it's a named key, thus needs to be || key.location == KeyLocation::Numpad);
// excluded here as well.
text.is_empty() || key.logical_key == Key::Named(NamedKey::Delete) match key.logical_key {
_ if disambiguate => true,
// Exclude all the named keys unless they have textual representation.
Key::Named(named) => named.to_text().is_none(),
_ => text.is_empty(),
} }
} }