続・JISplit89を作ってみた

さて、前回作ったJISplit89のキーマップのお話。

AJisai74と違ってこちらはVIA対応のファームウェアが提供されていないので、qmk_firmfareのビルド環境を作ってキーマップファイルを作成→ファームウェアをビルドという方法でキーマップを編集していく。

なお、この記事書ききる前にVIA対応されてたんだけど、当時はVIA対応してなかったのとせっかくLED付いてるしそっちをいじりたいってことで、現時点でもファームウェアビルドの方法で使っている。

というわけでVIAのときと違って画像が少なく、コードが多い話になりそう。

まずはこれを参考にビルド環境の構築。
Macなのでこの辺は結構楽に進められた。
なお、「qmk setup」すると「/Users/ユーザ名」直下にqmk_firmwareリポジトリがクローンされるんだけど、いつもリポジトリをクローンするディレクトリは決めてるのでそこへのシンボリックリンクを張ることで解決した。

# ln -s /path/to/qmk_firmware /Users/hoge/qmk_firmware

さてキーマップ。
サリチル酸氏オリジナルキーマップのsalicylicキーマップをコピーしてカスタマイズしていく。
基本はAJisai74に合わせたいので日本語配列の記号のとこをJIS配列に一致させるように変更し、レイヤーも前回に合わせてデフォルトレイヤー+3レイヤーにする。

スクリーンショット 2020-12-19 2.57.33

スクリーンショット 2020-12-19 2.57.57

スクリーンショット 2020-12-19 2.58.24

スクリーンショット 2020-12-19 2.58.51

こっちはVIAと違って日本語キーボード用のキーコードエイリアスが定義されていたからそのへんは指定が楽だった。

qmk_firmware/quantum/keymap_extras/keymap_jp.h

そしてsalicylicキーマップを眺めててあることが気になる。

MOUSEレイヤー、ADJUSTレイヤーってなんぞや。

どうやらMOUSEレイヤーはアローキー周辺をマウス操作用にするレイヤーで、ADJUSTレイヤーはLEDの設定をするレイヤーっぽい。
(そういえばLEDもいじりたいと思ってたんだ!)

MOUSEレイヤーはtap_dance_actionsってとこで切り替え定義がされてて、tap_danceというのはキーを素早く2回押す行為らしい(つまりダブルクリック)。
便利そう…採用!

salicylicキーマップではEscキー2回押しだったんだけどvim使いのため、ついついEscキーは連打してしまうので、全角/半角キー2回押しにすることに。

スクリーンショット 2020-12-19 3.09.15

ADJUSTレイヤー切り替えはL1切り替えキーL2切り替えキー同時押しだったので踏襲することに。

キーマップもちょっと変更。

スクリーンショット 2020-12-19 3.11.16

スクリーンショット 2020-12-19 3.11.40

ADJUSTレイヤーにしれっと追加した左側のボタンは定義されたLEDパターン。
qmk_firmwareレポジトリのこの辺に書いてた。

docs/feature_rgblight.md

でRGB_MODってボタンを押すと上に書いたLEDパターンが順に変わってくんだけど、戻るボタンが無かったのでRGB_RMODキーを追加。
押されたときの挙動として下記の様にコードを追加した。
(case RGB_RMODらへん)

int RGB_current_mode;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 bool result = false;
 switch (keycode) {
   #ifdef RGBLIGHT_ENABLE
     case RGB_MOD:
         if (record->event.pressed) {
           rgblight_mode(RGB_current_mode);
           rgblight_step();
           RGB_current_mode = rgblight_get_mode();
         }
       break;
     case RGB_RMOD:
         if (record->event.pressed) {
           rgblight_mode(RGB_current_mode);
           rgblight_step_reverse();
           RGB_current_mode = rgblight_get_mode();
         }
       break;
     case RGB_RST:
         if (record->event.pressed) {
           eeconfig_update_rgblight_default();
           rgblight_enable();
           RGB_current_mode = rgblight_get_mode();
         }
       break;
   #endif
   default:
     result = true;
     break;
 }
 return result;
}

一旦ビルドして書き込んだものを使ってみる。
いい感じ。

そしてここからがLED。

…とても苦労した。
(疲れ切ったので記事書くの先延ばしてたらいつしか今になってた)

一旦切って次の記事に書こう…

こちら

この記事が気に入ったらサポートをしてみませんか?