デフォルトのテキストエディタを設定するメモ

なんでもかんでもTextEditが開いてうざい、私はTextWranglerを使いたいんだ、という話。
もちろん拡張子ごとに「このアプリケーションで開く」の「すべてを変更...」ボタンを押しまくればいいのですが、テキストエディタで扱う拡張子なんて無数にあるわけで流石に切りがないですからね。

前提知識としてUTIについてざっと書きますと、OSXでは拡張子→UTI→アプリケーションって具合に関連付けが管理されています。以前はクリエーターコードだのなんだの複雑だったのですが、無くなってしまいました。便利だったのですけどねクリエーターコード……。で、「このアプリケーションで開く」はUTIをすっ飛ばしていきなり拡張子→アプリケーションの関連付けを行うわけです。そうではなくて、UTI→アプリケーションの設定を変えることができれば、無数にある拡張子ごとにちまちました設定をしなくて済みます。詳細は検索してください。

問題はこの設定を行う標準添付のUIやコマンドがないという一点のみで、それ用のアプリケーションが必要になります。今まで使っていたRCDefaultAppの最終更新日が流石に昔になってきて不安だったので、今回はdutiを使うことにしました。

まず、(「このアプリケーションで開く」を設定していないファイルを使って)関連するUTIを調べます。

$ mdls  -name kMDItemContentTypeTree てきとうなテキストファイル
kMDItemContentTypeTree = (
    "com.apple.traditional-mac-plain-text",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)

↑の各UTIのデフォルトアプリケーションを設定すればいいわけです。あ、UTIは継承関係を持ってまして、端折りますと、このファイルはcom.apple.traditional-mac-plain-textではあるのですが、開く他の各種操作にはこれ全部の設定が絡んでくるってことです。

まず現在のデフォルトアプリケーションを調べましょう。適当にそれっぽいpublic.textから。

$ duti -d public.text
com.apple.TextEdit

出ました憎きTextEdit。この設定を書き換えてしまいましょう。

$ duti -s com.barebones.textwrangler public.data editor
$ duti -s com.barebones.textwrangler public.text editor

com.apple.TextEditはTextEditのバンドル名、com.barebones.textwranglerはTextWranglerのバンドル名、editorはdutiのマニュアルから。editor以外にもいくつかあるみたいです。

適当なファイルを色々開いてみて、大体いい感じになるまで上記手順を繰り返せば完了です。全部やらなくてもpublic.dataとpublic.textだけでほとんど間に合うと思います。関連付けなんて大雑把でいいですよね。

あと、時々、tarアーカイブなんかを展開して出てきた拡張子なしのファイル(READMEだのINSTALLだの)が「Unix 実行ファイル」(UTIはpublic.unix-executable)と推論されていることがあるのですが、これはなぜか実行可能属性が付いてしまっていることが原因ですので、chmod -xしてやればpublic.dataになります。うっかりダブルクリックするとshで実行されてしまって危ないのですよこれが……。