💾 Archived View for bbs.geminispace.org › s › programming › 16606 captured on 2024-06-16 at 16:45:01. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-05-26)
-=-=-=-=-=-=-
I'm writing a desktop app that provides configurable keyboard shortcuts. For now these are set up by writing key sequences to a file. Of course, something that sounds straightforward stops being so as soon as you get past the surface.
I am now trying to figure out what's more "intuitive" (if such thing even exists) when you're trying to serialize a sequence of keystrokes to text. For example, let's say you have a US keyboard where the semicolon key (;) also produces the colon (:) when pressing SHIFT. Now you want to bind the colon to a command. Do you write...
1. :
2. SHIFT+:
3. SHIFT+;
Would you expect just one to work or maybe more than one? Which ones?
If a modifier key doesn't appear in the binding but you need to press it to produce the required symbol, would you expect the binding to still work? Would you say this is the same for all modifier keys?
May 05 · 6 weeks ago
For a source of truth, I'd consider the key code that the application receives when the user presses the key. I'd treat modifier keys specially (ctrl, alt, shift, meta) and then take any other key code literally.
To write these combos to a file, you'd use whatever you want to represent this collection, like an array of symbols, but that depends on the programming language and your preferences for serialization.
e.g.
copy: ctrl+<symbol for c>
find/replace: ctrl+shift+<symbol for f>
To that end, you'd likely need to provide some area of the settings for the user to create their own key bindings.
This gets really hard when you consider multiple keyboard layouts, I suggest looking for prior art, e.g.
https://wiki.archlinux.org/title/xmodmap
🦀 jeang3nie · May 06 at 14:06:
As Morgan said, this gets complicated when you take into account different keyboard layouts (and you definitely shouldn't ignore this). For that reason I would suggest looking at whether the toolkit you are using has already solved the problem, assuming you're using a toolkit and not basically writing your own like Skyjake did. I know gtk+ can capture key presses and translate the codes into the appropriate symbol for you, based on the key map. I've used that facility.
🛰️ lufte [OP] · May 06 at 14:37:
I am using a toolkit and, since the last version, it provides a great level of abstraction over this. I get to choose between the hardware keycode, the virtual keycode (after layouts and re-mappings), and the actual character being written by the key press (if any). I'm mostly conviced of choosing the latter, when available, but I'm still unsure about the modifier. If ':' can only be produced by pressing Shift, should the "Shift+:" and ":" bindings both work or only the first one?