v0.6.0 — Major Feature Release
Full changelog from v0.5.1. Jump from v0.5.1 to v0.6.0 (skipped v0.8.0 which was renamed for semantic versioning).
New Features
Preference Dialog
- 6-tab GTK3 settings UI (General, Model, Engine, Window, User Dictionary, Shortcuts) — accessible from IBus menu or via
ibus-engine-handwrite-chinese --setup
On-Demand Model Download
- Download PP-OCRv6 models (tiny/small/medium) directly from the preference dialog
- Automatic
pkexecpermission elevation for system-wide install - Auto-download prompt when selecting a missing model tier
Configurable Keyboard Shortcuts
- Customize all keybindings (ESC, Enter, Backspace, page up/down, cycle theme, open settings) via the Shortcuts tab
User Dictionary
- Per-user stroke→character learning via local SQLite database
- Boosts recognized characters you select in future recognition
TOML Configuration System
- All settings stored in
~/.config/ibus-handwrite-chinese/config.toml - Overridable via
IBUS_HANDWRITE_*environment variables - Settings: theme, log level, model tier, stroke width, window dimensions, momentum, keybindings, user dict options
Light Theme & HiDPI Support
- Light/dark/auto theme cycling
- HiDPI-aware rendering with per-monitor scale factor
Structured Logging
- Converted to Python
loggingmodule withRotatingFileHandler - Configurable log level and log path via preference dialog
SHA256 Model Verification
- SHA256 integrity check on downloaded PP-OCRv6 models
- Fallback download from mirror when primary source fails
Bug Fixes (13 total)
- Dict index corruption:
line.strip()stripped U+3000 (ideographic space) from dict entries, shifting character indices. Fixed withline.rstrip('\n'). - Confidence pooling:
np.meanaveraged across all CTC time steps including blank frames, diluting confidence by ~10×. Fixed withnp.max(MAX pooling). - Stroke line width: Increased from 6px to 8px to match training data distribution.
- ESC key reliability & Enter pass-through: ESC state machine refined — Enter only commits when candidates exist, passes through otherwise.
--testmode keyboard focus: Fixedset_accept_focus(False)blocking GTK keyboard events.- Firefox ESC compatibility: ESC now handled regardless of
IBUS_RELEASE_MASKpress/release state; 150ms debounce prevents double-fire. - ESC pause when no text field focused: Removed timer, set
accept_focus(True)indo_enable(). - Auto-pause on non-text area focus loss: Added
focus-out-eventhandler with 50ms debounce for Firefox title bar / desktop clicks. present()skipped on second activation: Always callpresent()regardless of_focused_since_enable.- X11 property flush timing: Call
set_accept_focus(True)indo_enable()beforepresent()so X11 flushes the WM_HINTS property. - Model download permission error: Download to
/tmpinstead of root-owned dir; usepkexec cpfallback. - Display stroke width ignored preference: Cairo drawing now reads
CONFIG["engine"]["stroke_width"]instead of hardcoding. - Config cleanup: Removed dead keys
model.variantandengine.max_strokes.
Packaging
- Debian/Ubuntu/Mint
.debpackage - Fedora/openSUSE
.rpmpackage - Arch Linux PKGBUILD (reference in
packaging/) - Cross-distro bootstrap:
bash <(curl -s .../bootstrap.sh)auto-detects distro
CI/CD
- 21-job CI matrix: lint, bootstrap, install-deps, GTK write tests across Debian 11/12, Ubuntu 22.04/24.04, Fedora 40/41/latest, Arch Linux, openSUSE Leap/Tumbleweed
- Automated release: builds .deb, .rpm, source tarball, tests packages on all distros, uploads to GitHub Release
Recognition Accuracy
| Metric | Result |
|---|---|
| Top-1 accuracy | 40/40 (100%) |
| Average confidence | 94.97% |
| Similar pairs tested | 7 groups, 14/14 correct |
Validated with 40 real handwriting characters including 7 similar-pair groups (土/士, 未/末, 日/曰, 人/入, 大/太, 已/己, 上/下).
Full changelog: see README.md