Branch :
| Author | Commit | Date | CI | Message |
|---|---|---|---|---|
| 05ba96db | 2024-08-20 16:41:38 | rules: Fix wild card handling The handling of wild card `*` is different in libxkbfile and X server: wild card matches empty strings for model and option but not for layout nor variant, while in libxkbcommon wild cards always match empty strings. See: - https://gitlab.freedesktop.org/xorg/lib/libxkbfile/-/blob/bf985c68acb1244f51ec91414532a2347fbc1c4c/src/maprules.c#L687 - https://gitlab.freedesktop.org/xorg/lib/libxkbfile/-/blob/bf985c68acb1244f51ec91414532a2347fbc1c4c/src/maprules.c#L712 The difference of handling between the components is unfortunately not documented, but we should follow the behavior of the original implementations for consistency. - Fixed by implementing the same behavior than libxkbfile. - Added tests and fixed failing tests. - Improve the documentation of rules to highlight the special behavior. | ||
| 9af1f9f2 | 2024-09-02 14:18:21 | Add XKB_LED_NAME_COMPOSE and XKB_LED_NAME_KANA | ||
| 8bc426e2 | 2024-07-30 14:45:35 | compose: Add optional foreach traversal to benchmark This allow us to compare the iterator API to the fastest implementation, `foreach`. | ||
| 4100bdd2 | 2024-09-01 10:57:40 | compose: Add roundtrip test parse/dump | ||
| 5e539bf0 | 2024-07-08 09:19:00 | compose: Make iteration API faster New implementation without explicit direction | ||
| d4deb755 | 2024-09-01 09:07:00 | compose: Add quickcheck test for traversal Test against the `foreach` reference implementation: - Suffle compose file lines randomly; - Compare traversal entry by entry. The `foreach` Compose traversal implementation is based on Ran’s work: https://github.com/bluetech/libxkbcommon/commit/f7f3c3c385fdc9ae91135f95e4b10f072603b812 | ||
| 652b03cc | 2024-09-01 08:32:21 | compose: Add Compose table dump internal API - Move `print_compose_table_entry` to own file and add a `file` argument to select output. - Add `xkb_compose_table_dump` to dump a Compose table. This change is needed in order to share the feature “dump a Compose table” between tests and tools. | ||
| e9bd7de4 | 2024-07-04 16:22:13 | state: Add support for group latch action Surprisingly, the latch group action was not yet implemented. Added tests to ensure we get the tricky bits right. | ||
| ce32decc | 2024-07-30 19:18:27 | build: Set the ABI version properly Rational (from: https://gitlab.freedesktop.org/wayland/wayland/-/issues/175): The ABI of a shared library on Linux is given by a major version, which is part of the SONAME and is incremented (rarely) on incompatible changes, and a minor version, which is part of the basename of the regular file to which the SONAME provides a symlink. It's conventional to manage the ABI version in the style of semantic versioning (major.minor.micro where the major version goes up for incompatible changes, the minor version goes up for new ABI, or the micro version goes up for internal fixes), although this is not strictly required. The minor version is used by `ldconfig(8)` and by some projects to choose which of potentially several copies of a library is the newest; keeping it the same means we can't tell, and will potentially choose an outdated version. --- In xkbcommon we did not have an API break for a long time, so in order to avoid an unnecessary SONAME bump, let’s keep the major version version at 0, e.g. xkbcommon 1.x.y produces `libxkbcommon.so.0.x.y`. The same goes for `libxkbcommon-x11` and `libxkbregistry`. | ||
| a0a59d9f | 2024-07-16 10:37:09 | interactive-x11: initialize a variable If xkb_compose_table_new_from_locale() fails we end up de-initializing the keyboard state before it was ever initialized. ../../../tools/interactive-x11.c:196:5: warning: 1st function call argument is an uninitialized value [core.CallAndMessage] 196 | xkb_state_unref(kbd->state); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| 08deb9c3 | 2024-07-16 11:00:39 | compose: initialize the dummy node to zero src/compose/table.c:66:5: uninit_use: Using uninitialized value "dummy". Field "dummy.lokid" is uninitialized. This looks like a false positive but it's easy enough to shut up: | ||
| 4b5d1027 | 2024-07-16 10:19:55 | compose: fix a sizeof char* vs char warning ../../../src/compose/dump.h:48:16: warning: Result of 'calloc' is converted to a pointer of type 'char', which is incompatible with sizeof operand type 'char *' [unix.MallocSizeof] 48 | char* to = calloc(4 * length + 1, sizeof(to)); | ~~~~~ ^~~~~~ ~~~~~~~~~~ No security impact as sizeof(char*) is always >1 so we were just overallocating here. | ||
| 573583e3 | 2024-07-16 10:52:49 | test/registry: fix array overrun test/registry.c:532:9: overrun-local: Overrunning array "tl->iso639" of 3 8-byte elements at element index 23 (byte offset 191) using index "i" (which evaluates to 23). | ||
| 4b69cd9c | 2024-07-16 10:48:32 | test/keysym: remove dead assignment ../../../test/keysym.c:394:5: warning: Value stored to 'iter' is never read [deadcode.DeadStores] 394 | iter = xkb_keysym_iterator_unref(iter); | ||
| c15ca444 | 2024-07-16 10:44:55 | test/compose: reset the utf8 buffer to a "random" sequence This ensures that our string termination is handled by utf32_to_utf8() as opposed to false positives due to previously set null terminators. Fixes: ../../../test/compose.c:912:34: warning: The left operand of '==' is a garbage value [core.UndefinedBinaryOperatorResult] 912 | assert_printf(buf[c] == '\0', "NULL-terminated string\n"); | ||
| f129b21b | 2024-07-16 10:26:19 | test/compose: only setenv if our top_srcdir is not NULL ../../../test/compose.c:968:5: warning: Null pointer passed to 2nd parameter expecting 'nonnull' [core.NonNullParamChecker] | ||
| d85fc24d | 2024-07-16 10:22:23 | test: initialize two return values ../../../test/xvfb-wrapper.c:166:5: warning: Undefined or garbage value returned to caller [core.uninitialized.UndefReturn] 166 | return rc; ../../../tools/interactive-wayland.c:820:14: warning: The left operand of '>=' is a garbage value [core.UndefinedBinaryOperatorResult] 820 | exit(ret >= 0 ? EXIT_SUCCESS : EXIT_FAILURE); | ||
| 89d318da | 2024-07-16 10:17:02 | test: explicitly cast time() to int for the seed (hopefully) silences an analyzer warning: test/compose.c:955:16: store_truncates_time_t: A "time_t" value is stored in an integer with too few bits to accommodate it. The expression "time(NULL)" is cast to "int". | ||
| e83d08dd | 2024-02-23 17:10:15 | keysyms: Fast and complete case mappings (Unicode 15.1) The current code to handle keysym case mappings is quite complex and slow. It is also incomplete, as it does not cover recent Unicode database. Finally, it does not handle title case correctly. It would be easier if we were to use only a lookup table, but a trivial implementation would lead to a huge array: the cased characters range from `U+0041` to `U+`1F189, i.e. a span of 127 304 elements. Thus we need some tricks to compress the lookup table. We based our work on the post: https://github.com/apankrat/notes/blob/3c551cb028595fd34046c5761fd12d1692576003/fast-case-conversion/README.md The compression algorithm is roughly: 1. Compute the delta between the characters and their mappings. 2. Split the delta array in chunk of a given size. 3. Rearrange the order of the chunks in order to optimize consecutive chunks overlap. 4. Create a data table with the reordered chunks and an index table that maps the original chunk index to its offset in the data table. The compression algorithm is then applied a second time to the previous index table. The complete algorithm optimizes the two chunk sizes in order to get the lowest total data size. The mappings were generated using CPython 3.12.4, PyICU 2.13, PyYaml 6.0.1 and ICU 75.1. Also: - Added explicit list of named keysyms and their case mappings. - Added benchmark for case mappings. - Rework ICU tests. Note: 13b30f4f0dccc08dfea426d73570b913596ed602 introduced a fix for sharp S `U+00DF`. With the new implementation, the *conversion* functions `xkb_keysym_to_{lower,upper}` leave it *unchanged*, while the *predicate* functions `xkb_keysym_is_{lower,upper_or_title}` produce the expected results: ```c xkb_keysym_to_upper(XKB_KEY_ssharp) == XKB_KEY_ssharp; xkb_keysym_to_lower(XKB_KEY_ssharp) == XKB_KEY_ssharp; xkb_keysym_to_lower(XKB_KEY_Ssharp) == XKB_KEY_ssharp; xkb_keysym_is_lower (XKB_KEY_ssharp) == true; xkb_keysym_is_upper_or_title(XKB_KEY_Ssharp) == true; ``` | ||
| b8b872d0 | 2024-02-23 17:10:15 | keysyms: Fix case mappings There are several mismatches with the Unicode database. Fix the case mappings in `data/keysyms.yaml` for the following keysyms: - `Iabovedot` - `idotless` - `Greek_finalsmallsigma` - `function` | ||
| 798b7b73 | 2024-02-23 17:10:15 | keysyms: Export explicitly named keysyms Added a tool to export explicitly named keysyms to a yaml file. This includes the following keysyms properties: - Value - Name - Corresponding Unicode code point, if relevant - Corresponding case mapping, if relevant This will allow us to check the case mappings easier and to refactor the related functions. | ||
| 45d64a7c | 2024-02-23 17:10:14 | keysyms: Add benchmark for case mapping functions | ||
| addf73c5 | 2024-07-12 09:17:34 | keysyms: Require only 5 bytes for UTF-8 encoding Require only 5 bytes for the buffer of `xkb_keysym_to_utf8`, 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). [RFC 2279]: https://datatracker.ietf.org/doc/html/rfc2279 [RFC 3629]: https://datatracker.ietf.org/doc/html/rfc3629 | ||
| 1d8a25d6 | 2024-07-12 11:10:46 | build: Check for --undefined-version support Gate the use of `--undefined-version` in the linker because it breaks on older GNU `ld`: https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=58272. | ||
| 621e3101 | 2024-07-16 07:00:53 | build: Require meson >= 0.58 This will enable f-strings and allow us to simplify the build file. | ||
| 32179d91 | 2024-03-01 08:44:35 | doc: Improve rules - Improved introduction - Added examples - Added RMLVO resolution process | ||
| 9944be7e | 2024-07-15 15:40:54 | nit: Fix typo | ||
| b5d3fa9e | 2024-07-12 10:36:33 | ci: Add ruff-format check - Add CI step - Fix errors | ||
| 809704e0 | 2024-07-12 10:35:17 | pre-commit: Use ruff-format instead of black | ||
| a4f62fcd | 2024-06-04 07:03:10 | doc (manuals): clean and expand apropos results Previously on FreeBSD/mandoc (probably affecting others), everything except xkbcli was being listed twice and wrapping on standard console in apropos because mdoc(7) names should not have spaces or be different than the title. Further, xkb is already parsed in search results by being in the name, so expand xkb to "X keyboard" so that they match for apropos keyboard. We did this already in xkbutils, which matches setxkbmap. These don't need to be quoted literals, and - doesn't need to be escaped, but I left them because there may be environments which are not to spec, but I'm happy to ammend this commit if that cleanup seems desirable. Co-authored-by: Ran Benita <ran@unusedvar.com> | ||
| 11f7ef2e | 2024-03-25 15:01:19 | test(x11): Warn for missing Xvfb program Xvfb is required for *running* X11 tests. We do not make it mandatory in the meson setup though, because we did not find a way to require a *run* time dependency. | ||
| 4052a645 | 2024-03-24 09:22:57 | doc: Fix contribution entry in NEWS | ||
| 7a31e358 | 2024-03-23 23:23:43 | Bump version to 1.7.0 Signed-off-by: Ran Benita <ran@unusedvar.com> | ||
| 9e2c3b7a | 2024-03-23 23:21:50 | Merge pull request #445 from wismill/release/1.7.0 Prepare for 1.7.0 | ||
| bc1547fb | 2024-03-01 15:33:55 | doc(news): Update for 1.7.0 release Signed-off-by: Ran Benita <ran@unusedvar.com> | ||
| d455e805 | 2024-03-24 05:07:18 | rules: fix variant index being ignored for layout index (#475) We accidentally ignored the variant index and used the layout index instead. In realistic rules they are always the same but don't have to be. | ||
| e4b20b91 | 2024-03-15 18:57:32 | doc(keymap): Improve types & symbols sections - Add a diagram to illustrate how key types work. - Add examples to explain the key types mappings. - Add note for using `preserve` to tweak shortcuts. - Improve the key statement section. | ||
| a4946488 | 2024-03-15 17:16:13 | doc(keymap): Fix quotes and apostrophe Straight apostrophe `'` and straight quotations marks `"` are typewriter legacy and should only be used in programming. apostrophe | ||
| 41bdd33a | 2024-03-14 11:39:38 | test(X11): Avoid running X11 tests in parallel On macOS, it seems to be responsible for the following error in the CI: ``` _XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created. ``` | ||
| 4975598c | 2024-03-14 09:09:15 | test(X11): Fix macOS build Xvfb wrapper: adapt ELF custom section to macOS. | ||
| 0ed9390c | 2024-03-14 09:08:55 | test(x11): Do not skip test when setup fails With the current setup, the tests passes even if there is an issue with the setup. X11 tests are already guarded with `enable-x11=true`, so there is no reason to skip these tests if we built the X11 support. Meson supports the GNU convention for exit code in tests: - 77: test skipped; already used in xkbcommon: `SKIP_TEST`. - 99: hard error/setup failure; introduced in this commit: `TEST_SETUP_FAILURE`. Meson reports setup failure as `ERROR`, while a test failure is reported as `FAIL`. In both cases it will make the CI fail, allowing us to correctly detect any errors. Fixed: - Use `TEST_SETUP_FAILURE` instead of `SKIP_TEST` for X11 setup failures. - Xvfb wrapper: Add verbosity for debugging. | ||
| 0f6efc47 | 2024-03-13 15:58:18 | ci(macOS): enable X11 It requires to install `xkeyboardconfig` and `xorg-server`. XQuartz cask was tested but did not work. | ||
| 346d6871 | 2024-03-13 15:29:04 | ci(macOS): Use brew for all deps and remove doc deps Install meson and pyyaml via brew, as this the standard way on macOS. Remove Doxygen and Graphviz dependencies, as we do not build documentation by default anymore. Signed-off-by: Rui Chen <rui@chenrui.dev> | ||
| 7977880a | 2024-03-13 15:29:04 | ci: Bump action deps to use nodejs 20 runtime Signed-off-by: Rui Chen <rui@chenrui.dev> | ||
| 23d772af | 2024-03-13 15:29:04 | ci: Use Python 3.12 Signed-off-by: Rui Chen <rui@chenrui.dev> | ||
| c2780ea1 | 2024-03-13 11:03:55 | meson: disable doc builds by default The only docs we build is the doxygen API and I reckon there's a near-zero amount of users who actually want these built locally instead of just browsing the online doc. Let's not build this by default, dropping the requirement on doxygen and speeding up the build by quite a fair bit. | ||
| 737706fe | 2024-03-07 10:08:16 | doc: Use towncrier to handle release notes Towncrier is a utility to produce useful, summarized news files. See: - https://pypi.org/project/towncrier/ - https://towncrier.readthedocs.io Custom configuration for xkbcommon: - New fragments are located in the `changes` directory. - 3 sections: - API: `changes/api` - Tools: `changes/tools` - Build System: `changes/build` - 3 news fragments: - Breaking changes: `.breaking` - New: `.feature` - Fixes: `.bugfix` `NEWS` is renamed to `NEWS.md` because the tool requires `.md` extension to write in markdown format. | ||
| ddbefb67 | 2024-03-07 14:20:42 | keysyms: Make locale explicit in scripts/update-keysyms | ||
| 53d9881e | 2024-03-05 10:28:11 | keysyms: Fix inconsistent case-insensitive name lookup `xkb_keysym_from_name` has inconsistent behavior when used with the flag `XKB_KEYSYM_CASE_INSENSITIVE`: ```c xkb_keysym_from_name("a", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_a; xkb_keysym_from_name("A", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_a; xkb_keysym_from_name("dead_a", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_dead_A; xkb_keysym_from_name("dead_A", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_dead_A; xkb_keysym_from_name("dead_o", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_dead_o; xkb_keysym_from_name("dead_O", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_dead_o; xkb_keysym_from_name("KANA_tsu", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_kana_tsu; xkb_keysym_from_name("KANA_TSU", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_kana_tsu; xkb_keysym_from_name("KANA_ya", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_kana_YA; xkb_keysym_from_name("KANA_YA", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_kana_YA; xkb_keysym_from_name("XF86Screensaver", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_XF86ScreenSaver; xkb_keysym_from_name("XF86ScreenSaver", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_XF86ScreenSaver; ``` So currently, if two keysym names differ only by case, then the lower-case *keysym* is returned, not the keysym corresponding to the lower-case keysym *name*. Indeed, `xkb_keysym_from_name` uses `xkb_keysym_is_lower` to test if a keysym is a lower-case keysym. Let’s look at the example for keysyms `a` and `A`: we get the keysym `a` not because its name is lower case, but because `xkb_keysym_is_lower(XKB_KEY_a)` returns true and `xkb_keysym_is_lower(XKB_KEY_A)` returns false. So the results are correct according to the doc: - Katakana is not a bicameral script, so e.g. `kana_ya` is *not* the lower case of `kana_YA`. - As for the `dead_*` keysyms, they are not cased either because they do not correspond to characters. - `XF86ScreenSaver` and `XF86Screensaver` are two different keysyms. But this is also very counter-intuitive: `xkb_keysym_is_lower` is not the right function to use in this case, because one would expect to check only the name, not the corresponding character case: ```c xkb_keysym_from_name("KANA_YA", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_kana_ya; xkb_keysym_from_name("XF86ScreenSaver", XKB_KEYSYM_CASE_INSENSITIVE) == XKB_KEY_XF86Screensaver; ``` Fixed by making the order of the keysyms names consistent in `src/ks_tables.h`: 1. Sort by the casefolded name: e.g. `kana_ya` < `kana_YO`. 2. If same casefolded name, then sort by cased name, i.e for ASCII: upper before lower: e.g `kana_YA` < `kana_ya`. Thus we now have e.g. `kana_YA` < `kana_ya` < `kana_YO` < `kana_yo`. The lookup logic has also been simplified. Added exhaustive test for ambiguous case-insensitive names. | ||
| abb6e588 | 2023-12-30 13:18:18 | tools: remove unused `#incldue <ctype.h>` We avoid this header due to its locale dependence. This include seems like a leftover in 44029221e8423f1ca93470952542a0517a208d42. Signed-off-by: Ran Benita <ran@unusedvar.com> | ||
| ba76ec16 | 2024-03-01 15:02:42 | Global default statement: Fix types Do not accept statements like garbage.level_name in types files Fix parser accepting clearly nonsensical type definitions like type "ONE_LEVEL" { garbage.modifiers = None; garbage.map[None] = Level1; garbage.level_name[Level1] = "Any"; }; and ignoring the garbage part. Co-authored-by: Mikhail Gusarov <dottedmag@dottedmag.net> Co-authored-by: Pierre Le Marre <dev@wismill.eu> | ||
| 24f69645 | 2024-03-01 15:02:42 | Global default statement: Fix symbols | ||
| 13b36a76 | 2024-03-01 15:02:41 | Global default statement: Improve code & error message - Simplify error handling. - Improve error message: add message ID and relevant quotes and try to standardize a bit. - Add proper doc for in the message registry. Note: Instead of testing the value of `expr.op`, we test if the argument `elem` of `ExprResolveLhs` is set: this allows us to catch also the error with `x.y[z]` rather than just `x.y` as previously. | ||
| 64614bcc | 2024-03-01 15:02:41 | doc: Fix message entries count It seems an error originating from 00e3058e7b027c3d698b24415fd2ac105cd72246A. Probably an unfortunate Git rebase or so. | ||
| 0d875ef5 | 2024-03-01 15:33:55 | NEWS: Fix missing contributors for 1.6.0 | ||
| 2c23852a | 2024-02-29 18:16:54 | Doc: Keymap format enhancement + misc - Add introduction to keymap and its components - Add a diagram to explain the relationships between RMLVO and KcCGST. - Add keywords & comments sections. - Improve Quick guide section in the index page. - Add links to User-configuration page. - Fix typos. | ||
| ebe4157d | 2024-02-28 01:27:10 | meson: inform ld to accept undefined symbols for version-scripts (#459) with lld 1.17, linking with a symbol map which contains symbols which actually do not exists now result in an error, which means the test in meson.build to check if -Wl,--version-script works always fails. because it tries to use the general map file with "int main(void) {}". Fixes #424 | ||
| 58d0bdc7 | 2024-02-23 15:09:07 | Update pre-commit | ||
| e325e65e | 2024-02-20 08:13:37 | Add test_unit to all tests Currently it only ensure we do not buffer `stdout`. | ||
| 51e08472 | 2024-02-14 11:29:19 | Fix a typo | ||
| e7570bcb | 2024-02-19 15:07:52 | test: disable stdout output buffering for our tests Hook this into test_create_context() so all the test immediately use it. | ||
| 5270a553 | 2024-02-14 11:41:12 | test: print the keyboard state as part of test_key_seq_va Makes it easier to debug modifier bugs. | ||
| be1c2f27 | 2024-02-14 11:15:35 | test: improve debugging output for test_key_seq Print the op too to make it easier to find which part in a long test_key_seq triggered an assertion and add some whitespace for nicer debugging output. | ||
| 883bac60 | 2024-02-14 11:26:10 | tools: constify the prefix in tools_print_keycode_state | ||
| d21645be | 2024-02-18 13:57:15 | xkbcomp: Require newline after !include line in rules files Rules file parser allows constructs like !include "foo" !include "bar" !layout = symbols This is most likely an oversight in original code. Closes #452 | ||
| 89ceb351 | 2024-02-14 10:23:15 | tools: add --verbose to interactive-evdev | ||
| ed2dc978 | 2024-02-08 07:41:39 | keysyms: Update using latest xorgproto This fixes a typo and improves comments. xorgproto commit: cd33097fc779f280925c6d6bbfbd5150f93ca5bc Relevant MR: https://gitlab.freedesktop.org/xorg/proto/xorgproto/-/merge_requests/84 | ||
| dd3e2140 | 2024-02-08 20:15:22 | interactive-evdev: reduce the space allocated for keysyms (#443) * interactive-evdev: reduce the printed space used for keysyms In commit 8cca3a7bfb185876994d6ec3d25cda88e5640a4d the buffer for the keysym was extended to accommodate for up to XKB_COMPOSE_MAX_STRING_SIZE bytes. This caused the printf to expand to the same width for the keysym alone, making the output less useful. Drop this back down to the same width it was before. | ||
| 1731c6b3 | 2024-02-05 11:55:39 | compose: Ensure we mmap only regular files Currently we do not check that the Compose files we try successively are *regular* files. This may result in an error, while we should just really just skip the corresponding path. Fixed by adding the new utily function `open_file`. | ||
| 54f073ce | 2024-02-05 11:11:11 | doc: remove obsolete HTML_TIMESTAMP warning: Tag 'HTML_TIMESTAMP' at line 44 of file '/home/whot/xorg/lib/libxkbcommon/build/Doxyfile' has become obsolete. | ||
| 8e26a8b2 | 2024-02-07 10:06:15 | interactive-evdev: align Usage and or in the help output | ||
| 382f6d2d | 2024-02-05 08:57:35 | Keysyms: Update using latest xorgproto For the sake of compatibility, this reintroduce some deleted keysyms and postpone the effective deprecation of others. xorgproto commit: fe12c5102762afcbf852e50dcbbdea2ef625570c Also added tests for some canonical names. | ||
| efdb05d1 | 2024-01-27 23:00:28 | parser: Do now allow the empty symbol declaration An empty element is allowed in SymbolsBody definition, so the following keymap is gramatically correct. ``` xkb_keymap { ... xkb_symbols "sym" { key <SPC> {, [Space] }; }; }; ``` However, the current parser crashes with the keymap due to null pointer access. This change fixes it by changing the parser not to allow it. | ||
| 43c9752d | 2024-01-16 11:04:59 | compose: Fix iterator for empty tables The current `xkb_compose_table_iterator_next` segfaults when used with an empty table. Indeed, in this case we initialize cursors in `xkb_compose_table_iterator_new` with the dummy node and the direction `NODE_LEFT`, but the dummy node is a leaf! Fixed by initializing with no cursors when the table is has no non-dummy nodes. | ||
| 1034f272 | 2023-12-05 18:43:41 | compose: Reduce xkb_compose_state_get_utf8 buffer `xkb_keysym_to_utf8` does not return a keysym name but its corresponding character, if defined. | ||
| 8cca3a7b | 2023-12-05 17:39:59 | compose: Add XKB_COMPOSE_MAX_STRING_SIZE Define the maximum size of a compose sequence result string explicit as a constant and use it everywhere to improve the code readability. | ||
| c1b5da1d | 2024-01-12 10:40:26 | tools: Fix bash completion permissions There is no need to give execution permission. It also creates an unnecessary work for packaging. Fixed by removing execution permission. | ||
| 806c5dc0 | 2024-01-10 17:17:48 | scripts: Fix update-headers command The file name misses an extension. | ||
| 5c7c7997 | 2023-12-14 15:18:24 | keysyms: Fix case mapping for 3 Latin 1 keysyms Fixed the upper case mappings for: - XKB_KEY_ydiaeresis - XKB_KEY_mu - XKB_KEY_ssharp Note: In Unicode, the upper case of “ß” (U+00DF) is *not* “ẞ” (U+1E9E) but “SS”. “ẞ” is reserved for text in capitals. | ||
| c88fe4b6 | 2023-12-07 12:21:53 | keysyms: Add tests with ICU Added tests of the simple case mappings when the ICU library is available. A warning is raised for missing mappings. Note: `xkb_keysym_is_upper` is interpreted as matching the disjunction of the Unicode character properties “Uppercase” or “Titlecase”. | ||
| 82305adb | 2023-12-05 18:23:02 | keysyms: Test keypad | ||
| b5a14083 | 2023-12-05 17:51:46 | keysyms: Fix xkb_keysym_is_modifier Currently `xkb_keysym_is_modifier` does not detect the following keysyms: - `XKB_KEY_ISO_Level5_Shift` - `XKB_KEY_ISO_Level5_Latch` - `XKB_KEY_ISO_Level5_Lock` Indeed, there is a mistake in the keysym interval that the code checks. The reason seems a confusing order of the keysyms in `xkbcommon-keysyms.h`: the current code has a comment “libX11 only goes up to XKB_KEY_ISO_Level5_Lock”, but in fact the modifiers keysyms are listed in a _semantic_ order in `xkbcommon-keysyms.h`, not in the increasing keysym _value_ order. Fixed by using the same (correct) code as libX11 and added some tests. | ||
| 0074baf4 | 2023-12-19 07:28:52 | keysyms: Add XKB_KEYSYM_NAME_MAX_SIZE for internal use Currently there is no indication of the maximum length of keysym names. This is statically known, so add the new *internal* following API: `XKB_KEYSYM_NAME_MAX_SIZE`. | ||
| f77c97bd | 2023-12-14 08:19:31 | keysyms: Test xkb_keysym_to_utf8 length | ||
| 817179d8 | 2023-12-14 08:19:28 | keysyms: Add xkb_keysym_iterator Add an efficient way to iterate over the assigned keysyms. Currently only provided for testing, so we guard it by `ENABLE_PRIVATE_APIS` in order to reduce the installed library. | ||
| 4f52d606 | 2023-12-14 09:16:55 | keysyms: Add xkb_keysym_is_assigned Add internal API `xkb_keysym_is_assigned` for tests, guarded by `ENABLE_PRIVATE_APIS` in order to avoid increasing the size of the installed library. | ||
| 82f138c6 | 2023-12-14 09:13:35 | keysyms: Add min and max assigned keysyms internal API Currently there is no direct way to know the minimum and maximum keysym values that are assigned, i.e. that have an explicit name or are Unicode keysyms. Introduce the new following internal API: - XKB_KEYSYM_MIN_ASSIGNED - XKB_KEYSYM_MAX_ASSIGNED - XKB_KEYSYM_MIN_EXPLICIT - XKB_KEYSYM_MAX_EXPLICIT - XKB_KEYSYM_COUNT_EXPLICIT Also add a bunch of tests to ensure consistant keysyms bounds. | ||
| 4a92f61b | 2023-12-14 08:19:16 | keysyms: Add Unicode constants Add the following constants in order to improve the code readability: - XKB_KEYSYM_UNICODE_OFFSET - XKB_KEYSYM_UNICODE_MIN - XKB_KEYSYM_UNICODE_MAX | ||
| 31ebe003 | 2023-12-19 09:15:14 | test: add a test for multiple keysyms (and some minimal docs) I couldn't find any reference to *how* the keymap format actually needs to look like if you want multiple keysyms per level. So let's add a test for it and a minimal documentation entry. | ||
| dd65950f | 2023-12-14 11:06:17 | Provide ssize_t for Windows `ssize_t` is not part of standard C but is specific to POSIX. | ||
| 7185b023 | 2023-09-24 09:40:08 | Add documentation to XkbToControl While some transformations are defined in the section “Interpreting the Control Modifier” of the XKB protocol, a lot are not. Documentation is scarce about the topic, so write down some context using the following sources: - https://en.wikipedia.org/wiki/Caret_notation#Use_in_software - https://www.vt100.net/shuford/terminal/dec_keyboards_news.txt - https://misc.openbsd.narkive.com/NvSWf6ax/which-key-shortcuts-are-safe-to-bind-and-some-q-s-about-history-and-os-diffs-re-ctrl-4-means - https://vt100.net/docs/vt220-rm/chapter3.html#T3-5 | ||
| 244128aa | 2023-12-14 01:44:00 | Update meson.build error message when enable-wayland enabled (#419) Let's drop the explicit versions, meson prints a message anyway that specifies the version we have vs the one we need. | ||
| 20329baf | 2023-11-23 09:30:57 | xkbcomp: Use `steal` for better memory handling | ||
| 20c6fa62 | 2023-11-21 08:50:38 | registry: Use `steal` for better memory handling | ||
| dbc187cf | 2023-11-21 08:46:06 | utils: Steal `steal` from libei Add excerpt of `util-mem.h` from libei defining the macro `steal`, in order to improve memory management and the code semantics. See: https://gitlab.freedesktop.org/libinput/libei/-/blob/38132d6fc5905e2d4361325fdded29a0dff990d6/src/util-mem.h#L92 | ||
| 0db1dc1c | 2023-11-26 10:51:18 | fix error with "-Wl,--gc-sections" | ||
| 7caf57f0 | 2023-11-16 09:29:31 | registry: Parse “popularity” attribute Previously the attribute “popularity” was completely ignored. It also did not respect the modified DTD, because its default value depends if we are currently parsing an “extras” rules file. Fixed: - Always parse the popularity attribute. - Change the DTD to reflect that the default value is implied. | ||
| cfcc7922 | 2023-11-07 12:58:46 | xkbcli-compose: Simplify locale options Current options to set the locale are convoluted: - An explicit locale *must* be given, while a sane default would be to use the user environment. - Then there are two options that were useful while testing locale handling: read environment variables or use `setlocale`. But the program has already called: ``` setlocale(LC_ALL, ""); ``` so it turns out the two options lead to the same results. Remove options `--locale-from-env` and `--locale-from-setlocale` and make the locale default to the user environment. | ||
| 0a577a09 | 2023-11-07 12:58:41 | xkbcli-compile-compose: Fix string result escaping Currently the result string is not escaped and may produce invalid results. Fixed by introducing an ad-hoc escape function and relative tests. | ||
| d826d70b | 2023-11-07 12:58:36 | xkbcli: Fix bash completion `compgen` expect command options list formatted as a newline-separated list. Add a missing newline when concatenating two lists. |