b5586a6c42
We currently use strcasecmp, which is locale-dependent. In particular, one well-known surprise even if restricted just ASCII input is found in the tr_TR (Turkish) locale, see e.g. https://msdn.microsoft.com/en-us/library/ms973919.aspx#stringsinnet20_topic5 We have known to avoid locale-dependent functions before, but in this case, we forgot. Fix it by implementing our own simple ASCII-only strcasecmp/strncasecmp. Might have been possible to use strcasecmp_l() with the C locale, but went the easy route. Side advantage is that even this non-optimized version is faster than the optimized libc one (__strcasecmp_l_sse42) since it doesn't need to do the locale stuff. xkb_keysym_from_name(), which uses strcasecmp heavily, becomes faster, and so for example Compose file parsing, which uses xkb_keysym_from_name() heavily, becomes ~20% faster. Resolves https://github.com/xkbcommon/libxkbcommon/issues/42 Signed-off-by: Ran Benita <ran234@gmail.com> |
||
---|---|---|
bench | ||
doc | ||
m4 | ||
src | ||
test | ||
xkbcommon | ||
.autom4te.cfg | ||
.gitignore | ||
.travis.yml | ||
.uncrustify.cfg | ||
Android.mk | ||
LICENSE | ||
Makefile.am | ||
NEWS | ||
PACKAGING | ||
README.md | ||
autogen.sh | ||
configure.ac | ||
makekeys.py | ||
xkbcommon-uninstalled.pc.in | ||
xkbcommon-x11-uninstalled.pc.in | ||
xkbcommon-x11.map | ||
xkbcommon-x11.pc.in | ||
xkbcommon.map | ||
xkbcommon.pc.in |
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.
Quick Guide
See Quick Guide.
Building
libxkbcommon is built the typical autoconf way:
./autogen.sh
make
To build for use with Wayland, you can disable X11 support while still using the X11 keyboard configuration resource files thusly:
./autogen.sh --disable-x11 \
--with-xkb-config-root=/usr/share/X11/xkb \
--with-x-locale-root=/usr/share/X11/locale
make
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: http://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 http://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 through github.
Bug reports are also welcome, and may be filed either at Bugzilla https://bugs.freedesktop.org/describecomponents.cgi?product=libxkbcommon or Github https://github.com/xkbcommon/libxkbcommon/issues
The maintainers are
- Daniel Stone daniel@fooishbar.org
- Ran Benita ran234@gmail.com
Credits
Many thanks are due to Dan Nicholson for his heroic work in getting xkbcommon off the ground initially.