cajhin / capsicain

Powerful low-level keyboard remapping tool for Windows
334 stars 18 forks source link

Keyboard-specific remapping #44

Closed MatejKafka closed 9 months ago

MatejKafka commented 3 years ago

I'd like to use an extra keyboard as a "macro pad", by remapping some keys to the F13-F24 range, while still using another keyboard as a normal keyboard, with separate keymap.

As far as I understand, Interception supports this, but this feature is not exposed by Capsicain. Would it be possible to add it?

Something similar was already discussed in issue #3, but the solution there works around the problem instead of solving it. I'm willing to get my hands dirty and make a PR for this, but it will probably require quite substantial changes to the codebase, so I'd need to discuss it with you first and get some pointers. :)

arthurmoeller commented 1 year ago

Any news on this? I would need it to rewire space to shift only on external keyboard

cajhin commented 1 year ago

@MatejKafka Sorry for the late reply, I'm not currently doing computer stuff in my free time (great weather outside).

Today, the only way to limit capsicain remapping to a single keyboard is https://github.com/cajhin/capsicain/wiki/Keyword%3A-OPTION#option-processonlyfirstkeyboard

It's not perfect, you have to remember to touch the "relevant" board first, every time you start up or change layers.

Making this configurable via .ini file would be quite easy

These identifiers are really ugly, I think there is no guarantee that two boards have different identifiers; it is only safe for different classes of boards (like: internal / USB / Bluetooth).
Not sure if the full 50-digit ID of an external board does not change on reboot.
To see the current hardware ID, press ESC+S (Status).

Ideally, I'd want this to be flexible so that you could define n active boards for each layer.
Maybe offer an inverted option, too (do every board except this ID)

That's all off the top of my head, I might have forgotten something.

If there's anything else you'd need from this feature, reply to this thread.

From a user perspective, you'd look up the hardware ID. Copy the hardware ID (careful because an active selection in console windows blocks the process). Put the ID into your .ini, with a future layer option named (exclusiveDeviceId?).

@arthurmoeller why would you rewire space to shift on a second board? Just curious, I never imagined sth like that.

arthurmoeller commented 1 year ago

Thank you for the reply. I will think about it and look into the code.

I will describe my usecase: https://ibb.co/3pndmwd

Better explanation why I want shift as a thumb key here (rabbithole alarm): https://colemakmods.github.io/ergonomic-mods/modifiers.html

cajhin commented 1 year ago

there is a new capsicain.exe in the x64 folder, which should implement this feature request. See https://github.com/cajhin/capsicain/wiki/Keyword%3A-OPTION/_edit#option-includedeviceid-searchstring for details

If you try it out, then please let me know how it works for you.

arthurmoeller commented 1 year ago

Sorry that I wasnt more helpful with this. I looked at the Code briefly but never coded in C++ only php and js.

Its working exactly as described in the example. Thank you for the effort.

_[CONFIG_1] OPTION configName = Example-Config_1 rewire caps lctrl IncludeDeviceID:ven_hpq rewire lshf space IncludeDeviceID:venhpq rewire space lshf rewire ret bsp

cajhin commented 9 months ago

Done. You can now restrict mappings to specific keyboards, see wiki OPTION IncludeDeviceID {searchString}