• Show log

    Commit

  • Hash : cdafba4f
    Author : Pierre Le Marre
    Date : 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.
    

  • Properties

  • Git HTTP https://git.kmx.io/kc3-lang/libxkbcommon.git
    Git SSH git@git.kmx.io:kc3-lang/libxkbcommon.git
    Public access ? public
    Description

    keymap handling library for toolkits and window systems

    Users
    thodg_m kc3_lang_org thodg_w www_kmx_io thodg thodg_l
    Tags

  • README.md

  • libxkbcommon

    libxkbcommon is a keyboard keymap compiler and support library which processes a reduced subset of keymaps as defined by the XKB (X Keyboard Extension) specification. It also contains a module for handling Compose and dead keys and a separate library for listing available keyboard layouts.

    Quick Guide

    Building

    libxkbcommon is built with Meson:

    meson setup build
    meson compile -C build
    meson test -C build # Run the tests.

    To build for use with Wayland, you can disable X11 support while still using the X11 keyboard configuration resource files thusly:

    meson setup build \
        -Denable-x11=false \
        -Dxkb-config-root=/usr/share/X11/xkb \
        -Dx-locale-root=/usr/share/X11/locale
    meson compile -C build

    API

    While libxkbcommon’s API is somewhat derived from the classic XKB API as found in X11/extensions/XKB.h and friends, it has been substantially reworked to expose fewer internal details to clients.

    See the API Documentation.

    Dataset

    libxkbcommon does not distribute a keymap dataset itself, other than for testing purposes. The most common dataset is xkeyboard-config, which is used by all current distributions for their X11 XKB data. More information on xkeyboard-config is available here:

    https://www.freedesktop.org/wiki/Software/XKeyboardConfig

    The dataset for Compose is distributed in libX11, as part of the X locale data.

    Relation to X11

    See Compatibility notes.

    Development

    An extremely rudimentary homepage can be found at

    https://xkbcommon.org

    xkbcommon is maintained in git at

    https://github.com/xkbcommon/libxkbcommon

    Patches are always welcome, and may be sent to either

    <xorg-devel@lists.x.org> or <wayland-devel@lists.freedesktop.org>

    or in a GitHub pull request.

    Bug reports (and usage questions) are also welcome, and may be filed at GitHub.

    The maintainers are

    Credits

    Many thanks are due to Dan Nicholson for his heroic work in getting xkbcommon off the ground initially.