Fixed
- Picker
pick_keymapignores Alt and other modifier keys —vim.obsidian.pick_keymap()only recognized theC-(Ctrl) modifier prefix. Key specs withA-(Alt),S-(Shift),M-(Meta), or modifier combinations likeC-A-jwere silently ignored. Root cause:matchesPickerKey()had a simpleC-check and fell through to plain key matching for everything else. Replaced with a proper modifier parser (parsePickerKeySpec) that strips all modifier prefixes and validates each against the correspondingKeyboardEventflags. (#159)- Plugin:
src/picker/types.ts(rewrotematchesPickerKeywith full modifier support)
- Plugin:
- Global workspace navigation missing Shift and Meta modifier normalization —
normalizeKeyEvent()only produced<C-x>and<A-x>notation.<S-Tab>,<M-f>, and modifier combinations like<C-S-Tab>or<C-A-f>were never generated, so user-defined global mappings with those prefixes could not match keyboard events. Added<S->normalization for special keys (Tab, Enter, Space, etc.),<M->for Meta-only, and combined prefix support in canonical order (C-,A-,M-,S-).- Plugin:
src/workspace/global-mapping-registry.ts(rewrotenormalizeKeyEventwith full modifier prefix generation)
- Plugin:
- Hint mode missing
altKeyin result —waitForHintKey()capturedctrlKey,metaKey, andshiftKeyfrom the label selection event but discardedaltKey. AddedaltKeyto theHintResultinterface and all three resolve sites, making Alt-modified hint actions possible for future extensions.- Plugin:
src/ui/hint-mode.ts(addedaltKeytoHintResultinterface and all resolve sites)
- Plugin:
- Subword motions skip non-ASCII Unicode characters —
w/b/e/gewith subword motions enabled skipped Arabic, CJK, accented Latin, and other non-ASCII text instead of stopping at word boundaries. Root cause:isWordChar()used/[A-Za-z0-9]/andSUBWORD_REonly matched ASCII letter patterns. Fixed by replacing all character classification with Unicode property escapes (\p{L},\p{Lu},\p{Ll},\p{N},\p{M}) and adding a([\p{L}\p{M}]+)alternative for caseless scripts (Arabic, Hebrew, CJK, Devanagari). The long-line fallback regex (WORD_SEGMENT_RE) was also updated. (#160)- Plugin:
src/util/subword.ts(Unicode-awareSUBWORD_REandisWordChar()) - Plugin:
src/motions/subword.ts(Unicode-awareWORD_SEGMENT_REfallback)
- Plugin:
- EasyMotion word targets skip non-ASCII Unicode characters — EasyMotion
w/b/eword motions did not generate jump labels on Arabic, CJK, or other non-ASCII words. Root cause:WORD_START_REused\b\wandWORD_CHARS_REused\w+, both ASCII-only. Fixed with[\p{L}\p{M}\p{N}]+using theuflag. (#160)- Plugin:
src/easymotion/targets.ts(Unicode-awareWORD_START_REandWORD_CHARS_RE)
- Plugin:
Tests
- 29 unit tests in
test/unit/picker/picker-keymap.test.tsformatchesPickerKeymodifier support (Alt, Shift, Meta, combinations, multi-spec matching) (#159) - 4 e2e tests in
test/specs/picker-modifier-keys.e2e.tsfor Alt-j/Alt-k picker navigation viapick_keymapLua config (#159) - 21 unit tests in
test/unit/global-mapping-registry.test.tsfornormalizeKeyEventmodifier normalization (Ctrl, Alt, Meta, Shift, special keys, combinations) - 6 unit test cases in
test/unit/subword.test.tsfor Unicode boundary/end detection (Arabic, mixed ASCII+Arabic, CJK, accented Latin) - 6 regression tests in
test/specs/subword-motions.e2e.tsfor Unicode subword motions (w/b/e/dwon Arabic, mixed text, CJK) (#160) - 5 regression tests in
test/specs/easymotion-comprehensive.e2e.tsfor Unicode EasyMotion word targets (w/e/bon Arabic and CJK) (#160)
Documentation
CHANGELOG.mddocs/features/ex-commands.md: updated picker key format description to documentA-,S-,M-modifier prefixes and combinationsdocs/configuration/remapping.md: updated picker key format description and added Alt-j/Alt-k exampleREADME.md: updated subword motions description to mention Unicode supportdocs/reference/keybindings.md: updated subword motions table to note Unicode support
Full Changelog: 0.139.0...0.140.0