Releases: Adam-D-Lewis/eitype
0.2.2
Bug-fix release.
Make EiType Send + Sync (previously #[pyclass(unsendable)]). Callers that cache a typer and reuse it across threads — e.g. a ThreadPoolExecutor — no longer trip PyO3's "unsendable, but sent to another thread" assertion, which surfaced as an uncatchable PanicException and silently dropped text. The xkb keymap/state are now serialized behind an internal lock, so the type is thread-safe on GIL-enabled and free-threaded interpreters and from the Rust API.
See #20.
v0.2.1
Bug fixes
-
Non-Latin characters now type correctly. Cyrillic, Greek, Hebrew, Arabic, Thai, Hangul, and Latin Extended characters previously failed with
Character not found in keymapeven when the right layout was selected.keysym_to_charnow delegates toxkb_keysym_to_utf32, which handles every legacy keysym block. (#8, #12) -
Characters at AltGr / level 3+ now type correctly. Layouts like us-intl, de, fr, es, EurKEY put characters such as
ä,Ä,é,ñat xkb level 2/3, reachable only via AltGr (or AltGr+Shift). The previous code matched the keysym but tapped the key without the AltGr modifier, silently producing the wrong character (e.g.qinstead ofä) with no error. The lookup now reports the level andtype_charpresses the modifiers required to reach it. (#15) -
AltGr resolution honors xkb-options. Modifier keycodes are now resolved from the active keymap rather than hardcoded, so layouts with
lv3:ralt_alt,lv3:menu_switch,lv3:caps_switch, etc. — where ISO_Level3_Shift lives on a key other than Right Alt — work correctly.
Known limitations
- The
--layout/--variant/--modelflags only affect client-side keycode selection; they don't change how the EI server interprets events. See #17. - Cross-layout typing (typing characters from layouts not currently active) remains unsupported.
v0.2.0
What's New
Auto-detect active keyboard layout
eitype now automatically detects the active keyboard layout group via the EI protocol. When EI detection isn't available, compositor-specific fallbacks are used for GNOME (gsettings), KDE (qdbus), and Sway (swaymsg). This eliminates the need to manually specify --layout-group in most cases.
Fix for layout-independent keys at non-zero layout index
Fixed an issue where layout-independent keys (Space, Return, Backspace, Tab, Escape, and others) were not found when the active keyboard layout was at a non-zero index. These keys are now correctly resolved regardless of the active layout group.
Full Changelog: 0.1.2...0.2.0
v0.1.2
Full Changelog: 0.1.1...0.1.2
v0.1.1
- Update PyO3 to 0.27 for full Python 3.14 support
- Build wheels for Python 3.10, 3.11, 3.12, 3.13, and 3.14
v0.1
What's Changed
- Build Rust CLI tool for emulated input by @Adam-D-Lewis in #1
- Add retry logic for EAGAIN during flush by @Adam-D-Lewis in #6
New Contributors
- @Adam-D-Lewis made their first contribution in #1
Full Changelog: https://github.com/Adam-D-Lewis/eitype/commits/0.1