OS X maverics で Fn キーの機能を簡単に切り替えられるようにする
やりたいこと
FTL では F1, F2, etc. のキーを多用するが, 普段は明暗/音量切替を多用する為, ファンクションキーのモードを簡単に切り替えたい.
この設定の切り替え.
AppleScript
アプリケーションでは既に Mac App Store - Palua があるが, 環境設定の切り替えだけなのでこれって AppleScript でも出来るよねーと思って書こうと思ったらこちらも既にあった.
--Check if GUI Scripting is Enabled tell application "System Events" if not UI elements enabled then set UI elements enabled to true end if end tell --Enable/Disable "Use all F1, F2, etc. keys as standard function keys" option in Keyboard & Mouse Preference pane and close System Preferences tell application "System Events" tell application "System Preferences" reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard" end tell click checkbox 1 of tab group 1 of window 1 of application process "System Preferences" end tell if application "System Preferences" is running then tell application "System Preferences" to quit end if
osx - Enable/Disable Fn keys from the command line on the Mac - Stack Overflow
後はこの Script を簡単に呼び出せるようにすればいい.
Automator での実装
Quicksilver も Alfred も使っていないので, Spotlight + Automator での実装を行う.
まず Automator を起動し, Application として新しいワークフローを立ち上げる.
次に, Action の中から "Run AppleScript" を探し出し, 右ペインへドラッグ & ドロップする. ("AppleScript" などで検索するとすぐ見つかる.)
そして, テキストエリア内に先程のコードをちょっと短くした*1 以下の AppleScript コードを書き込む.
--Enable/Disable "Use all F1, F2, etc. keys as standard function keys" option in Keyboard Preference pane and close System Preferences tell application "System Events" tell application "System Preferences" reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard" end tell click checkbox 1 of tab group 1 of window 1 of application process "System Preferences" end tell if application "System Preferences" is running then tell application "System Preferences" to quit end if
また今回は引数不要の為, テキストエリア下の Options 内の "Ignore this action's input" にチェックを入れる.
テスト実行すると, Dock 内の環境設定がちょっと起動した後にすぐ終了する筈. テスト実行の度に F1 等を押してみて Fn 機能が切り替わっているようなら成功.
Automator Application の書き出しと実行
Automator 上での動作が確認できたら, テキトーにファイル名を付けて保存する. (自分が呼び出し易い名前にしとく. ここでは "change_fn_mode" とした.)
保存したら今度は spotlight から呼び出して実行してみる.
きっとまたエラーが出るか, もしくは Accessibility の設定を促す画面が出る.
再度, 環境設定 > セキュリティとプライバシー > プライバシータブ から, アクセシビリティを選択し, 今度は自分が作った Application ファイル名にチェックを付ける.
これで Application も動作するようになる筈だ.
自分がハマった所
- Mavericks になって Accessibility の設定箇所が変わった.
- Automator Application内のコードや設定を変更する度に, System Preferences 内の Accessibility のチェックを付け直さないと再度エラーが出る.
- Debugで設定を変更する度にエラーが出て困った.
- AppleScriptの楽な呼び出し方が未だに分からない.
- 今回の実装は, はじめは QuickSilver や Alfred で試したのだが上手く行かなかった. 多分その際にも Accessibility 周りで引っ掛かってたのだと思う.
- Alfred は PowerPack を導入しないとフルに使えない気がしつつ, 尚且つそこまでメリットをまだ感じられないのでイマイチ気が乗らない.
*1:Mavericks では UI elements enabled を Script 内で有効に出来ない模様.