1
1
mirror of https://github.com/wez/wezterm.git synced 2024-08-16 09:40:34 +03:00

Fix Emits of Additional ANSI Characters

This commit ensures that ANSI chars won't be emitted when pressing
non-standard modifier keys.

Fixes #4975
This commit is contained in:
Marc Schreiber 2024-02-10 21:27:13 +01:00
parent 22f9f8d288
commit 9992d59d9e

View File

@ -396,7 +396,13 @@ impl KeyboardWithFallback {
}
_ => sym,
}
} else if kc.is_none() && key_code_from_sym.is_none() {
} else if kc.is_none()
&& key_code_from_sym.is_none()
// Make sure that non-standard modifier keys of Neo2 layout are not mapped
// to a fallback because that would result in extra emitions of the
// original ANSI characters
&& !Self::is_keysym_iso_modifier(xsym)
{
// Not sure if this is a good idea, see
// <https://github.com/wez/wezterm/issues/4910> for context.
match fallback_feed {
@ -457,6 +463,17 @@ impl KeyboardWithFallback {
}
}
fn is_keysym_iso_modifier(xsym: xkbcommon::xkb::Keysym) -> bool {
use xkbcommon::xkb::Keysym;
matches!(
xsym,
Keysym::ISO_Level3_Lock
| Keysym::ISO_Level3_Shift
| Keysym::ISO_Level5_Lock
| Keysym::ISO_Level5_Shift
)
}
fn mod_is_active(&self, modifier: &str) -> bool {
// [TODO] consider state Depressed & consumed mods
self.selected