You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Updated keysyms case mappings to cover full Unicode 16.0. This change
provides a consistent behavior with respect to case mappings, and affects
the following:
xkb_keysym_to_lower() and xkb_keysym_to_upper() give different output
for keysyms not covered previously and handle title-cased keysyms.
Example of title-cased keysym: 0x10001f2 (U+01F2 “Dz”):
Implicit alphabetic key types are better detected, because they use the
latest Unicode case mappings and now handle the title-cased keysyms the
same way as upper-case ones.
Note: As before, only simple case mappings (i.e. one-to-one) are supported.
For example, the full upper case of U+01F0 “ǰ” is “J̌” (2 characters: U+004A
and U+030C), which would require 2 keysyms, which is not supported by the
current API.
New
Implement the GroupLatch action, usually activated with the keysym ISO_Group_Latch. (#455.group-latch)
symbols: Added support for multiple actions per levels:
1 keysym == 1 action now holds for every keysym count.
When no action is specified, interpret statements are used to find an action corresponding for each keysym, as expected.
When both keysyms and actions are specified, they should have the exact same count for each level.
For now, at most one action of each following categories is allowed per level:
modifier actions: SetMods, LatchMods, LockMods;
group actions: SetGroup, LatchGroup, LockGroup.
Some examples:
Previously, setting explicit actions for a group in symbols files made the parser
skip compatibility interpretations for all the groups in the corresponding key,
resulting in possibly broken groups with no explicit actions or missing key fields.
Fixed by skipping interpretations only for groups with explicit actions when parsing
a keymap and setting relevant fields explicitly when serializing a keymap to a string. (#511.explicit-interp-per-group)
registry: Fixed libxml2 global error handler not reset after parsing, which
could trigger a crash if the corresponding rxkb_context has been freed.
xkb_keymap_new_from_names: Allow only one group per key in symbols sections.
While the original issue was fixed in xkeyboard-config
project, the previous handling in libxkbcommon of extra key groups was deemed unintuitive.
xkb_keysym_to_utf8: Require only 5 bytes for the buffer, as UTF-8 encodes code
points on up to 4 bytes + 1 byte for the NULL-terminating byte.
Previous standard RFC 2279
(1998) required up to 6 bytes per code point, but has been superseded by RFC 3629 (2003). (#418)
rules: Fix handling of wild card * to match the behavior of libxkbfile.
Previously * would match any value, even empty one. Now:
For model and options: always match.
For layout and variant: match any non-empty value.
Fixed xkb_keymap_get_as_string truncating the 4 longest keysyms names, such as Greek_upsilonaccentdieresis.
The following functions now allow to query also virtual modifiers, so they work
with any modifiers (real and virtual):
xkb_state_mod_index_is_active
xkb_state_mod_indices_are_active
xkb_state_mod_name_is_active
xkb_state_mod_names_are_active
xkb_state_mod_index_is_consumed
xkb_state_mod_index_is_consumed2
xkb_state_mod_mask_remove_consumed
Warning: they may overmatch in case there are overlappings virtual-to-real
modifiers mappings.
Tools
New
Added --test option to compile-keymap and compile-compose, to enable testing
compilation without printing the resulting file.
Added xkbcli dump-keymap-wayland and xkbcli dump-keymap-x11 debugging tools
to dump a keymap from a Wayland compositor or a X server, similar to what xkbcomp -xkb $DISPLAY - does for X servers.
xkbcli how-to-type: added new input formats and their corresponding documentation.
Unicode code points can be passed in the following formats:
Literal character (requires UTF-8 character encoding of the terminal);
Decimal number;
Hexadecimal number: either 0xNNNN or U+NNNN.
Keysyms can to be passed in the following formats:
Decimal number;
Hexadecimal number: 0xNNNN;
Name.
Fixes
Fixed various tools truncating the 4 longest keysyms names, such as Greek_upsilonaccentdieresis.
Build system
Breaking changes
Raised minimal meson version requirement to 0.58.
Fixes
Gated the use of --undefined-version in the linker because it breaks on older
GNU ld. (#481)
We have already quite a few new features and MR are stalled, let’s cut a release.
This is our current changelog for 1.8:
libxkbcommon 1.8 - 2024-11-29
API
Breaking changes
Updated keysyms case mappings to cover full Unicode 16.0. This change
provides a consistent behavior with respect to case mappings, and affects
the following:
xkb_keysym_to_lower()
andxkb_keysym_to_upper()
give different outputfor keysyms not covered previously and handle title-cased keysyms.
Example of title-cased keysym:
0x10001f2
(U+01F2
“Dz”):xkb_keysym_to_lower(0x10001f2) == 0x10001f3
(U+01F3
“dz”)xkb_keysym_to_upper(0x10001f2) == 0x10001f1
(U+01F1
“DZ”)Implicit alphabetic key types are better detected, because they use the
latest Unicode case mappings and now handle the title-cased keysyms the
same way as upper-case ones.
Note: As before, only simple case mappings (i.e. one-to-one) are supported.
For example, the full upper case of
U+01F0
“ǰ” is “J̌” (2 characters:U+004A
and
U+030C
), which would require 2 keysyms, which is not supported by thecurrent API.
New
Implement the
GroupLatch
action, usually activated with the keysymISO_Group_Latch
. (#455.group-latch)symbols: Added support for multiple actions per levels:
interpret
statements are used to find an action corresponding for each keysym, as expected.SetMods
,LatchMods
,LockMods
;SetGroup
,LatchGroup
,LockGroup
.Some examples:
SetMods
+SetGroup
: okSetMods
+SetMods
: errorSetMods
+LockMods
: errorSetMods
+LockGroup
: ok(#486.multiple-actions-per-level)
rules: Use XKB paths to resolve relative paths in include statements. (#501.rules-includes)
Updated keysyms using latest [xorgproto] (commit:
d7ea44d5f04cc476dee83ef439a847172f7a6bd1
):Additions:
XKB_KEY_XF86RefreshRateToggle
XKB_KEY_XF86Accessibility
XKB_KEY_XF86DoNotDisturb
Relevant upstream merge request: xorgproto-91.
Added deprecated keysym warnings:
These warnings are activated by setting the log verbosity to at least 2.
It is advised to fix these warnings, as the deprecated items may be removed in a
future release.
Added the following modifiers names definitions in
xkbcommon-names.h
:XKB_MOD_NAME_MOD1
XKB_MOD_NAME_MOD2
XKB_MOD_NAME_MOD3
XKB_MOD_NAME_MOD4
XKB_MOD_NAME_MOD5
XKB_VMOD_NAME_ALT
XKB_VMOD_NAME_META
XKB_VMOD_NAME_NUM
XKB_VMOD_NAME_SUPER
XKB_VMOD_NAME_HYPER
XKB_VMOD_NAME_LEVEL3
XKB_VMOD_NAME_LEVEL5
XKB_VMOD_NAME_SCROLL
Rules: Added support for special layouts indexes:
layout[single]
is the same as withoutexplicit index:
layout
.the RMLVO configuration. Acts as both
layout
andlayout[1]
.layout[2]
..layout[4]
.Also added:
%i
which correspond to the index of the matched layout.:all
qualifier: it applies the qualified item to all layouts.See the documentation
for further information.
Fixes
Previously, setting explicit actions for a group in symbols files made the parser
skip compatibility interpretations for all the groups in the corresponding key,
resulting in possibly broken groups with no explicit actions or missing key fields.
Fixed by skipping interpretations only for groups with explicit actions when parsing
a keymap and setting relevant fields explicitly when serializing a keymap to a string. (#511.explicit-interp-per-group)
registry: Fixed
libxml2
global error handler not reset after parsing, whichcould trigger a crash if the corresponding
rxkb_context
has been freed.Contributed by Sebastian Keller. (#529.fix-xml-error-handler)
xkb_keymap_new_from_names
: Allow only one group per key in symbols sections.While the original issue was fixed in
xkeyboard-config
project, the previous handling in
libxkbcommon
of extra key groups was deemed unintuitive.Note: rules resolution may still produce more groups than the input layouts.
This is currently true for some legacy rules in
xkeyboard-config
. (#262.only-one-group-per-key)xkb_keysym_to_utf8
: Require only 5 bytes for the buffer, as UTF-8 encodes codepoints on up to 4 bytes + 1 byte for the NULL-terminating byte.
Previous standard RFC 2279
(1998) required up to 6 bytes per code point, but has been superseded by
RFC 3629 (2003). (#418)
rules: Fix handling of wild card
*
to match the behavior oflibxkbfile
.Previously
*
would match any value, even empty one. Now:model
andoptions
: always match.layout
andvariant
: match any non-empty value.(#497)
Fixed
xkb_keymap_get_as_string
truncating the 4 longest keysyms names, such asGreek_upsilonaccentdieresis
.The following functions now allow to query also virtual modifiers, so they work
with any modifiers (real and virtual):
xkb_state_mod_index_is_active
xkb_state_mod_indices_are_active
xkb_state_mod_name_is_active
xkb_state_mod_names_are_active
xkb_state_mod_index_is_consumed
xkb_state_mod_index_is_consumed2
xkb_state_mod_mask_remove_consumed
Warning: they may overmatch in case there are overlappings virtual-to-real
modifiers mappings.
Tools
New
Added
--test
option tocompile-keymap
andcompile-compose
, to enable testingcompilation without printing the resulting file.
Added
xkbcli dump-keymap-wayland
andxkbcli dump-keymap-x11
debugging toolsto dump a keymap from a Wayland compositor or a X server, similar to what
xkbcomp -xkb $DISPLAY -
does for X servers.xkbcli how-to-type
: added new input formats and their corresponding documentation.Unicode code points can be passed in the following formats:
0xNNNN
orU+NNNN
.Keysyms can to be passed in the following formats:
0xNNNN
;Fixes
Greek_upsilonaccentdieresis
.Build system
Breaking changes
Fixes
--undefined-version
in the linker because it breaks on olderGNU
ld
. (#481)There are still a 2 MR initially planned for 1.8:
Incorrect implementation ofLatchToLock
andClearLock
#549While I am eager to see both merged, a reasonable option is to cut a release now, even if we cut another one “soon”.
TODO:
Some previous release issues/MRs for reference:
@bluetech @whot
The text was updated successfully, but these errors were encountered: