leopardgeckoのブログ

Macの関連事項など

Planckキーボードのキーマップ。

はじめに

Planckはファームウェアの書き換えでキーマップを変更できますが、設定ファイルはC言語で書かれているために単にキーを入れ替えるだけではなくある程度複雑な動作も可能になります。

色々試してみましたので、それらの機能をフィーチャーしたキーマップファイルを公開してみます。

ここからダウンロードしてください。

2018/12/25追記:最新のQMK Firmwareコンパイル時にエラーが出る場合は、keymap.cの中に2箇所「breathing_speed_set」というところがあるので、それらを両方とも「breathing_period_set」に書き換えてみてください。

主な特徴

1)デフォルトレイヤーはMac用。ほぼ普通のQWERTY配列のまま。LowerキーとRaiseキーは英数・かなキーとしても使える。このレイヤーはiPadiPhoneなどiOS機にも使える。

2)Windows用のデフォルトレイヤーも用意。Adjustレイヤーから適宜切り替え可能。PlanckはWindowsではJIS配列のキーボードとして認識されるが、レジストリを書き換えたりせずにそのままの状態でMacと同じUS配列のキーボードとして使える設定にした。LowerキーとRaiseキーは無変換・変換キーとしても使えるので、Windows標準の機能でそれぞれをIMEオフとオンに切り替えておくとMacと同じ使い方ができる。(IME云々に関してはこちらの記事参照)

3)Lowerは主に数字入力とファンクションキーのレイヤー。テンキー様の配列もあり。レイヤーをロックすると数字入力が格段に楽。(レイヤーのロックについては後述)

4)Raiseは主に記号入力とメディアキーのレイヤー。

5)移動とマウス操作用のFunctionレイヤーを追加。Escキーの長押しでFunctionレイヤーがオンになる。マウスポインターの移動速度は三段階で調節可能。

6)Escキーを押しながらLowerまたはRaiseを押すとそれぞれのレイヤーにロックできる。Lowerレイヤーにロックすればテンキーとして使えるので数値入力が楽。

7)LED対応。スイッチにLEDを仕込んである場合はLowerとRaiseをオンにすればLEDが光る。それぞれのレイヤーで光るパターンを変えているので、レイヤーをロックした場合にもどちらのレイヤーがオンになっているのかがわかる。(出来合いのキーボードのように全てのキーにLEDが仕込んであると点滅が鬱陶しいので私はLowerとRaiseキーだけに仕込んでいます。後述の動画参照)

8)サウンド対応。レイヤーをロック・ロック解除したりAdjustキーを押したりするとそれぞれ対応した音が鳴る。

9)マクロ出力(一つのキーで文字列を出力できる)。

 

 LEDとサウンドの動作はこんな感じです。

解説

配列はすでに皆さんお好きなようにカスタマイズしているでしょうから、配列はともかくとして機能の部分で参考になるところがあればと思い公開してみました。zip形式での配布になったのは、keymap.cだけでは機能が再現できないため、config.hとrules.mkも含める必要があったからです。

私が知る限りPlanckの説明としての主な新出事項は、WindowsでJIS配列として認識された場合にUS配列として使える方法だろうと思います。キーマップの単純な置き換えでも一応は使えるのですが、それのみではシフトキーを押しながら「;」や「'」をタップした時の記号の置き換えはできません。そこでその二つのキーに特殊な処置を加えました。

(実はこの二つのキーに限らずシフトキーの動作も含めて全てのキーを一括してJISからUSに変換できる方法もあるのですが、Planckでは数字や記号を別のレイヤーで入力するやり方が一般的なためシフトキーの操作を考慮する必要性があまりないのでここでは省略します。PreonicやGH60などの独立した数字キーがあるキーボードでJISをUSに変換したい方がもしおられたらご一報ください)

Planckには何かがロックされている場合のインジケーターになるものが全くないので、LEDの点滅の違いで今オンになっているレイヤーを表してみました。

マウスキーを使っている人はあまりいないようですが、補助的な使い方には良いかもしれません。スクロールホイールはちょっとスクロールしたい時や横スクロールをしたい時など意外と使えます。

様々な条件によって動作が変わるようになっています。ここがQMK Firmwareの醍醐味だろうと思います。例えばデフォルトのレイヤーの違い、レイヤーがロックされているかどうかの違い、シフトキーが押されているかどうかの違いなどを判定してそれに対応した動作になります。その辺りは個人的に結構苦労しました。

タップダンス(二回タップで動作が変わるなど)も試してみたのですが、タップの判定が結構シビアで使いにくいと感じたのであえてここでは触れません。

最後に

何せド素人が書いたソースコードですからとんでもない間違いがあるかもしれませんが、何かの参考になれば幸いです。