Kinesis Advantage360 Proを親指シフトキーボードにしました!

まとめ

PC側はローマ字入力の設定まま、親指シフト用のソフトウエアを使用せずに、Kinesis Advantage360 Proから直接親指シフトが入力できるようになりました。(zmkに感謝!)

キーボードそのものは、"ぱ"や、"べ"が打ちやすいです。

注意

Kinesis Advantage360は2種類あって、Proではない無印の方(左右のキーボードを有線で繋ぐタイプ)は、ファームウエアがzmkではないので、下記の方法では親指シフトは出来ないと思います。

Kinesis Advantage360 Proはファームウエアを直接更新する作業になります。仮にキーボードが使用できなくなっても責任は負いかねますのでよろしくお願いします。(一応 ••;)

設定方法

以下のREADME.mdになります。

github.com

仕組み

右手のjキーを押した時に、キーボードから直接、"tを入力してからo"のキーの信号が出すようにしています。(PC側がローマ字入力で待っているなら、"と"が入力される。)

また、右手の親指の一番内側のキー(デフォルトだとSpaceキー)と、右手のjキーを同時に押した時に、キーボードから直接、"o"のキーの信号が出すようにしています。(PC側がローマ字入力で待っているなら、"お"が入力される。)

何が嬉しいか?

これまで親指シフトを使うには

  • WindowsだとDvorakJまたは、やまぶきR、Japanist
  • MacだとLacailleまたは、Karabiner-Elements
  • Linuxだとoyainput

など、それぞれのOSに合わせて親指シフトの設定が必要でした。

今回、キーボード側を親指シフトに対応させることで、親指シフト用のソフトウエアの設定が不要になりました。 そのためキーボードをPCに繋ぐだけで親指シフト入力ができます。

確認したOSのバージョン

またiPhoneでもキーボードを接続するだけで、親指シフト入力が可能です。

確認したOSのバージョン

やったこと

レイヤの追加

jキーを押した時に、"と"を入力するには、キーボードのモードを変える必要があります。(そうでないと、"j"と出すか、"と"と出すか、キーボードからは分からないため)そのため、レイヤーを一つ増やしました。

レイヤはLAYER #4としています。

macros.dtiの準備

jキーを押した時に、"と"を入力するには、キーボードから"t"の後に"o"が出力される必要があります。 そこでマクロを次のようにmacros.dtsiで準備して、キーの設定もそれを読み込むようにしました。

macro_TO: macro_TO{
compatible = "zmk,behavior-macro";
label = "macro_TO";
#binding-cells = <0>;
bindings = <&kp T>, <&kp O>;
};

これを全てのキーについて設定します。

combo.keymapの準備

同時打鍵の時ですが、これはcomboという機能を使います。コンボは次のように書いて設定しています。

combo_NO {
        timeout-ms = <50>;
        key-positions = <42 70>;
        layers = <4>;
        bindings = <&macro_NO>;
    };

ここでkey-positionsの42や70は、adv360.keymapで定義した順番になり、今回の場合は以下です。

親指の一番押しやすいキーを、親指シフトに使ってしまうと惜しい気がしますが、これはコンボの時だけで、同時打鍵ではない普通に押したときは、BackSpaceやSpaceとして動作します。

ここで、42と70のキーを押したら、"n"の後に"o"を出力するために、当初次のようにしたのですが、エラーが出てしまいました。

(エラーになる例)
combo_NO {
        timeout-ms = <50>;
        key-positions = <42 70>;
        layers = <4>;
        bindings = <&kp N>, <&kp O>;
    };

どうやらコンボでは、1つのキーの入力が前提のようです。そのためマクロを作っておいて、それを呼び出す方法にしました。

(実際の例)
macro_NO: macro_NO{
compatible = "zmk,behavior-macro";
label = "macro_NO";
#binding-cells = <0>;
bindings = <&kp N>, <&kp O>;
};

コンボだと判定するキー入力の時間差timeout-ms = <50>は、少し厳しい判定かもしれないです。必要に応じて調整すると良いかと思います。

入力モード切り替えボタンの設定

日本語入力の切り替えですが、残念ながらzmkでは変換や無変換キーが使えないようです。(下のリンクのInternatianalの部分)

zmk.dev

(PC側のソフトウエアを介して、変換と無変換を設定できる模様ですが私は未検証です)

そのため、Windowsの全角半角キーを押したようなトグル操作としました。文字入力切り替えは、LinuxMacWindowsで共通にしたかったのでCtrl + spaceとしました。

同時にレイヤも切り替えれると便利です。そのため、マクロとして次を設定し、それを呼び出すようにしました。

macro_LCSP4: macro_LCSP4{
compatible = "zmk,behavior-macro";
label = "macro_LCSP4";
#binding-cells = <0>;
bindings = <&kp LC(SPACE)>, <&tog 4>;
};

このマクロを呼び出すキーを適当な場所に設定します。

adv360.keymapでのcombo.keymapの呼び出し

先ほど準備したcombo.keymapをadv360.keymap内で呼び出しました。

#include "combos.keymap"

keymapを変更するたびに、このinclude文を追加する必要があります。

macros.dtsiはデフォルトでinclude文が書かれるので大丈夫です。

注意点

常にキーボードのモードとPC側のモードを一致させる必要があります。 たまに何かのはずみで、PCは直接入力、キーボードは親指シフトのモードになることがあり、慣れないうちは混乱しますが、もう慣れました。

"、"の位置

基本的にデフォルトのままが一番だとおもいますが、右手小指の上段"、"の位置は","と入れ替えるのも手かと思います。

、のマクロ名はJPCOMMA1

,のマクロ名はJPCOMMA2

としています。変更方法は、キーマップのページで以下の様に修正し、更新されたadv360.keymapに、忘れずに#include "combos.keymap"の一文を追加すればOKです。