|
1 |
| -libxkbcommon 1.7.0 - 2024-03-24 |
2 |
| -================== |
| 1 | +libxkbcommon [1.8.0] - 2025-02-04 |
| 2 | +================================= |
| 3 | + |
| 4 | +[1.8.0]: https://github.com/xkbcommon/libxkbcommon/tree/xkbcommon-1.8.0 |
| 5 | + |
| 6 | +## API |
| 7 | + |
| 8 | +### Breaking changes |
| 9 | + |
| 10 | +- `NoSymbol` is now systematically dropped in multi-keysyms levels: |
| 11 | + |
| 12 | + ```c |
| 13 | + // Before normalization |
| 14 | + key <> { [{NoSymbol}, {a, NoSymbol}, {NoSymbol,b}, {a, NoSymbol, b}] }; |
| 15 | + // After normalization |
| 16 | + key <> { [NoSymbol, a, b, {a, b}] }; |
| 17 | + ``` |
| 18 | +
|
| 19 | +- Added the upper case mapping ß → ẞ (`ssharp` → `U1E9E`). This enable to type |
| 20 | + ẞ using CapsLock thanks to the internal capitalization rules. |
| 21 | +
|
| 22 | +- Updated keysyms case mappings to cover full **[Unicode 16.0]**. This change |
| 23 | + provides a *consistent behavior* with respect to case mappings, and affects |
| 24 | + the following: |
| 25 | +
|
| 26 | + - `xkb_keysym_to_lower()` and `xkb_keysym_to_upper()` give different output |
| 27 | + for keysyms not covered previously and handle *title*-cased keysyms. |
| 28 | +
|
| 29 | + Example of title-cased keysym: `U01F2` “Dz”: |
| 30 | + - `xkb_keysym_to_lower(U01F2) == U01F3` “Dz” → “dz” |
| 31 | + - `xkb_keysym_to_upper(U01F2) == U01F1` “Dz” → “DZ” |
| 32 | + - *Implicit* alphabetic key types are better detected, because they use the |
| 33 | + latest Unicode case mappings and now handle the *title*-cased keysyms the |
| 34 | + same way as upper-case ones. |
| 35 | +
|
| 36 | + Note: There is a single *exception* that do not follow the Unicode mappings: |
| 37 | + - `xkb_keysym_to_upper(ssharp) == U1E9E` “ß” → “ẞ” |
| 38 | +
|
| 39 | + Note: As before, only *simple* case mappings (i.e. one-to-one) are supported. |
| 40 | + For example, the full upper case of `U+01F0` “ǰ” is “J̌” (2 characters: `U+004A` |
| 41 | + and `U+030C`), which would require 2 keysyms, which is not supported by the |
| 42 | + current API. |
| 43 | +
|
| 44 | + [Unicode 16.0]: https://www.unicode.org/versions/Unicode16.0.0/ |
| 45 | +
|
| 46 | +### New |
| 47 | +
|
| 48 | +- Implemented the `GroupLatch` action, usually activated with the keysym |
| 49 | + `ISO_Group_Latch`. |
| 50 | + ([#455](https://github.com/xkbcommon/libxkbcommon/issues/455)) |
| 51 | +
|
| 52 | +- Symbols: Added support for *multiple actions per levels:* |
| 53 | + - When no action is specified, `interpret` statements are used to find an |
| 54 | + action corresponding to *each* keysym, as expected. |
| 55 | + - When both keysyms and actions are specified, they may have a different count |
| 56 | + for each level. |
| 57 | + - For now, at most one action of each of the following categories is allowed |
| 58 | + per level: |
| 59 | + - modifier actions: `SetMods`, `LatchMods`, `LockMods`; |
| 60 | + - group actions: `SetGroup`, `LatchGroup`, `LockGroup`. |
| 61 | +
|
| 62 | + Some examples: |
| 63 | + - `SetMods` + `SetGroup`: ok |
| 64 | + - `SetMods` + `SetMods`: error |
| 65 | + - `SetMods` + `LockMods`: error |
| 66 | + - `SetMods` + `LockGroup`: ok |
| 67 | +
|
| 68 | + ([#486](https://github.com/xkbcommon/libxkbcommon/issues/486)) |
| 69 | +
|
| 70 | +- Updated keysyms using latest [xorgproto] |
| 71 | + (commit: `d7ea44d5f04cc476dee83ef439a847172f7a6bd1`): |
| 72 | +
|
| 73 | + Additions: |
| 74 | +
|
| 75 | + - `XKB_KEY_XF86RefreshRateToggle` |
| 76 | + - `XKB_KEY_XF86Accessibility` |
| 77 | + - `XKB_KEY_XF86DoNotDisturb` |
| 78 | +
|
| 79 | + Relevant upstream merge request: [xorgproto-91]. |
| 80 | +
|
| 81 | + [xorgproto-91]: https://gitlab.freedesktop.org/xorg/proto/xorgproto/-/merge_requests/91 |
| 82 | +
|
| 83 | +- Added deprecated keysym warnings: |
| 84 | + - *name* deprecation (typo, historical alias), reporting the reference name; |
| 85 | + - *keysym* deprecation (ambiguous meaning, all names deprecated). |
| 86 | +
|
| 87 | + These warnings are activated by setting the log verbosity to at least 2. |
| 88 | +
|
| 89 | + It is advised to fix these warnings, as the deprecated items may be removed in |
| 90 | + a future release. |
| 91 | +
|
| 92 | +- `xkbcommon-names.h`: Added the following modifiers names definitions: |
| 93 | + - `XKB_MOD_NAME_MOD1` |
| 94 | + - `XKB_MOD_NAME_MOD2` |
| 95 | + - `XKB_MOD_NAME_MOD3` |
| 96 | + - `XKB_MOD_NAME_MOD4` |
| 97 | + - `XKB_MOD_NAME_MOD5` |
| 98 | + - `XKB_VMOD_NAME_ALT` |
| 99 | + - `XKB_VMOD_NAME_META` |
| 100 | + - `XKB_VMOD_NAME_NUM` |
| 101 | + - `XKB_VMOD_NAME_SUPER` |
| 102 | + - `XKB_VMOD_NAME_HYPER` |
| 103 | + - `XKB_VMOD_NAME_LEVEL3` |
| 104 | + - `XKB_VMOD_NAME_LEVEL5` |
| 105 | + - `XKB_VMOD_NAME_SCROLL` |
| 106 | +
|
| 107 | +- `xkbcommon-names.h`: Added `XKB_LED_NAME_COMPOSE` and `XKB_LED_NAME_KANA` |
| 108 | + definitions to cover all LEDs defined in |
| 109 | + [USB HID](https://usb.org/sites/default/files/hid1_11.pdf). |
| 110 | +
|
| 111 | + Contributed by Martin Rys |
| 112 | +
|
| 113 | +- Rules: Use XKB paths to resolve relative paths in include statements. |
| 114 | + ([#501](https://github.com/xkbcommon/libxkbcommon/issues/501)) |
| 115 | +
|
| 116 | +- Rules: Added support for special layouts indexes: |
| 117 | + - *single*: matches a single layout; `layout[single]` is the same as without |
| 118 | + explicit index: `layout`. |
| 119 | + - *first*: matches the first layout/variant, no matter how many layouts are in |
| 120 | + the RMLVO configuration. Acts as both `layout` and `layout[1]`. |
| 121 | + - *later*: matches all but the first layout. This is an index range. Acts as |
| 122 | + `layout[2]` .. `layout[MAX_LAYOUT]`, where `MAX_LAYOUT` is currently 4. |
| 123 | + - *any*: matches layout at any position. This is an index range. |
| 124 | +
|
| 125 | + Also added: |
| 126 | + - the special index `%i` which correspond to the index of the matched layout. |
| 127 | + - the `:all` qualifier: it applies the qualified item to all layouts. |
| 128 | +
|
| 129 | + See the [documentation](https://xkbcommon.org/doc/current/rule-file-format.html) |
| 130 | + for further information. |
| 131 | +
|
| 132 | +### Fixes |
| 133 | +
|
| 134 | +- Previously, setting *explicit actions* for a group in symbols files made the |
| 135 | + parser skip compatibility interpretations for *all* groups in the corresponding |
| 136 | + key, resulting in possibly broken groups with *no* explicit actions or missing |
| 137 | + key fields. |
| 138 | +
|
| 139 | + Fixed by skipping interpretations only for groups with explicit actions when |
| 140 | + parsing a keymap and setting relevant fields explicitly when serializing a |
| 141 | + keymap to a string. |
| 142 | + ([#511](https://github.com/xkbcommon/libxkbcommon/issues/511)) |
| 143 | +
|
| 144 | +- `xkb_keymap_new_from_names`: Allow only one group per key in symbols sections. |
| 145 | + While the original issue was [fixed in `xkeyboard-config`][xkeyboard-config-253] |
| 146 | + project, the previous handling in `libxkbcommon` of extra key groups was deemed |
| 147 | + unintuitive. |
| 148 | +
|
| 149 | + [xkeyboard-config-253]: https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/merge_requests/253 |
| 150 | +
|
| 151 | + Note: rules resolution may still produce more groups than the input layouts. |
| 152 | + This is currently true for some [legacy rules in `xkeyboard-config`][xkeyboard-config-legacy-rules]. |
| 153 | +
|
| 154 | + ([#262](https://github.com/xkbcommon/libxkbcommon/issues/262)) |
| 155 | +
|
| 156 | + [xkeyboard-config-legacy-rules]: https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/blob/6a2eb9e63bcb3c52584580570d31cd91110d1f2e/rules/0013-modellayout_symbols.part#L2 |
| 157 | +
|
| 158 | +- Fixed `xkb_keymap_get_as_string` truncating the *4* longest keysyms names, |
| 159 | + such as `Greek_upsilonaccentdieresis`. |
| 160 | +
|
| 161 | +- `xkb_keysym_to_utf8`: Require only 5 bytes for the buffer, as UTF-8 encodes |
| 162 | + code points on up to 4 bytes + 1 byte for the NULL-terminating byte. |
| 163 | + Previous standard [RFC 2279](https://datatracker.ietf.org/doc/html/rfc2279) |
| 164 | + (1998) required up to 6 bytes per code point, but has been superseded by |
| 165 | + [RFC 3629](https://datatracker.ietf.org/doc/html/rfc3629) (2003). |
| 166 | + ([#418](https://github.com/xkbcommon/libxkbcommon/issues/418)) |
| 167 | +
|
| 168 | +- Registry: Fixed `libxml2` global error handler not reset after parsing, which |
| 169 | + could trigger a crash if the corresponding `rxkb_context` has been freed. |
| 170 | +
|
| 171 | + Contributed by Sebastian Keller. |
| 172 | + ([#529](https://github.com/xkbcommon/libxkbcommon/issues/529)) |
| 173 | +
|
| 174 | +- Rules: Fix handling of wild card `*` to match the behavior of `libxkbfile`. |
| 175 | + Previously `*` would match any value, even empty one. Now: |
| 176 | + - For `model` and `options`: *always* match. |
| 177 | + - For `layout` and `variant`: match any *non-empty* value. |
| 178 | +
|
| 179 | + ([#497](https://github.com/xkbcommon/libxkbcommon/issues/497)) |
| 180 | +
|
| 181 | +- Fixed `LatchGroup` action with the `latchToLock` option disabled not applying |
| 182 | + its latch effect multiple times. |
| 183 | + ([#577](https://github.com/xkbcommon/libxkbcommon/issues/577)) |
| 184 | +
|
| 185 | +- Fixed incorrect handling of group indicators when `whichGroupState` is set with |
| 186 | + `Base` or `Latched`. |
| 187 | + ([#579](https://github.com/xkbcommon/libxkbcommon/issues/579)) |
| 188 | +
|
| 189 | +- Fixed missing explicit virtual modifier mappings when export the keymap as a string. |
| 190 | +
|
| 191 | +- Fixed the lower case mapping ẞ → ß (`U1E9E` → `ssharp`). This re-enable the |
| 192 | + detection of alphabetic key types for the pair (ß, ẞ). |
| 193 | +
|
| 194 | +- Fixed modifiers not properly unset when multiple latches are used simultaneously. |
| 195 | + ([#583](https://github.com/xkbcommon/libxkbcommon/issues/583)) |
| 196 | +
|
| 197 | +- The following functions now allow to query also *virtual* modifiers, so they work |
| 198 | + with *any* modifiers (real *and* virtual): |
| 199 | + - `xkb_state_mod_index_is_active` |
| 200 | + - `xkb_state_mod_indices_are_active` |
| 201 | + - `xkb_state_mod_name_is_active` |
| 202 | + - `xkb_state_mod_names_are_active` |
| 203 | + - `xkb_state_mod_index_is_consumed` |
| 204 | + - `xkb_state_mod_index_is_consumed2` |
| 205 | + - `xkb_state_mod_mask_remove_consumed` |
| 206 | +
|
| 207 | + Warning: they may overmatch in case there are overlappings virtual-to-real |
| 208 | + modifiers mappings. |
| 209 | +
|
| 210 | +- X11: Do not drop a level when the keysym is undefined but not the action. |
| 211 | +
|
| 212 | +
|
| 213 | +## Tools |
| 214 | +
|
| 215 | +### New |
| 216 | +
|
| 217 | +- Added `xkbcli dump-keymap-wayland` and `xkbcli dump-keymap-x11` debugging |
| 218 | + tools to dump a keymap from a Wayland compositor or a X server, similar to |
| 219 | + what `xkbcomp -xkb $DISPLAY -` does for X servers. |
| 220 | +
|
| 221 | +- `xkbcli compile-compose`: the Compose file may be passed as a positional |
| 222 | + argument and `--file` is now deprecated. The file can also be piped to the |
| 223 | + standard input by setting the path to `-`. |
| 224 | +
|
| 225 | +- `xkbcli compile-keymap`: Added `--keymap` as a more intuitive alias for |
| 226 | + `--from-xkb`. Both now accept an optional keymap file argument. These flags |
| 227 | + may be omitted; in this case the keymap file may be passed as a positional |
| 228 | + argument. |
| 229 | +
|
| 230 | +- Added `--test` option to `compile-keymap` and `compile-compose`, to enable |
| 231 | + testing compilation without printing the resulting file. |
| 232 | +
|
| 233 | +- `xkbcli how-to-type`: added new input formats and their corresponding documentation. |
| 234 | +
|
| 235 | + *Unicode code points* can be passed in the following formats: |
| 236 | + - Literal character (requires UTF-8 character encoding of the terminal); |
| 237 | + - Decimal number; |
| 238 | + - Hexadecimal number: either `0xNNNN` or `U+NNNN`. |
| 239 | +
|
| 240 | + *Keysyms* can to be passed in the following formats: |
| 241 | + - Decimal number; |
| 242 | + - Hexadecimal number: `0xNNNN`; |
| 243 | + - Name. |
| 244 | +
|
| 245 | +### Fixes |
| 246 | +
|
| 247 | +- Fixed various tools truncating the *4* longest keysyms names, such as |
| 248 | + `Greek_upsilonaccentdieresis`. |
| 249 | +
|
| 250 | +- `xkbcli list`: Fix duplicate variants. |
| 251 | + ([#587](https://github.com/xkbcommon/libxkbcommon/issues/587)) |
| 252 | +
|
| 253 | +
|
| 254 | +## Build system |
| 255 | +
|
| 256 | +### Breaking changes |
| 257 | +
|
| 258 | +- Raised minimal meson version requirement to 0.58. |
| 259 | +
|
| 260 | +### Fixes |
| 261 | +
|
| 262 | +- Make the test of `-Wl,--version-script` more robust. |
| 263 | + ([#481](https://github.com/xkbcommon/libxkbcommon/issues/481)) |
| 264 | +
|
| 265 | +
|
| 266 | +libxkbcommon [1.7.0] - 2024-03-24 |
| 267 | +================================= |
| 268 | +
|
| 269 | +[1.7.0]: https://github.com/xkbcommon/libxkbcommon/tree/xkbcommon-1.7.0 |
3 | 270 |
|
4 | 271 | API
|
5 | 272 | ---
|
|
0 commit comments