Skip to content

Reserve first keymap slot so the first character is not typed on the Escape keycode - #79

Open
rockets-cn wants to merge 1 commit into
atx:masterfrom
rockets-cn:fix-reserve-escape-keycode
Open

rockets-cn wants to merge 1 commit into
atx:masterfrom
rockets-cn:fix-reserve-escape-keycode

Conversation

@rockets-cn

Copy link
Copy Markdown

Reserve first keymap slot so the first character is not typed on the Escape keycode

wtype maps its N-th unique character to physical keycode N+8 in the
generated XKB keymap, so the first character always lands on keycode 9
-- the physical position of the Escape key. Compositors route
virtual-keyboard key index N to keycode N+8, which means the first
character's key event carries the Escape keycode.

Chromium special-cases key events on the Escape keycode: for
non-ASCII (Unicode-range) keysyms the character is never inserted, so
the first character typed into Chromium-based apps (browsers, Electron,
VS Code) silently disappears. ASCII characters and apps that do not
special-case Escape (e.g. foot) are unaffected.

Fix by reserving keymap slot 1 as a NoSymbol placeholder so the first
real character starts at slot 2 (physical keycode 10).

Repro: focus a browser input field, run: wtype -- "今天天气"
-> only "天天" is inserted (first char dropped). Verified fixed with
Chromium 155 on Wayland (Hyprland + fcitx5) and foot.

…Escape keycode

wtype maps its N-th unique character to physical keycode N+8 in the
generated XKB keymap, so the first character always lands on keycode 9
-- the physical position of the Escape key. Compositors route
virtual-keyboard key index N to keycode N+8, which means the first
character's key event carries the Escape keycode.

Chromium special-cases key events on the Escape keycode: for
non-ASCII (Unicode-range) keysyms the character is never inserted, so
the first character typed into Chromium-based apps (browsers, Electron,
VS Code) silently disappears. ASCII characters and apps that do not
special-case Escape (e.g. foot) are unaffected.

Fix by reserving keymap slot 1 as a NoSymbol placeholder so the first
real character starts at slot 2 (physical keycode 10).

Repro: focus a browser input field, run:  wtype -- "今天天气"
-> only "天天" is inserted (first char dropped). Verified fixed with
Chromium 155 on Wayland (Hyprland + fcitx5) and foot.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant