経緯
5か月ほど前から、自作キーボード lily58 proを使っている。
しかし、キーマップを remapで作成したところ、レイヤーキーの同時押しがうまくいかなかった。
remapは直感的にキーマップを編集することができる(しかも特別に環境構築等が必要ない)ので大変重宝していた。
しかし今回、どうしても同時押しで新しいレイヤーに移行できるようにしたかったので、重い腰を上げてバイナリをビルドした。
環境の構築
今回は、必要な環境としてQMK MSYSのみを使った。
バイナリのビルドから書き込みまで全部これ一つで行える。
なお、以下の環境構築はwindowsで行っている。
ダウンロードする
https://github.com/qmk/qmk_distro_msys/releases/tag/1.5.1
こちらからexeファイルをダウンロード。実行する。
インストールが完了したら、QMK MSYSを起動する。
セットアップを行う
起動して出てきたターミナルでqmk setup
を実行する。
色々出てくるが、y
を押せば自動的にファームウェアがクローンされる。
結構時間がかかるので注意。
これが終わるとqmk_firmware
というディレクトリが作成される。
特に何も指定していなければユーザー名\qmkfirmware
に配置される。
キーマップを編集する
qmk_firmware/keyboards
内にキーボードごとにディレクトリが作成されている。
ここから、目的のキーボードのディレクトリを探し、好きなエディタで開く。
今回はvscodeでlily58
を開いた。開くと画像のようになる。
keymaps
フォルダ内に、キーマップが保存されている。
今回は画像のようにmykeymap
という名前でコピーした。
コピーしたフォルダ内のkeymap.c
を編集する。
プログラム上で、下のようにkeymapが宣言されているので、ここを編集する。
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ... }
今回は以下のように編集をした。
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* QWERTY
* ,-----------------------------------------. ,-----------------------------------------.
* |"半角"| 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | "-" |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | "@" |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* |LCTRL | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ":" |
* |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
* |LShift| Z | X | C | V | B |-------| |-------| "B" | "N" | "M" | "," | "." |RShift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LAlt |"LOWER"|"RShift" | /Space / \Enter \ |"RSHIFT"|"RAISE"| "RCTRL" |
* | | | |/ / \ \ | | | |
* `----------------------------' '------''--------------------'
*/
[_QWERTY] = LAYOUT( \
KC_ZKHK, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \
KC_LCTRL, 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_LBRC, KC_RBRC, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, \
KC_LALT, MO(_LOWER), KC_RSFT, KC_SPC, KC_ENT, KC_RSFT, MO(_RAISE), KC_RCTL \
),
/* LOWER
* ,-----------------------------------------. ,-----------------------------------------.
* |"ESC" | "F1" | "F2" | "F3" | "F4" | "F5" | | "F6" | "F7" | "F8" | "F9" | "\" | "^" |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | | "F12"| "up" |"F14" | | | | | | | | "[" |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | |"left"|"down"|"right"| |-------. ,-------| | |"HOME"| | "BS" | "]" |
* |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
* | | | | | | |-------| |-------| | | "END"| | "/" | "\" |
* `-----------------------------------------/ / \ \-----------------------------------------'
* | | | | / / \ \ | | | |
* | | | |/ / \ \ | | | |
* `----------------------------' '------''--------------------'
*/
[_LOWER] = LAYOUT( \
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_INT3, KC_EQL,\
_______, _______, KC_F12, KC_UP, KC_F14, _______, _______, _______, _______, _______, _______, KC_RBRC, \
_______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, KC_HOME, _______, KC_BSPC, KC_NUHS, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, _______, KC_SLSH, KC_INT1, \
_______, _______, _______, _______, _______, _______, _______, _______\
),
/* RAISE
* ,-----------------------------------------. ,-----------------------------------------.
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ` | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | "1" | "2" | "3" | "4" | "5" |-------. ,-------| "6" | "7" | "8" | "9" | "0" | |
* |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
* | | | | | | |-------| |-------| | | | | | |
* `-----------------------------------------/ / \ \-----------------------------------------'
* | | | | / / \ \ | | | |
* | | | |/ / \ \ | | | |
* `----------------------------' '------''--------------------'
*/
[_RAISE] = LAYOUT( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______ , _______ , _______ , _______, _______, _______, _______, _______ , _______, _______, \
_______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 ,KC_0 , _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______ \
),
/* ADJUST
* ,-----------------------------------------. ,-----------------------------------------.
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | ! | " | # | $ | % |-------. ,-------| & | ' | ( | ) | | |
* |------+------+------+------+------+------| | | |------+------+------+------+------+------|
* | | | | | | |-------| |-------| | | | | | |
* `-----------------------------------------/ / \ \-----------------------------------------'
* | | | | / / \ \ | | | |
* | | | |/ / \ \ | | | |
* `----------------------------' '------''--------------------'
*/
[_ADJUST] = LAYOUT( \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, KC_EXLM, LSFT(KC_2), KC_HASH, KC_DLR , KC_PERC, LSFT(KC_6), LSFT(KC_7),LSFT(KC_8), LSFT(KC_9) , XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, KC_AMPR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
_______, _______, _______, _______, _______, _______, _______, _______ \
)
};
当然だが、_______
, XXXXXXX
は同じ数打たないとビルドするときにエラーが出る。
手打ちすると絶対に間違えるので気を付けよう。(15分ぐらい無駄にした。)
半年ほどFILCOの**Majestouch MINILA-R Convertible**を使っていたので、これに準ずるような配置にしている。
ホームポジションから手を動かさないでもカーソル移動ができるようになっているので、コーディングの時とても便利。
(HHKBでvim使えばよくない?って言われたら何も言えない。)
なお、日本語配列ライクに作っているので、記号等のキーコードが少し特殊になっている。
具体的には
キー | キーコード |
---|---|
@, ` | KC_LBRC |
:, * | KC_QUOT |
\ | KC_INT3 |
[, { | KC_RBRC |
], } | KC_NUHS |
/, _ | KC_SLSH |
" | LSFT(KC_2) |
& | LSFT(KC_6) |
' | LSFT(KC_7) |
( | LSFT(KC_8) |
などのようになっている(見づらくて申し訳ない...)
ちなみに、LSFT(KC_2)
などLSFT
がついているキーコードは、シフトキーと括弧内のキーが連続で入力されている。
(キーボード入力確認ソフトなどで見ると分かる。)
レイヤーキーの同時押し(ここではLOWER
とRAISE
)をすると、ADJUST
のキーマップが反映される。
ビルド、そして書き込みを行う
ビルドするときは、
qmk compile -kb キーボード名 -km キーマップ名
で行える。今回はキーボードがlily58
、 キーマップがmykeymap
なので
qmk compile -kb lily58 -km mykeymap
という風にした。エラーがなければ.hex
ファイルがqmk_firmware
フォルダ内に作成される。
書き込みをするときは
qmk flash -kb キーボード名 -km キーマップ名
でOK。
よって
qmk flash -kb lily58 -km mykeymap
とする。
正常に書き込む準備ができたら、
QMK Firmware 0.14.16
Making lily58/rev1 with keymap mykeymap and target flash
avr-gcc.exe (GCC) 8.4.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Size before:
text data bss dec hex filename
0 22112 0 22112 5660 .build/lily58_rev1_mykeymap.hex
Copying lily58_rev1_mykeymap.hex to qmk_firmware folder [OK]
Checking file size of lily58_rev1_mykeymap.hex [OK]
* The firmware size is fine - 22112/28672 (77%, 6560 bytes free)
Waiting for USB serial port - reset your controller now (Ctrl+C to cancel).........
のように出力される。
ここでPro Micro
をリセットすれば書き込みが行われる。
(キーボードによるがリセットスイッチがついていればそれでOK。)
なお分割キーボードの場合、左と右両方のPro Microに書き込みを行わないといけないで注意。
まとめ、参考
これによって、ようやくレイヤーキーの同時押しを手に入れることができた。
今まではずらして押すことで何とか代用していたが、ミスが多かったので修正できてよかった。
参考