やっすいUSBテンキーから各種マクロを実行。StreamDeckたっけぇなと思っているなら工夫でなんとかするしかない。
ふたつのユーティリティを組み合わせます。
#インストールするもの
-
Karabiner-elements
無償で使えますが、スポンサーになったりワンショットで寄付($10)もできます
キーボード、マウスなどのデバイスを自由にカスタムできるユーティリティ。有志の作った設定を読み込んで使ったりできますが、今回はJSONを書く必要があります。 -
Keyboard Maestro
$36。思いつくことは大抵できちゃうMacユーザーはとりあえず入れとけユーティリティ。説明がし辛いw日本語ドキュメントが少なかったんですが、DTP Transitで分かりやすく取り上げられるようになっていて、記事も多く、もしかしたら今が始め時かもしれません。
GUIでマクロ設計ができるので、JSON触らなくてもいいこのユーティリティで処理部分を受け持ちます。メンテが楽に。
実はKeyboard Maestroにも外付けUSBデバイスのキーをトリガーにする機能がありますが、
入力したキーを捨てることができません。
キーパッドのEnterを押して自動化マクロを走らせようとすると、マクロ実行とともにEnterが入力されてしまいます。これが避けられるならKarabinerを使う必要はありませんが、このユーティリティの仕組み上無理なのかもしれない?知らんけど。そこで、その辺高機能なKarabinerでキー入力をトリガーとして、Keyboard Maestroのマクロを実行するJSONを仕込んでやります。実行部分はKeyboard Maestroなので、一度JSONを書けばあとのメンテはKeyboard Maestroでできます。
両方とも、起動・実行に際してシステム環境設定>セキュリティとプライバシーで各種権限を与えてやる必要があります。それぞれのインストール手引きに従ってください。
インストール操作自体に不安がある方はここで閉じた方が賢明です。
当たり前ですが自己責任でお願いします…ってQiitaに書くことじゃないか。
##Keyboard Maestroの設定
とりあえずマクログループを作り①、マクロ本体を作成②、③で示した「or by script」部分をプルダウンします。
「Or by URL」を選び、kmtrigger://
で始まるいくつかの行からmacro=
が続く行を選択してコピーして、どっかにペーストしてとっといてください。マクロ名でなく、UUID指定の方がいいかなぁと。
マクロ名をTEST_Macro_No1
のように当たり障りのない英数にしておけばURLエンコードされないので、一番最初のマクロ名指定されている行を使ってやればKarabinerのJSON設定ファイルで見通しがよくなりますが、KMでマクロ名を変更するとJSON書き直しです。UUID指定ならマクロ名関係ありません。
kmtrigger://macro=………
のURL_Schemesを使えば……例えばSafariのURL欄にペーストしてEnterでマクロが起動します。
詳しくはhttps://wiki.keyboardmaestro.com/manual/URL_Schemes参照。
後でこのURLを、Karabinerの実行部分でopen
コマンドの引数に指定します。
マクロ本体の作成方法は他のサイトを参照してください。できることが多すぎて簡単には説明できない。
##Karabiner-elementsの設定
インストールできていれば、メニューバーのカラビナアイコンからPreferences...を呼び出せます。
※その下のLaunch EventViewer...もあとで使用します。
Devicesタブを開き、接続したUSBキーパッドにチェックを入れて操作できるようにしておきます。
また、ここに表示されているVendor IDとProduct IDはメモしておいてください。このIDを設定ファイル内で指定することで、対象をこのデバイスのみに限定させます。※でないとメインキーボードのテンキー押したら発動しちゃうから。
次にMiscタブを開き、Open config folderを押して設定ファイルのあるディレクトリを開きます。
assets/complex_modificationsフォルダ内に、数字.json
ファイルを作成します。キャプでは複数ありますが、いっこでいいです。
数字ファイル名でないとうまく読み込まれないことがあるそうで。
##Event_Viewerでキー名を確認する
では、中身を書く前に入力するキー名を取得・確認しておきます。
メニューバーのカラビナアイコンから**Launch Event Viewer...**を選択します。
外付けテンキーの使いたいキーを押し、なんという名前になっているか確認します。
Enterキーなら、return_or_enter
がそれです。
##JSONを書く
先ほど作成した数字.jsonファイルを開いて、中身を書きます。以下内容を変えて使用してください。
{"title":"バッファローテンキー","rules":[
{"description":"キー操作タイトル","manipulators":[{"conditions":[{"type":"device_if","identifiers":[{
"vendor_id":ベンダーIDを数字で,
"product_id":プロダクトIDを数字で
}]}],"from":{
"key_code":"入力するキー(後で説明)"
},"to":[{
"shell_command":"open kmtrigger://マクロ名など"
}],"type":"basic"}]},
{"description":"そのほか全部無効","manipulators":[{"conditions":[{"type":"device_if","identifiers":[{"vendor_id":ベンダーIDを数字で,"product_id":プロダクトIDを数字で}]}],"from":{"any":"key_code"},"type":"basic"}]}]}
書き換えるところは、
- title
- description
- vendor_id
- product_id
- key_code
- shell_command
に続く部分です。**""や,は正確に。特にvendor_idの数字の後の,**を消さないように注意してください。
vender_idとproduct_idは設定通して全て同じにします。
最終行のvender_idとproduct_idもちゃんと書き換えてください。
"shell_command":"open
に続いて、先にコピーしたKeyboard MaestroマクロのURL_Schemesをペーストします。これで、キー入力をちゃんと捨てて、憂いなくKeyboard Maestroマクロを実行できるようになります。
他のShellコマンドも入れられますが、brewで入れたコマンドの場合フルパスを書かないといけないこともあります。whichとかwhereisでパス取得してください。
キーごとに、真ん中の部分をコピーして増やします。こんな感じ。
{"title":"バッファローテンキー","rules":[
{"description":"キー操作タイトル1","manipulators":[{"conditions":[{"type":"device_if","identifiers":[{
"vendor_id":ベンダーIDを数字で,
"product_id":プロダクトIDを数字で
}]}],"from":{
"key_code":"入力するキー(後で説明)"
},"to":[{
"shell_command":"open kmtrigger://マクロ名など"
}],"type":"basic"}]},
{"description":"キー操作タイトル2","manipulators":[{"conditions":[{"type":"device_if","identifiers":[{
"vendor_id":ベンダーIDを数字で,
"product_id":プロダクトIDを数字で
}]}],"from":{
"key_code":"入力するキー(後で説明)"
},"to":[{
"shell_command":"open kmtrigger://マクロ名など"
}],"type":"basic"}]},
{"description":"そのほか全部無効","manipulators":[{"conditions":[{"type":"device_if","identifiers":[{"vendor_id":ベンダーIDを数字で,"product_id":プロダクトIDを数字で}]}],"from":{"any":"key_code"},"type":"basic"}]}]}
##Karabinerに読み込む
再度、KarabinerのPreferencesウインドウを開き、Complex modificationsタブからAdd ruleボタンを押します。
ここで、今書いた設定が出てこないようならJSONの記述にミスがあります。よーく確認してください。
Enable Allを押して設定ファイル全部を読み込ませるか、一つずつ有効にします。
この設定は上から順に見ていますので、設定したキー以外を無視する「そのほか全部無効」設定は、一番下になるようにUp/Downボタンで移動してください。
これで、外付けテンキーをKeyboard Maestroマクロ発動キーにすることができました。一度動作確認したら、キーを増やしたい時以外はKarabinerもJSONも触らずKeyboard Maestroマクロをいじるだけです。
マクロ名を変えても、UUID(kmtrigger://macro=6D2F782A-3C78-4311-B6BC-40418BE7F4AD
みたいな指定)なら同じマクロを参照しますから、かなりラクにメンテナンスできると思います。
Keyboard Maestroならかなりの自動化が可能なので、面白そうだと思ったら試してみるといいでしょう。
##注意点
今のところ、全く同じデバイスを使い分ける…ということは、vendor_idやproduct_idがダブる場合は非常に難しいようです。
NumLock対策はしていません。できるかどうかまで調べていない。
「00」キー対策はKarabinerの普通の機能としてできそうですが、今はキーが足りてるので無視しています。