swap_hands
QMK の機能の1つ
左右分割系のキーボードの左右をキーマップを入れ替える機能
https://docs.qmk.fm/features/swap_hands
hand_swap_config/hand_swap_configによって swap したときのキーマップをどう入れ替えるか定義できる。
ドキュメントの例だと
code:c
const keypos_t PROGMEM hand_swap_configMATRIX_ROWSMATRIX_COLS = {
{{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
{{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
{{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
{{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
};
で、各行で reverse しているのが分かる。
^ を QK_SWAP_HANDS_TOGGLE 入力とし、かつ space は両手で打てるものとして、Hello, World. と入力する例を考える
↑の例で左手でタイピングするとしたら ^G^e^sswc ^W^w^r^s^d となる
toggle だと交互にタイピングするとき大変
QK_SWAP_HANDS_MOMENTARY_ON で押している間だけ swap したりしても良いかもしれない
toggle じゃなくて on/off で実装しても良いかも?
ただしレイヤーみたいに swap 中だけ違うキーコードを当てるという感じではなく、レイヤーの座標情報が convert されるだけなので設計に注意が必要
https://gyazo.com/702d8ba39916b7e022e24e9a5747b657
文字入力という点においてはこれでいける
一般的な ANSI 配列 だと右手が担当するキーが多いので、普通の左右の境界で swap するとキーが足りなくなる
https://utb.sakura.ne.jp/blog/archives/43 の例をみると
code:c
const keypos_t hand_swap_configMATRIX_ROWSMATRIX_COLS = {
// Left
{{5, 4}, {0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}},
{{5, 5}, {0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}},
{{5, 6}, {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}},
{{5, 7}, {4, 7}, {3, 7}, {2, 7}, {1, 7}, {0, 7}},
// Right
{{1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {0, 0}},
{{1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {0, 1}},
{{1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {0, 2}},
{{5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
};
行をスライドするようにしてスライドしている。
スライドというか丸ごと入れ替えっぽい
https://gyazo.com/4d1b71b48a102ff7a6a03d51dc0192e5
先の Hello, World の例で、左手片手打ち、^ が toggle だとすると
^A^e^ffrv ^W^r^r^f^d となる
たとえば Row Staggered 配列 のズレ方が左右で違うので、それを再現して swap することもできるだろう