トグル方式でTouch Bar表示項目の入れ替えを行うAppleScript

  1. 主題
    トグル方式でTouch Bar表示項目の入れ替えを行うAppleScriptについて述べる。(特にBar Noneとの併用を念頭に置く)

  2. 背景
    筆者はMacBook Pro 2018 15インチモデルを使っている。このMacに乗り換え(2018.08.17)てすぐ、謎の現象としてTwitterに記録していたことがあった。短期間のうちにそれは、左側Shiftキーを押すときに、意図せずTouch Bar上のEscに触れていることが原因だと推定するに至った。
    以来、Twitterを振り返れば、Touch Barに対する悪口雑言は枚挙にいとまがない。しかし約めて言えば、意図しない誤操作はキーボード右側でも発生した。そう、意図せずsiriを呼び出してしまうアレなどである。
    しかしながら、恥ずかしながらでもあるが、一応は開発者の端くれであるのにも関わらず、文句を付けるだけで、今日まで具体的な改善策は生み出さなかった。
    そこに現れたのがBar Noneである。ただ、このAppleに対する挑戦状とも受け取り得る小さなユーティリティは、真剣にTouch Barの動作を止める(正確にはfnキーを押さないと有効にならなくする)
    ところで、fnキーはTouch Barの機能入れ替えキーでもある。矛盾しているようだが、ここで本来使いたいTouch Barの機能があったときに、fnキーを押して使おうとしても永遠に出会えないというジレンマが生じることになる。
    出会えない機能に出会うには、システム環境設定を操作してキーボードペインを開き、Touch Barに表示する項目:fnキーを押して:の右横にあるプルダウンメニューから好みのものを選べば良い。だが、それすら自分でやるのは面倒だという超モノグサ党のために、本AppleScriptはある。(笑)

  3. AppleScript
    スクリプトを以下に示す。

    property fnMode : "Appコントロール" --スクリプト終了後も値を保持させる
    
    if fnMode is "F1F2" then
    
        --システム環境設定のキーボードペインを開く
        tell application "System Preferences"
            launch
            activate
            set the current pane to pane id "com.apple.preference.keyboard"
    
            --get the name of every anchor of pane id "com.apple.preference.keyboard"
    
            reveal (first anchor of current pane whose name is "keyboardTab")
        end tell
    
        delay 0.5 --"正しくないインデックス"エラー回避
    
        --System Events経由でシステム環境設定を操作
        tell application "System Events" to tell process "System Preferences"
    
            --Touch Barに表示する項目のプルダウン設定
            tell pop up button 2 of tab group 1 of window 1
                click
                click menu item 1 of menu 1 --Appコントロール
            end tell
    
            --Fnキーを押してのプルダウン設定(予備)
            (*
            tell pop up button 3 of tab group 1 of window 1
                click
                click menu item 2 of menu 1 --F1,F2などのキー
            end tell
            *)
    
        end tell
    
        tell application "System Preferences" to quit
    
        set fnMode to "Appコントロール" --トグルなので、設定名を入れ替え
    
    else if fnMode is "Appコントロール" then
    
        --システム環境設定のキーボードペインを開く
        tell application "System Preferences"
            launch
            activate
    
            set the current pane to pane id "com.apple.preference.keyboard"
    
            --get the name of every anchor of pane id "com.apple.preference.keyboard"
    
            reveal (first anchor of current pane whose name is "keyboardTab")
        end tell
    
        delay 0.5 --"正しくないインデックス"エラー回避
    
        --System Events経由でシステム環境設定を操作
        tell application "System Events" to tell process "System Preferences"
    
            --Touch Barに表示する項目のプルダウン設定
            tell pop up button 2 of tab group 1 of window 1
                click
                click menu item 3 of menu 1 --F1, F2などのキー
            end tell
    
            --Fnキーを押してのプルダウン設定(予備)
            (*
            tell pop up button 3 of tab group 1 of window 1
                click
                click menu item 1 of menu 1 --Appコントロールを表示
            end tell
            *)
    
        end tell
    
        tell application "System Preferences" to quit
    
        set fnMode to "F1F2" --トグルなので、設定名を入れ替え
    
    end if

    上記スクリプトをScriptEditorで開く(注)

    (注)リンクを開くと、2段階の確認ダイアログが表示される。(下図)

    ScriptEditorを開く確認ダイアログ


    Script作成確認ダイアログ

    最初に開くのは、ScriptEditorを開くかどうかを確認するダイアログ。次に開くのはスクリプトの開発元が不明であることを警告するダイアログである。後者のダイアログについて、筆者を信頼するかしないかはお任せするが、このAppleScriptが危険なものか判断できない人は使わないで戴きたい。

    なお、本スクリプトをmacOS Mojave以降で実行するには、システム環境設定とSystem Eventsの2つに対するアクセス権が必要である。

    システム環境設定の操作許可ダイアログ


    System Eventsの操作許可ダイアログ

  4. スクリプトメニュー(おまけ)
    筆者は本スクリプトをメニューバーからアクセスできるようにスクリプトメニューを稼働させている。そのやり方についておさらいして置く。

    スクリプトメニューを稼働させるには、下図の通り、スクリプトエディタの一般環境設定にあるメニューバーにスクリプトメニューを表示チェックボックスをオンにすれば良い。

    スクリプトエディタの一般環境設定

    また、スクリプトを入れるフォルダは、下図の通り、ユーザ・スクリプト・フォルダを開く操作を行うことにより、フォルダがあれば、そのフォルダが開き、なければ作られる。ちなみに作られる場所はホームディレクトリ直下のライブラリフォルダ内である。

    スクリプトフォルダの作成

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL