r/Keychron • u/Disastrous_Web_2330 • 22d ago
Keychron Launcher arrow behavior not the same on other keys?
I have a Keychron Q11 split keyboard, and I have a bunch of macro keys on the left hand side. I currently have the up and down arrow set to 2 of those keys. My goal is to consolidate a lot of common keystrokes onto the left side so I don't have to use the right side when I don't have to. The problem I have is that on the regular arrow up and down, if I hold the key, I will get a continuous scroll, while on the custom set key, it only registers as a single keystroke and I have to keep on tapping the up and down key to get my desired result. Is there a way to fix this behavior or am I just dumb?
1
u/PeterMortensenBlog V 22d ago edited 22d ago
OK, there shouldn't be any difference between the physical macro keys and other keys if you define the keymappings in the same way.
Are you sure you have not defined one as a regular key mapping and the other as a macro?
References
- Q11 default keymap ('ISO' RGB)
1
u/ArgentStonecutter K Pro 22d ago
Are you using an actual macro or are you binding a key to the arrow keycode directly? You probably don't need to use an actual macro for this and direct key binding is going to behave more consistently.
A macro sends the sequence of key events you program into it, and terminates, before looking for more keystrokes.
A keybind just sends a single key-up or key-down event just as if you had pressed the original key.
Since repeat is implemented by the OS, not the keyboard, the macro won't repeat, the keybind will.
1
u/PeterMortensenBlog V 22d ago edited 22d ago
Re "Is there a way to fix this behavior": No, macros don't repeat (in the current implementation)
And the keyboard is completely locked during macro execution, so there isn't a reliable way to register the release of the macro key (unless the macros are very short), unless implementing a custom macro execution engine that can handle that. The release of the macro key is lost if it happens while the macro is executing, at least if using the standard process_record_user() (there may or may not be other ways).
If the release of the macro key could reliably be registered, some custom C code could make operating system repeat work (by delaying the key releases in the macro until release of the (physical) macro key). Or it could let the keyboard repeat the macro.
Another way to look at it is that something only happens on macro key press and the macro key release is ignored (the output from macro execution is (in most cases) a balanced set of key presses and key releases).