【hammerspoon】Big Sur のコントロールセンターをショートカットで呼び出す

2021年4月15日

macOS 11 Big Sur から、Mac にもコントロールセンターが登場した。
 メニューバーの右端のほうにある、スイッチみたいなアイコンである。

wifi やら音量やらディスプレイの輝度やらを一枚のパネルで操作できる。
「システム環境設定」>「Dockとメニューバー」でカスタマイズすることも出来る。

これを呼び出すショートカットがあるはず、と思ってしばらく捜してたんだけど、見つからないのである。

ショートカットはないっぽい

ググったんだけど、どうやらコントロールセンターを出すキーボード・ショートカットはないみたいだった。
 ただ、Automator で動作を記録してショートカットを作成した、という書きこみを見つけた。筆者もさっそく試してみたんだけど、なんかエラーが出ちゃってうまくいかない。
 どうもやり方が違うらしいのだが、結局わからんかった。

しょうがないので hammerspoon で操作できないか試した。
 hammerspoon は lua という言語で Mac にホットキーとかを設定できるユーティリティである。

🔗 Hammerspoon

インストールするとホームフォルダに「.hammerspoon」という隠しフォルダが生成される。そのなかにある「init.lua」というファイルを、CotEditor などで開いて、コードを書いていく。

hammerspoon で設定してみる

コントロールセンターのアイコンが、どの辺にあるか、座標を調べて、そこをクリックする、というコードになるかと思う。

ポインタの位置を調べる最も簡単な方法は、スクリーショットで選択範囲を選んで撮影するモードのやつだろう。デフォルトのショートカットだと、[ command ] + [ shift ] + [ 4 ]だ。このモードに入ると、ポインタの近くに x , y の座標が表示されるので、これをコントロールセンターのアイコンの上に持っていき、数字をメモっておく。
 筆者の MacBook Air だと x が 1256、y が 13 ぐらいだった。

また、コントロールセンターを呼び出すショートカットは [ command ] + [ conrol ] + [ ↓ ]とした。

📝 init.lua

hs.hotkey.bind({"ctrl", "cmd", "alt"}, "down", function()
    local mouse = hs.mouse.getRelativePosition()
    local point = {x=1340, y=13}
    hs.eventtap.leftClick(point, 0)
    hs.mouse.setRelativePosition(mouse)
end)

コントロールセンターの座標はlocal point = {x=1256, y=13}を書きかえる。
 ショートカットを変更する場合は、一行目を変える。ctrl はコントロールキー、cmd はコマンドキーをあらわす。オプションキーは alt、fnキーは fn。
 修飾キーは { } 内で指定する。ダブルクォーテーションで囲み、複数指定する場合はカンマで区切る。筆者の場合は{"ctrl", "cmd"}だ。
 その次の"down"は矢印キーの下キーのこと。
 修飾キー以外のキーは、だいたいそのままだ。K キーなら、"k"。I キーなら"i"
 キーの名称は、たぶんだけど下記のリンクに記載されているもので大丈夫だと思う。

🔗 Hammerspoon docs: hs.keycodes

上記コードを init.lua に書きこみ、メニューバーのハンマーのアイコンから「Reload Config」を実行する。
 筆者の環境では、どうにか動作している。

ただ、ポインタがコントロールセンターのアイコンのところまで動いちゃうのがイマイチなんだよなぁ。
(修正してみた。21.02.14)
 まぁ、コントロールセンターのショートカットはいつか Apple によって実装されるような気がする。それまで待つ、というのもありだな。