Tell me, Watson

自己満ライフログの垂れ流し

Applescriptで句読点切り替えの自動化

最終更新日:20191009

ミッション

  • 句読点切り替えがめんどくさいから自動化したい.

動機

  • 論文を書くときは「,.」なのだけど,日常生活では「,。」を使う.いちいち設定押して切り替えるのがめんどくさいから,スクリプト化+Better Touch Toolでワンタッチ切り替えしよう.

参考ページ

スクリプト

tell application "System Preferences"
    set current pane to pane "com.apple.preference.keyboard"
    reveal anchor "InputSources" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events"
    if not UI elements enabled then
        set UI element enableld to true
    end if
    tell tab group 1 of window 1 of application process "System Preferences"
        every UI element
        tell table 1 of scroll area 1
            select item 1 of (every row whose (name of UI element 1 is "日本語"))
        end tell
        tell pop up button 4 of scroll area 2
            click
            tell menu 1
                if selected of menu item 2 then
                    click menu item 4
                else
                    click menu item 2
                end if
            end tell
        end tell
    end tell
end tell
  • 構造としては非常に簡単で,
    1. System Preferences.appを起動して,キーボード設定の画面を表示させ,
    2. System Events.appを起動して,所定の処理を指示する.このときUI elementを参照しているとのこと.これでUIが変わっても適切に参照してくれるそうな,多分.
  • これについてAutomataでスクリプトをアプリケーションとして保存したのち,Better Touch Toolでワンタッチで起動するようにした(とりあえず「^ + .」で起動するようにしました).
  • しかし何度か調子に乗って高速で切り替えていると,「正しくなインデックスです」とエラーを返されます....どうやらコードに問題はなく,何かの拍子に検索欄に「.」などが入るとそうなるみたい.まあそこまで頻繁にスイッチするわけではないからいいのか...

20191009追記:catalinaでUI elementの構造が変わったので,微調整.オリジナリティが出たぜ,万歳!

  • tell ディレクトリ深層 of ひとつ上 of ひとつ上 of …ってやっていけばよかったのね.
  • その都度UI elementでリストを取得していくのがポイント.めんどいけど,これは応用できる! qiita.com

sakuraorange.minibird.jp

tell application "System Preferences"
    set current pane to pane id "com.apple.preference.keyboard"
    reveal anchor "InputSources" of pane id "com.apple.preference.keyboard"
end tell

tell application "System Events"
    tell splitter group 1 of group 2 of tab group 1 of window "キーボード" of application process "System Preferences"
        tell table 1 of scroll area 1
            select item 1 of (every row whose (name of UI element 1 is "日本語"))
        end tell
        tell pop up button 4 of scroll area 2
            click
            tell menu 1
                if selected of menu item 2 then
                    click menu item 4
                else
                    click menu item 2
                end if
            end tell
        end tell
    end tell
end tell

関係ない(ある?)けど追記

windowsは以下

ソリューション

lablabkun.hatenablog.com スクリプト化するまでもなかったぜ. ショートカットキーにあてがえばいいだけだね.自分は,ctrl+F1で切り替えるようにした. なんだかんだ拡張性が高くていいね,windows.ただキーボードショートカットが,依然としていまひとつ慣れない…

Windowsの場合はこちら

ミッション

句読点の切り替えを一発で行う.

ソリューション

lablabkun.hatenablog.com スクリプト化するまでもなかったぜ. ショートカットキーにあてがえばいいだけだね.自分は,ctrl+F1で切り替えるようにした. なんだかんだ拡張性が高くていいね,windows.ただキーボードショートカットが,依然としていまひとつ慣れない…