ひよこになりたい

Programming Server Network Security CTF and so on

Macの任意のアプリの表示をショートカットキー1つでトグル切り替えできるようにする

Mac標準ターミナルをいつでもどこでも呼び出したい(表示・非表示を切り替えてすぐにターミナルを使いたい)と思い方法を色々探ってみたのですが、なかなかいい方法が見つからなかったのでAppleScriptスクリプトを書きKarabiner Elementsに設定することで実現したのでメモ。

Macの標準機能ではCmd+Hでウインドウを隠す動作が可能ですが、隠したあとウインドウを呼び戻すのは少し困難です。また、隠したウインドウを再表示することも難しいので、これまではiTerm2のような別ターミナルの機能で実現していました。

今回は、Terminalが最前面にあるときに、Cmd+`を押すと非表示になり、もう一度押すと最前面に戻ってくるような動作にしています。

これを応用してTerminal以外にも任意のアプリケーションに適用することができます。

前提

  • macOS
    • 今回は Mojave 10.14.6
  • Karabiner-Elements(Karabiner)
    • 今回は12.7.0

が使えること

方法

Scriptの作成

以下のApple ScriptをKarabinerの.config配下に保存します。

$ mkdir -p ~/.config/karabiner/scripts
$ vim toggle_terminal.script 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
set name_of_app to "Terminal"

tell application "System Events"
    get name of application processes whose frontmost is true and visible is true
end tell

if Result contains name_of_app then
    tell application "System Events"
        set visible of process name_of_app to false
    end tell
else
    tell application "System Events"
        set frontmost of process name_of_app to true
        set visible of process name_of_app to true
    end tell
end if
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ためしに実行してみる

$ osascript ~/.config/karabiner/scripts/toggle_terminal.script
# Terminalが消える # 

set name_of_app to "Terminal" のTerminalのところを別の名前にしてもOK

これを任意のショートカットキーに紐付けるだけです。

Karabinerに登録

以下のファイルを作成します

$ vim ~/.config/karabiner/assets/complex_modifications/terminal.json
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{
  "title": "スーパーすごいショートカット",
  "rules": [
    {
      "description": "TerminalのShow/Hide",
      "manipulators": [
        {
          "from": {
            "key_code": "grave_accent_and_tilde",
            "modifiers": {
              "mandatory": [
                "left_command"
              ]
            }
          },
          "to": [
            {
              "shell_command": "osascript ~/.config/karabiner/scripts/toggle_terminal.script"
            }
          ],
          "type": "basic"
        }
      ]
    }
  ]
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

KarabinerのJSON記述方法はおググりを🙏

あとはKarabinerのPreference>Complex Modifications>Add Rule>にターミナルの〜があるのでEnableにするだけ

補足

Apple Scriptむずい