Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Spaces設定変更スクリプト

タグ: Mac Leopard Spaces AppleScript

システム環境設定を開くことなく、アプリケーションの操作スペース割り当てを手早く切り替える方法を模索していたところ、 MacScripter で面白そうなものを見つけた。

http://bbs.applescript.net/viewtopic.php?id=23453

ここに上げられているスクリプトを実行すると、こんなダイアログが表示される。

操作スペース選択ダイアログ

「All」をAssignすると、最前面のアプリケーション(この画像の場合はスクリプトエディタ)は「すべての操作スペース」に割り当てられる。
各数字「n」を選んだ場合、アプリケーションは「操作スペース n」に割り当てられる。
そして「None」は、おそらく操作スペースの割り当てを解除するためのものだと思うが、私の環境では選択しても特に何も起こらなかった。
スペースの割り当てに成功した場合、画面はF8キーを押した状態(すべての操作スペースを表示した状態)に遷移する。

以上、そのまま実行したときの挙動はこれで全てだが、他にもSpacesに対する操作はあらかた記述されているので、SpacesをAppleScriptから操りたいと考えたときには参考になるだろう。

さて、機能的には申し分ないが、私としては「None」と「All」が欲しかったので、「None」が動作しない現状には些か不満が残る。
何故動作しないのか、イベントログを確認してみると、文字列系の問題であることを臭わせるエラーが発生していた。

run script "{safari|:1, |com.apple.scripteditor2|:1} のタイ}" (*choose_space_for_application (com.apple.scripteditor2) Error (-2741): “,” または “}” があるべきところですが "|" が見つかりました。*)

そしてエラー箇所の近くにはこのようなログが残っている。

{|com.apple.safari:1, |com.apple.scripteditor2:1}

で、分かったのだが、このスクリプトは

get application bindings of spaces preferences of expose preferences

の結果を文字列化するために、一度わざと文字列化を失敗させ、そのエラー文字列から必要な部分だけを抜き出すという手法をとっている。
しかしそのエラー文字列は環境によってフォーマットが異なるため、日本語環境では「のタイ」などというおかしな抜き出し方をすることになってしまったのだ。
というわけで、日本語のエラーメッセージ

{|com.apple.safari:1, |com.apple.scripteditor2:1} のタイプを string に変換できません。

に合わせて文字列抜き出し箇所を修正する。
これは二箇所ある。


- set app_bindings to my string_to_list(text 13 thru -20 of error_string, ", ")
+ set app_bindings to my string_to_list(text 1 thru -24 of error_string, ", ")

でまあ、これだけで良さそうなものだが、なぜかもう一箇所別の修正が必要なので、そこも書き換える。


- my set_spaces_application_bindings(run script "{" & (my list_to_string(new_bindings, ", ")) & "}")
+ my set_spaces_application_bindings(run script my list_to_string(new_bindings, ", "))

これでめでたく日本語環境でも「None」が動作するようになった。
あとは自分が使いやすいように加工して、スクリプトメニューにでも置いておこう。

スクリプトメニュー

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/45-f051ec03
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。