qmk_firmwareでキーマップを変更する

f:id:ryoutaku_jo:20190522213440p:plain

【結論】

・自作キーボードは、キーマップを自由に設定できるのが大きな特徴

・キーマップを設定するには、qmk_firmwareを利用する

・qmk_firmwareに任意のキーマップを記述して、書き込む事で設定が完了する

【目次】

【本題】

自作キーボードのキーマップ

先日、自作キーボードを制作しましたが、初期のキーマップは若干MacBookと異なり、使いづらい部分がありました。

なので、キーマップを書き換えることにしたので、その過程で調べた事をまとめます。

↓過去記事

ryoutaku-jo.hatenablog.com

ryoutaku-jo.hatenablog.com

qmk_firmwareの導入

まずは、キーマップを設定する為のqmk_firmwareを導入します。

qmk_firmwareGItHubからcloneしてきます。

$ git clone https://github.com/qmk/qmk_firmware
$ cd qmk_firmware

そして、下記コマンドでビルド環境を整えます。

$ ./util/qmk_install.sh

デフォルトのキーマップをコピー

私が制作したキーボード(Mint60)のデフォルトのキーマップの設定が記述されたファイルは、下記の階層に保存されています。

qmk_firmware
 - keyboards
  - mint60
   - keymaps
    - default

そちらを土台にキーマップをカスタマイズして行くので、ファイルをコピーします。

なお、ファイル名は「custom」としています。

$ cp -r keyboards/mint60/keymaps/default keyboards/mint60/keymaps/custom

キーマップをカスタマイズ

コピーしたファイルを開きます。

キーマップに関する記述は下記のコードになります。

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT( \
    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,      KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,    KC_BSPC,  \
    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_RBRC, KC_BSLS,  \
    KC_CAPS,     KC_A,    KC_S,    KC_D,    KC_F,    KC_G,      KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,        KC_ENT,   \
    KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,      KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,   KC_UP,  MO(1),   \
    KC_ESC,    KC_LCTL,    KC_LGUI,    KC_LALT,    KC_SPC,        KC_BSPC, KC_ENT,  LALT(KC_GRV),               KC_LEFT,KC_DOWN,KC_RGHT \
  ),
  [1] = LAYOUT( \
    KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,     KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,    KC_DEL, \
    RGB_TOG,   RGBRST,  RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX,   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
    XXXXXXX,     RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX,   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,        XXXXXXX, \
    _______,       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_PGUP, _______, \
    XXXXXXX,   _______,    _______,    _______,    XXXXXXX,       XXXXXXX, XXXXXXX, XXXXXXX,                   KC_HOME, KC_PGDN, KC_END \
  )
};

これは実際にキー配列と同じ内容になっています。

[0]の内容がベースで、「MO(1)」に対応するキーを押す事で、[1]のキーが反応する様になっています。

それぞれのコードがどのキーに対応するかは、下記から確認できます。

qmk_firmware/keycodes_basic.md at master · qmk/qmk_firmware · GitHub

今回はあまり凝った内容にしない様に、下記の様に変更しました。

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT( \
    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,   KC_5,        KC_6,    KC_7,    KC_8,     KC_9,    KC_0,      KC_MINUS, KC_EQUAL, KC_BSPC,         \
    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,   KC_T,        KC_Y,    KC_U,    KC_I,     KC_O,    KC_P,      KC_RBRC,  KC_BSLS,  KC_NONUS_BSLASH, \
    KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,   KC_G,        KC_H,    KC_J,    KC_K,     KC_L,    KC_SCOLON, KC_QUOTE, KC_ENT,                    \
    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,   KC_B,        KC_N,    KC_M,    KC_COMMA, KC_DOT,  KC_SLASH,  KC_ESC,   KC_UP,    KC_SLCK,           \
    MO(1),   KC_LCTL, KC_LALT, KC_LGUI, KC_SPC,              KC_SPC,                     KC_RGUI, KC_RALT,   KC_RSFT,  KC_DOWN,  KC_RGHT          \
  ),
  [1] = LAYOUT( \
    KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,      KC_F6,   KC_F7,   KC_F8,    KC_F9,   KC_F10,    KC_F11,   KC_F12,   KC_DEL,  \
    RGB_TOG, RGBRST,  RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX,    XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX, \
    XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX,    XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX,   XXXXXXX,  XXXXXXX,           \
    _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,    XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX,   _______,  KC_PGUP,  _______, \
    XXXXXXX, _______, _______, _______, XXXXXXX,             XXXXXXX,                    XXXXXXX, XXXXXXX,   KC_HOME,  KC_PGDN,  KC_END   \
  )
};

あとは、これをキーボードに書き込みます。

make mint60:custom:avrdude

これで設定完了です。

参考情報

GitHub - qmk/qmk_firmware: keyboard controller firmware for Atmel AVR and ARM USB families

MacでMint60のキーマップを変更してみた – うろんげな解答

《今日の学習進捗(3年以内に10000時間に向けて)》

コードレビューにおいて、機能実装の背景を正確に把握する事が重要だと改めて感じた。例えば、複数のでUserでPostテーブルを共有する際に、テーブルの主キーとは別に、User毎にも1から順に連番でIDを付加したとする。追加した背景には、1から順に番号が割り振られていないと、CSV出力したデータが見辛くなり、IDから検索を行う際の利便性も損なわれるという問題を解消させるという目的があった。なので、CSV出力とID検索機能が正常に動作するか確認する事が必須だと判断できる。もし、背景の理解を怠っていれば、この判断が付かず、ただ闇雲にコードをチェックすることになり、非常に効率が悪くなってしまう。目の前の作業に没頭してしまうと忘れがちなことなので、改めて意識して取り組みたい。

学習開始からの期間 :166日
今日までの合計時間:1611h
一日あたりの平均学習時間:9.8h
今日までに到達すべき目標時間:1516h
目標との解離:95h
「10,000時間」まで、

残り・・・「8389時間!」