|
60228356
|
2024-10-07T10:42:27
|
|
symbols: Add message ID for incompatible keysyms and actions counts
|
|
fdf2c525
|
2024-10-08T19:43:30
|
|
actions: Add support for multiple actions per level
This makes 1 keysym == 1 action holds also for multiple keysyms per level.
The motivation of this new feature are:
- Make multiple keysyms per level more intuitive.
- Explore how to fix the issue with shortcuts in multi-layout settings
(see the xkeyboard-config issue[^1]). The idea is to use e.g.:
```c
key <LCTL> {
symbols[1] = [ {Control_L, ISO_First_Group } ],
actions[1] = [ {SetMods(modifiers=Control), SetGroup(group=-4) } ]
};
```
in order to switch temporarily to a reference layout in order to get
the same shortcuts on every layout.
When no action is specified, `interpret` statements are used to find
an action corresponding for *each* keysym, as expected.
For an interpretation matching Any keysym, we may get the same
interpretation for multiple keysyms. This may result in unwanted
duplicate actions. So set this interpretation only if no previous
keysym was matched with this interpret at this level, else set the
default interpretation.
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:
- `SetMods` + `SetGroup`: ok
- `SetMods` + `SetMods`: error
- `SetMods` + `LockMods`: error
- `SetMods` + `LockGroup`: ok
[^1]: https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/issues/416
|
|
31c6d866
|
2024-10-08T18:39:00
|
|
symbols: Min. 2 keysyms in level list
Do not allow `{ a }` when a single `a` suffices.
|
|
772ac0c4
|
2024-09-23T11:02:35
|
|
keymap: Rename keysyms field in xkb_level
The current field `u` (short for “union”) is not very descriptive.
Next commit will add multiple actions per level, so let’s rename the
keysym field to `s` (short for “symmbols”).
|
|
7c4c718b
|
2024-09-30T06:13:38
|
|
Allow only the first group in symbols sections when using RMLVO
Currently `xkb_keymap_num_layouts` may return a greater number than the
number of layouts configured using RMLVO, because we allow symbols
sections to define various groups per key.
This is unintuitive and kind of buggy: groups should be added via rules
by setting an explicit `:n` modifier.
Fix: when parsing a keymap using RMLVO resolution:
- Get the expected layouts count from the resulting KcCGST.
- Drop the groups after the first one in included symbols sections. This
will ensure that a symbol section can only define one group per key.
Notes:
- Compiling a keymap string directly is unaffected.
- RMLVO resolution may still produce more groups than the input layouts.
Indeed, some legacy rules in xkeyboard-config rely on this to insert
automatically a US layout before the given non-Latin one, resulting
in two layouts while only one was given.
|
|
948f7a59
|
2024-10-09T08:34:27
|
|
symbols: Skip interprets only for groups with explicit actions
Previously setting explicit actions for a group in symbols files made
the parser skip compatibility interpretations for the corresponding
*whole* key, so the other groups with *no* explicit actions could result
broken on some levels.
In the following example, `<RALT>` would have an action on group 2,
because it is explicit, but none on group 1 because interpretation are
also skipped there as a side effect:
```c
key <RALT> {
symbols[1]= [ ISO_Level3_Shift ],
symbols[2]= [ ISO_Level3_Shift ],
actions[2]= [ SetMods(modifiers=LevelThree) ]
};
```
Fixed by skipping interpretations *only* for groups with explicit actions.
We still set `key->explicit |= EXPLICIT_INTERP` if at least one group
has explicit actions. In such case, when dumping a keymap, we will
write explicit actions for *all* groups, in order to ensure that X11 and
previous versions of libxkbcommon can parse the keymap as intended. One
side effect is that no interpretation will be run on this key anymore,
so we may have to set some extra fields explicitly: repeat, virtualMods.
Thus the previous example would be bumped as:
```c
key <RALT> {
repeat= No,
symbols[1]= [ ISO_Level3_Shift ],
actions[1]= [ SetMods(modifiers=LevelThree,clearLocks) ],
symbols[2]= [ ISO_Level3_Shift ],
actions[2]= [ SetMods(modifiers=LevelThree) ]
};
```
|
|
3ed763c3
|
2024-10-09T07:11:13
|
|
test: Add strip_lines and uncomment to text utils
These allow us to store comments in files (especially keymaps), that
can then be removed (e.g. to compare with output) or uncommented (e.g.
to activate an optional line).
|
|
929a485f
|
2024-10-08T12:52:53
|
|
symbols: Fix too liberal parsing of keysyms lists
Currently we are too liberal when parsing symbols lists: e.g.
`[{a,{b}}]` is parsed as `[{a,b}]` but it should be rejected.
|
|
7a8772ba
|
2024-10-08T07:13:39
|
|
ci: Fix macOS
- Bump macOS image, as macOS 12 has been deprecated.
See: https://github.com/actions/runner-images?tab=readme-ov-file#available-images
- Install PyYaml via Pip, as it has been disabled in Brew.
See: https://docs.brew.sh/Homebrew-and-Python#pep-668-python312-and-virtual-environments
- Fix libxml2 not linked.
|
|
1d897502
|
2024-10-04T08:09:28
|
|
keysyms: Update using latest xorgproto
xorgproto commit: d7ea44d5f04cc476dee83ef439a847172f7a6bd1
Relevant MR: https://gitlab.freedesktop.org/xorg/proto/xorgproto/-/merge_requests/91
|
|
bf1ea088
|
2024-09-30T11:26:39
|
|
Fix typo in darray_enumerate_from
|
|
4ea9d431
|
2023-11-16T17:12:03
|
|
rules: Add support for :all qualifier
Some layout options require to be applied to every group to maintain
consistency (e.g. a group switcher). Currently this must be done manually
for all layout indexes. This is error prone and prevents the increase of
the maximum group count.
This commit introduces the `:all` qualifier for KcCGST values. When a
rule with this qualifier is matched, it will expands the qualified
value (and its optional merge mode) for every layout, e.g.
`+group(toggle):all` (respectively `|group(toggle)`) would expand to
`+group(toggle):1+group(toggle):2` (respectively
`|group(toggle):1|group(toggle):2`) if there are 2 layouts, etc.
If there is no merge mode, it defaults to *override* `+`, e.g. `x:all`
expands to `x:1+x:2+x:3` for 3 layouts.
Note that only the qualified *value* is expanded, e.g. `x+y:all` expands
to `x+y:1+y:2` for 2 layouts.
`:all` can be used in combination with special layout indexes. Since
this can lead to an unexpected behaviour, a warning will be raised.
|
|
cdafba4f
|
2024-09-24T15:23:16
|
|
rules: Add support for index ranges
There is a lot of repetition in the current rules files provided by
xkeyboard-config, because the MLVO mappings need to match on the exact
layout/variant index. This also prevents to increase the number of
maximum groups, because it does not scale.
We introduces the following new special layout/variant indexes:
- “single”: matches a single layout; same as with no index.
- “first”: matches the first layout/variant, no matter how many layouts
are in the RMLVO configuration. It allows to merge `layout` and
`layout[1]` patterns.
- “later”: matches all but the first layout. This is an index range.
- “any”: matches layout at any position. This is an index range.
We also introduces the new `%i` expansion, which correspond to the index
of the matched layout in a mapping with an index range. Example:
layout[later] = symbols
my_layout = +my_symbols:%i
* = +%l[%i]:%i
Let’s have a look at concrete examples from xkeyboard-config:
! model layout = symbols
* * = pc+%l%(v)
! model layout[1] = symbols
* * = pc+%l[1]%(v[1])
! model layout[2] = symbols
* * = +%l[2]%(v[2])
! model layout[3] = symbols
* * = +%l[3]%(v[3])
! model layout[4] = symbols
* * = +%l[4]%(v[4])
! layout option = symbols
* grp:toggle = +group(toggle)
! layout[1] option = symbols
* grp:toggle = +group(toggle):1
! layout[2] option = symbols
* grp:toggle = +group(toggle):2
! layout[3] option = symbols
* grp:toggle = +group(toggle):3
! layout[4] option = symbols
* grp:toggle = +group(toggle):4
With this commit we can now simplify it into:
! model layout[first] = symbols
* * = pc+%l[%i]%(v[%i])
! model layout[later] = symbols
* * = +%l[%i]%(v[%i]):%i
! layout[any] option = symbols
* grp:toggle = +group(toggle):%i
The latter rule will work even if we increase XKB_MAX_GROUPS, whereas
the former would require to add the missing entries for the new groups.
In order to maintain consistent rules, we now disallow layout and
variant to have different indexes. For example, the following mapping
are now invalid:
- layout variant[1]
- layout[1] variant[2]
- layout[1] variant
- layout[first] variant[1]
- layout[first] variant
- layout variant[any]
- etc.
|
|
076c60df
|
2024-09-25T16:21:05
|
|
rules: Ensure same number of layouts and variants
|
|
c67ec170
|
2024-09-25T14:59:23
|
|
include: Use constants for merge mode prefixes
This will make their semantics explicit.
|
|
a898bc81
|
2024-09-25T06:47:23
|
|
logging: Added new error messages ID for keymap and rules
|
|
1b83771f
|
2024-09-24T22:48:01
|
|
logging: Use messages ID in registry
|
|
8b45556d
|
2024-09-24T21:51:14
|
|
logging: Make log_err_func* use a message ID
|
|
ba896935
|
2024-09-24T21:28:12
|
|
logging: Make scanner_warn use a message ID
|
|
c8bd57dd
|
2024-09-24T21:20:41
|
|
logging: Make scanner_err use a message ID
|
|
fdcd458c
|
2024-09-24T21:20:29
|
|
nit: Format files
|
|
a600c36d
|
2024-09-16T18:11:57
|
|
compose: Use is_absolute to test absolute paths
|
|
7697c712
|
2024-09-16T16:09:11
|
|
rules: Resolve relative include statements using XKB paths
Contrary to keymap files, the `! include` statement in rules does not
lookup include paths added to `xkb_context`. So it is not possible e.g.
to import another file in the same folder without using an absolute path.
- Added path utils: `is_absolute(path)`.
- Added XKB paths lookup to enable e.g. `! include evdev` to work.
- Added test.
|
|
0cd1087a
|
2024-09-12T01:43:56
|
|
xkbcli how-to-type: Enhance arguments parsing & doc
Currently the positional parameter of the CLI is either a Unicode code
point or a keysym. However their respective format is not documented.
It turns out that there are multiple issues due to the use of `strtol`:
- Code points can be parsed as octal, decimal and hexadecimal, while
keysyms can only be parsed as hexadecimal. Some programs outputs
keysyms in their decimal form (e.g. `wev`) so it is worth to bring
symmetry with code points.
- Octal format is unusual for both and is triggered by leading zeros,
which is unintuitive in this context.
- `U+NNNN` format is the standard format for Unicode code points but is
not supported.
- Plain characters are not supported, e.g.: a, é, ß, Æ, γ, 🦆, etc.
Although this is probably the easiest format for most users.
Fixed the issues above:
- Allow the code point to be passed exactly in the following formats:
- Literal character (requires UTF-8 character encoding of the terminal);
- Decimal number;
- Hexadecimal number: either `0xNNNN` or `U+NNNN` (any digit count)
- Allow the keysym to be passed exactly in the following formats:
- Decimal number;
- Hexadecimal number: `0xNNNN` (any digit count);
- Name.
- Improve both `--help` message and manual page.
|
|
98dee225
|
2024-09-12T16:52:40
|
|
Add UTF-8 to UTF-32 decoding
Add internal functions to convert UTF-32 to UTF-8, with corresponding
tests.
|
|
b5f07797
|
2024-09-23T07:28:02
|
|
scripts: Improve messages registry update
|
|
44df6eee
|
2024-09-23T07:27:48
|
|
Add new warnings for deprecated keysyms
Add 2 new warnings:
- Deprecated keysym name (typo, historical alias, etc.);
- Deprecated keysym (all names and forms).
Guard deprecated keysym tests with verbosity level ≥2, so they are
run only when actually needed.
|
|
378badab
|
2024-09-19T17:30:55
|
|
Add function xkb_keysym_is_deprecated
This function allow to check whether a keysym is deprecated, based
on the keysym and optionally its name.
The generation of the table of deprecated keysyms relies on the
rules described in `xkbcommon-keysyms.h`.
The `ks_table.h` is now generated deterministically by setting
explicitly the random seed to a constant. This will avoid noisy
diffs in the future.
|
|
f6f30c6b
|
2023-09-25T12:07:58
|
|
Add benchark for compile-keymap
Implement `tasty-bench` method:
1. Set n = 1.
2. Measure execution time t_n of n iterations and execution time t_2n
of 2n iterations.
3. Find t which minimizes deviation of (n·t, 2·n·t) from (t_n, t_2n),
namely t = (t_n + 2·t_2n)/5n.
4. If deviation is small enough (see --stdev CLI parameter), return t
as a mean execution time.
5. Otherwise set n = 2·n and jump back to Step 2.
See: https://hackage.haskell.org/package/tasty-bench
|
|
e4269202
|
2024-09-20T10:41:00
|
|
keysyms: Fix off-by-one XKB_KEYSYM_NAME_MAX_SIZE
The constant did not account for the terminating `NULL` byte and this was
sadly not caught by the tests.
Fixed the invalid value, the corresponding script and the tests.
|
|
05ba96db
|
2024-08-20T16: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-02T14:18:21
|
|
Add XKB_LED_NAME_COMPOSE and XKB_LED_NAME_KANA
|
|
5e539bf0
|
2024-07-08T09:19:00
|
|
compose: Make iteration API faster
New implementation without explicit direction
|
|
8bc426e2
|
2024-07-30T14: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-01T10:57:40
|
|
compose: Add roundtrip test parse/dump
|
|
d4deb755
|
2024-09-01T09: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-01T08: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-04T16: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-30T19: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`.
|
|
573583e3
|
2024-07-16T10: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-16T10: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-16T10: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-16T10: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-16T10: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-16T10: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".
|
|
a0a59d9f
|
2024-07-16T10: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-16T11: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-16T10: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.
|
|
e83d08dd
|
2024-02-23T17: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-23T17: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-23T17: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-23T17:10:14
|
|
keysyms: Add benchmark for case mapping functions
|
|
addf73c5
|
2024-07-12T09: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-12T11: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-16T07:00:53
|
|
build: Require meson >= 0.58
This will enable f-strings and allow us to simplify the build file.
|
|
32179d91
|
2024-03-01T08:44:35
|
|
doc: Improve rules
- Improved introduction
- Added examples
- Added RMLVO resolution process
|
|
9944be7e
|
2024-07-15T15:40:54
|
|
nit: Fix typo
|
|
b5d3fa9e
|
2024-07-12T10:36:33
|
|
ci: Add ruff-format check
- Add CI step
- Fix errors
|
|
809704e0
|
2024-07-12T10:35:17
|
|
pre-commit: Use ruff-format instead of black
|
|
a4f62fcd
|
2024-06-04T07: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-25T15: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-24T09:22:57
|
|
doc: Fix contribution entry in NEWS
|
|
7a31e358
|
2024-03-23T23:23:43
|
|
Bump version to 1.7.0
Signed-off-by: Ran Benita <ran@unusedvar.com>
|
|
9e2c3b7a
|
2024-03-23T23:21:50
|
|
Merge pull request #445 from wismill/release/1.7.0
Prepare for 1.7.0
|
|
bc1547fb
|
2024-03-01T15:33:55
|
|
doc(news): Update for 1.7.0 release
Signed-off-by: Ran Benita <ran@unusedvar.com>
|
|
d455e805
|
2024-03-24T05: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-15T18: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-15T17: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-14T11: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-14T09:09:15
|
|
test(X11): Fix macOS build
Xvfb wrapper: adapt ELF custom section to macOS.
|
|
0ed9390c
|
2024-03-14T09: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-13T15: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-13T15: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-13T15:29:04
|
|
ci: Bump action deps to use nodejs 20 runtime
Signed-off-by: Rui Chen <rui@chenrui.dev>
|
|
23d772af
|
2024-03-13T15:29:04
|
|
ci: Use Python 3.12
Signed-off-by: Rui Chen <rui@chenrui.dev>
|
|
c2780ea1
|
2024-03-13T11: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-07T10: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-07T14:20:42
|
|
keysyms: Make locale explicit in scripts/update-keysyms
|
|
53d9881e
|
2024-03-05T10: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-30T13: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-01T15: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-01T15:02:42
|
|
Global default statement: Fix symbols
|
|
13b36a76
|
2024-03-01T15: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-01T15:02:41
|
|
doc: Fix message entries count
It seems an error originating from 00e3058e7b027c3d698b24415fd2ac105cd72246A.
Probably an unfortunate Git rebase or so.
|
|
0d875ef5
|
2024-03-01T15:33:55
|
|
NEWS: Fix missing contributors for 1.6.0
|
|
2c23852a
|
2024-02-29T18: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-28T01: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-23T15:09:07
|
|
Update pre-commit
|
|
e325e65e
|
2024-02-20T08:13:37
|
|
Add test_unit to all tests
Currently it only ensure we do not buffer `stdout`.
|
|
e7570bcb
|
2024-02-19T15: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-14T11:41:12
|
|
test: print the keyboard state as part of test_key_seq_va
Makes it easier to debug modifier bugs.
|
|
be1c2f27
|
2024-02-14T11: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-14T11:26:10
|
|
tools: constify the prefix in tools_print_keycode_state
|
|
51e08472
|
2024-02-14T11:29:19
|
|
Fix a typo
|
|
d21645be
|
2024-02-18T13: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-14T10:23:15
|
|
tools: add --verbose to interactive-evdev
|
|
ed2dc978
|
2024-02-08T07: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-08T20: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-05T11: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-05T11: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.
|