Planckキーボードのレイヤー切り替えとかな/英数切り替え設定

Planckキーボードにおいてレイヤー切り替えキー(Raise/ Lower)は非常に押下頻度の大きいキーであり、できれば親指で押下できるエリアに配置したいものである。ところがMacの日本語キーボードにおけるかな/英数切り替え方法(スペースキーの両脇のかな/英数キーによる切り替え)に慣れ親しんだものにとって、Raise/ Lowerの位置にこそかな/英数キーを配置したいと思うのが人情である。

そこで、QMKファームウェアの”Momentary Switch with tap toggle”機能を使ってこのジレンマに終止符を打ったというのが本記事の趣旨である。

つまり、

LT(layer, kc)

を割り当てたキーをタップするとkcが入力され、長押しするとlayerに切り替わるので、Raise/ Lowerキーとかな/英数キーを2つのキーに割り当てることができる。

長押しと判定されるまでの時間は、デフォルトでは200(ms)に設定されている。ぼくの場合この設定は長すぎで、Raise+qと押下してqが入力されるといったことが頻発したので、

qmk_firmware-master/tmk_core/common/action_tapping.h

にて

/* period of tapping(ms) */
#ifndef TAPPING_TERM
/* #define TAPPING_TERM 200 */
#define TAPPING_TERM 75
#endif

としたらぼくにはちょうどよかった。

最後に、現在のWindowsマシン用のキー設定は以下の通り。なお、Windowsマシンではkeyhacにて、変換/無変換キーにIME切り替え機能を付与している。その他、左CtrlをemacsキーバインドのC-に、右Ctrlを普通のコントロールキーに設定している。

define _WIN 0
define _LWR 1
define _RIS 2

// Macro name shortcuts
#define WIN M(_WIN)
#define LWR M(_LWR)
#define RIS M(_RIS)

// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

/* WIN
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | - |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | lCtrl| A | S | D | F | G | H | J | K | L | ; | " |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / | Up |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Esc | GUI | Alt | rCtrl|Raise |Space |Enter |Lower | rCtrl| Left | Down |Right |
* `-----------------------------------------------------------------------------------'
*/
[_WIN] = {
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS},
{KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP},
{KC_ESC, KC_LGUI, KC_LALT, KC_RCTL, LT(RIS,KC_MHEN), KC_SPC, KC_ENT, LT(LWR,KC_HENK), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT}
},

/* Raise
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | | | | rClic| lClic| ( | ) | | | { | } | ¥ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | mUp |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Del | | | | | Bksp | Bksp | | | mLft | mDwn | mRgt |
* `-----------------------------------------------------------------------------------'
*/
[_RIS] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL},
{_______, _______, _______, KC_MS_BTN2,KC_MS_BTN1, S(KC_9), S(KC_0), _______, _______, KC_LBRC, KC_RBRC, KC_BSLS},
{_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_MS_UP},
{KC_DEL, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, _______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT}
},

/* Lower
* ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | | UP | + |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | | | | DEL | RGHT | ( | ) | | | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | | | | | LEFT | DOWN | F7 | F8 | F9 | F10 | Vol+ |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Del | | | | | Bksp | Bksp | | | Mute | Vol- | Next |
* `-----------------------------------------------------------------------------------'
*/
[_LWR] = {
{S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), _______, KC_UP, S(KC_EQL)},
{_______, _______, _______, KC_DEL , KC_RGHT, S(KC_9), S(KC_0), _______, _______, S(KC_LBRC), S(KC_RBRC), KC_PIPE},
{_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_F7, KC_F8, KC_F9, KC_F10, KC_VOLU},
{KC_DEL, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, _______, KC_MUTE, KC_VOLD, KC_MNXT}
},