配列のキーボードを使用している。配列のキーボードには「英数」キーと「かな」キーがないので、スペースキーを挟んで左右にあるコマンドキーに、「英数」「かな」を割り当てていた。そのためのコードも公開していた。林檎コンピュータ上記の記事のコードは、コマンドを押したことで、英数やかなキーを押したことにして、入力ソースを変えていた。入力ソースを扱う関数があったのである。上記の記事のコードは書き直したほうがいいのではないか、と思いいたった。読み返すといろいろ間違えてるし。ホットキーなどを設定できるユーティリティである。Hammerspoonインストールするとホームフォルダに「.hammerspoon」という隠しフォルダが生成される。開いて、コードを書いていく。hs.alert.show(method)end)上記のように書いてみる。いうキーボード・ショートカットで、現在使用しているインプットメソッド名を表示できるようになるのだ。いう関数でインプットメソッド名を取得して、hs.alert.show()という関数で画面に表示している。hs.keycodes上記リンクのドキュメントによると、setMethod(インプットメソッド名)で入力ソースを変更できるとのこと。「システム環境設定」>「キーボード」内の「入力ソース」タブで、使用中の入力ソースを調べられる。今回は右コマンドで日本語入力プログラムの「ひらがな」、左コマンドで日本語入力プログラムの「英字」を設定してみたい。入力ソース表示ショートカット」で入力ソース名を調べておく。「ひらがな」の場合、入力ソース名は「Hiragana」、「英字」の場合は「Romaji」だった。eikanaEvent)eikana:start()実際に書いてみるとこのようになった。U.S.を呼び出す場合だ。場合は「nil」と返ってくる。インプットメソッドではない、ということだろう。この場合は、hs.keycodes.setMethod('Romaji')の部分を、hs.keycodes.setLayout("U.S.")と書き直す。メソッドではなく、レイアウトらしい。してから、ショートカットキーを押せば出てくる。行目、hs.keycodes.mapはキーマップのテーブルを返してくれる。ここでは「map」という変数に入れており、map['cmd']で左のコマンドのキーコードが取り出せる。右のコマンドキーならmap['rightcmd']だ。キーマップについては、下記のドキュメントにある。hs.keycodesどうであれ、コマンドに英数・かなキーを割り当てるコードはこんな感じだと思う。モディファイキーを押した時の挙動ここからは筆者のメモだ。以下のようなコードでテストしてみる。testEvent)flagtest:start()コマンドキーを押した時、キーを離した時、フラグが変わった時、三つの挙動を調べる。キーを押した時はどうなるか。コマンドキーを押してみるが、無反応である。場合はコマンドキーを押しただけでは、フラグにならないし、キーコードも返ってこない。いうショートカットを試してみると、今度は反応がある。設定した「keydown」というメッセージと、タブキーのキーコード「48」が返ってくる。コマンドキーだけでは、なんの手掛かりも得られないが、他のキーと組み合わせた時は、フラグが発生し、フラグを取得できるようになる。]が押された状態を検知できる、ということだ。]のコンビネーションの時は、入力ソースを変更して欲しくない。時は、入力ソース変更の動作には入らないよう、条件分岐するわけだ。次にキーを離した時の挙動を調べる。ほうの「hs.alert」は元のようにコメントアウトしておく。同じような反応を示した。コマンドキー単体ではまったくの無反応。タブキーなど、他のキーと組み合わせるとフラグが発生する。設定した「keyup」というメッセージと、タブキーの「48」が、キーを上げた時に返ってくる。ここでもコマンドキーのキーコードは取得できない。続いてhs.eventtap.event.types.flagsChanged内にある二箇所のコメントを外して試してみた。左コマンドキーを単体で押すと、「flagon」というメッセージと、「55」という左コマンドのキーコードが表示された。押している間はずっと表示され、指を離すと今度は「flagoff」と「55」というメッセージが返ってくる。右コマンドのキーコードは「54」だった。flagsChangedは、モディファイキーを押した時、離した時、それぞれを検知できるようだ。キーコードも返してくれる。今回の入力ソースの切り替えは、コマンドキーが押下された時ではなく、コマンドキーから指が離れた時に実行されたほうがいい。フラグがコマンドではない場合、という意味かと思うが、こう書くとコマンドキーがキーアップした瞬間を、キーコードつきで検知できるのだ。キーコンビネーションに入ると表示がすっと消える。タブキーのキーコードは表示されない。この辺になにかありそうなのだが、今の段階ではよくわからない。よるアプリの切り替えは便利である。いう懐しい名前を目にした。広告なしで見るこれしょうがないことなんだけど。QuickTime系再生ソフトでカクカクになる動画を修復する。