Fix text injection for non-US keyboard layouts - #12
Open
softwarewhale wants to merge 1 commit into
Open
Conversation
ydotool sends keycodes assuming US QWERTY, which breaks on other layouts (German QWERTZ swaps Y/Z, for example). Added native injection that respects the active layout: - X11: XTest extension via ctypes - Wayland: wtype (if installed) - Falls back to ydotool otherwise
Owner
|
@softwarewhale have you had a chance to test on wayland? |
|
What's the status here @cjams @softwarewhale ? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I use a German QWERTZ keyboard and noticed that transcribed text was coming out garbled - Y and Z were swapped, among other issues. Turns out
ydotool typesends raw keycodes assuming US QWERTY, so on any other layout the characters get misinterpreted.What this PR does
Instead of relying solely on ydotool, this adds native text injection that respects the system keyboard layout:
XKeysymToKeycode+XTestFakeKeyEvent)wtypeif installedThe backend is selected automatically based on the display server.
Backend priority
Notes
Testing
❗️Disclaimer: I used AI to generate the code because neither python nor Linux display server specifics are my domain. If you don't want to merge it because of that, I can understand. I just wanted to share what I came up with to not gatekeep this fix. ❗️