Repository navigation
OpenKey v2.0.9
Release v2.0.9 — built from commit 65cebcb
New Features
- OKLog file logger: Added new
OKLognamespace that writes detailed events to%APPDATA%\OpenKey\openkey.log(rotates at 1MB). Each log line includes timestamp, category, and message. Also mirrors to OutputDebugString for DebugView. Categories include:LIFECYCLE: OpenKey init/shutdownHOOK: hook install, remove, death detection, reinstallTOGGLE: VI mode on/offFOREGROUND: app focus changesSESSION: screen lock/unlock
Improvements
- Hook heartbeat: Added
_hookHeartbeatvolatile updated on every keyboard callback. This is groundwork for detecting "zombie hooks" (handle still valid but Windows silently removed). - Hook health-check now runs every 1s: Reduced from 60s to 1s for faster detection of silently-removed hooks.
Fixes
-
Fix intermittent hook removal causing "need retoggle" issue: Previously,
keyboardHookProcesscalledSendMessageTimeout()on every keystroke to check IME status. On a busy system, this could push the callback over Windows' ~300ms hook timeout budget, causingWH_KEYBOARD_LLto be silently removed. The fix caches the IME state and only re-queries when foreground changes or after 500ms. -
Fix circumflex transform when another vowel already has tone/horn: Added guard in
insertAOE()to skip circumflex transform if any other vowel already hasTONE_MASKorTONEW_MASK. Fixeschưa+a→chưâ(wrong) →chưaa(correct). -
Fix gi- cluster in old orthography: Added missing rule in
handleOldMark()forgi-cluster. Fixesgiacs→giác(was incorrectly producinggiac). -
Cache GetForegroundWindow/ImmGetDefaultIMEWnd per foreground session: Reduces syscalls on every keystroke.
Full Changelog: v2.0.8...v2.0.9