don't ignore missing non-standard modifiers in _XtMatchUsingDontCareMods
In xterm-360, VTInitTranslations()
configures some bindings for keys in
a way that requires only the explicitly listed modifiers to be present, but
places no constraints on any other modifiers - e.g. insert-selection
is
bound to Shift <KeyPress> Insert
, so if the user e.g. presses
Ctrl+Shift+Insert
, the action will still fire.
https://www.x.org/releases/X11R7.5/doc/Xt/Xt.html Appendix B, which specifies the Translation Table syntax, says that not only additional modifiers are ignored, but missing modifiers that make up the key are also ignored. As the spec says:
‘‘A’’ and ‘‘a’’ are equivalent
In that example, A
is normally composed as Shift+A
, but the Shift
modifier can be omitted.
On most keyboard layouts, keys such as Insert
, Return
and KP_Add
don't contain modifiers, so everything works fine. However, in the german
neo2 layout:
-
Mod5+Ä
formsInsert
-
Mod5+Q
formsKP_Add
This means that when VTInitTranslations()
says that we want to bind to
Shift+KP_Add
and don't care about any other modifiers (other than
Ctrl
) being added or removed, the result is that when the user presses
Shift+Q
(for capital Q
), or Shift+Mod3+Q
(for ϕ
), the terminal's
font size will be changed instead.
While libXt is kind of working as documented here, the behavior doesn't
really make much sense. Let's tweak _XtMatchUsingDontCareMods
such that
missing non-standard modifiers are never ignored.