このページの本文へ

KTUの自作キーボー道 第4回

カスタムキーマップで自作キーボードを自分の分身とする

2018年03月15日 12時00分更新

文● 加藤勝明 編集●北村/ASCII編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

キーマップのカスタマイズ
keymap.cを攻略する

 QMKのビルド環境や大まかな作業サイクルが分かったところで、ファームウェアの肝といえるキーマップのカスタマイズに入ろう。

 先程複製したキーマップ(ktu)のフォルダ内には「keymap.c」「config.h」「rules.mk」の3つのファイルが入っている。config.hとrules.mkはキーボードに装備されたUnderglow LEDの有無やNキーロールオーバーといった機能的な側面を定義するファイルなので、直接編集する頻度は低い。カスタマイズで最も重要なのはキーマップが記述される「keymap.c」なのだ。

 だがいきなりkeymap.cに挑んでも、最初はよく分からないはず。そこでここではkeymap.cの見かたをまとめてみた。

1)ヘッダー部分

 keymap.cの序盤はさまざまな定義を記述する部分だ。ショートカットキーを短縮表記して後に続くキーマップの可読性を上げるためにも使われるほか、レイヤーやマクロを使う下準備エリアでもある。以降のスクリーンショットは、Irisのデフォルトキーマップのkeymap.cを解説している。

ヘッダー部分の最初から5行めまでは“おまじない”的な文言と考えておこう。7行~10行の4行(赤枠部分)にはこのキーマップで使うレイヤー名を4つ(_QWERTY/_LOWER/_RAISE/_ADJUST)記述している。12行~17行までの記述は、今は7~10行めの宣言とリンクしているものという認識にとどめておこう

19行以降の記述は、キーマップの可読性を上げるための記述だ。今回の例の場合、特に重要なのは22行と23行(赤枠部分)の記述。「KC_LOWR」および「KC_RASE」はそれぞれ_LOWERと_RAISEレイヤーの切り替えに使うキーコードとして宣言されている

2)キーマップ

 36行めの「const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {」より94行めの「};」までが実際のキーマップの記述となる。Irisのデフォルトキーマップ作者は結構マメな性格なのか、ビジュアル的にキーの位置を把握しやすいよう記述しているので読みやすい。

 通常QMKでキーを表現する“キーコード”は「KC_ENTER」のように頭に「KC_」を付けて表記するが、Irisのdefaultのkeymap.cでは全てKC_は省略できるようになっている(19行目の記述がポイント)。

 まずは38行め、デフォルトレイヤーとなる「_QWERTY」のキーマップを眺めてみよう。3~4文字コードの部分を除けば、普通のQWERTY配列になっていることがわかる。LSFTやBSPCといった独特なキーワードはQMKのキーコード(https://docs.qmk.fm/keycodes.html)を参照すれば、具体的にどのキーに対応するのか分かる。QMKのキーコード表は一通り読んでおくといいだろう。

このブロック全体がIrisのデフォルトキーマップの内容。図の感じから分かる通り、キーマップ4つ、すなわち4つのレイヤーごとにどんなキーマップなのかが記述されている

38行~50行までの1ブロックが1レイヤーを示す。38行めの先頭にある記述[_QWERTY]から、このレイヤーは_QWERTYレイヤー、52行めの記述から52行目以降は_LOWERレイヤーということがわかる

3)プログラム的な部分

 キーマップの下には、これまでの部分よりももっとプログラミング的な何かが記述されている。この部分はキーの押下判定時などに何かする、という処理が書かれていることが多い。Irisのデフォルトキーマップでは、レイヤーを切り替える2つのキー(LOWRとRASE)を両方押し込むと別のレイヤー(_ADJUST)へ飛ぶための記述が書かれている。とりあえずはこの辺はいじらず、キーマップだけに集中するといいだろう。

105行~146行の部分が、キーイベントを拾って何か処理を加える部分。LOWRとRASEキーを同時に押した時に_ADJUSTレイヤーに切り替える処理などが書かれている。ここの部分に手を付けるのは、もっとQMKに慣れてからでいい

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

ピックアップ

ASCII.jpメール アキバマガジン

ASCII.jp RSS2.0 配信中