zmkfirmware / zmk

ZMK Firmware Repository
https://zmk.dev/
MIT License
2.83k stars 2.86k forks source link

Feature request: swap hands for split keyboards #1526

Open mike1808 opened 2 years ago

mike1808 commented 2 years ago

Background

They are cases when you need to type one-handed without moving your hand to the other split but be able to press the keys on it. That's especially relevant when the splits are far apart from each other or when the pointing device is in-between the splits. For instance, when working in CAD software many times you're required to hold one key on the right side while moving your mouse, if you use your mouse with left hand you will need to reach your right hand from the left side to the right split.

To mitigate that, QMK has swap hands feature which when enabled maps the key presses of one side to the other.

Why

Introducing swap hands feature will eliminate excessive hand movement and also remove the need of defining an extra layer in the keymap.

I wanted to create an issue to track the progress and discuss it.

yangit commented 1 year ago

I think it belongs to config generators. There are many ways you can implement it, I use my generator to create

And some of the mirrors require custom adjustments to stay sane.

I do not think it belongs to ZMK config any more than sane tap dance declaration and a lot of other things which are not easy to define with ZMK syntax You can look here for how I define mirror layers in my config generator, but it is written in JS so yeah, not part of ZMK.

mike1808 commented 1 year ago

@yangit I do think this belongs to the firmware. The firmware can define the mapping definition on the physical matrix layer which then can be used in the keymap.

Yes, you can work around and make it work with generators or other tools but those are workarounds requiring a lot of knowledge or manual work and not solutions.

I implemented my swap layer using C macro https://github.com/mike1808/zmk-config/blob/main/config/helpers.h#L22 for now.

kovasap commented 3 months ago

+1 for this feature