Glee に関連付けをするとアイコンがバージョンごとに変わるのはどうして?
ファイルとアプリケーションを関連付けている OS X の仕組みを利用しています。
InDesign.app は、InDesign ドキュメントに「ファイルタイプ」「拡張子 .indd」の2種類を設定しています。一方で、OS X は拡張子を最優先にするので、その拡張子とアイコンは1対1対応となります。したがって、.indd が InDesign に関連付けされている場合、indd に表示されるアイコンは最も新しいバージョンのアイコンだけになり、ファイルタイプは無視されてしまいます。
Glee は InDesign ドキュメントに「ファイルタイプ」の1種類だけを設定しています。こうして .indd を Glee に関連付けると、ファイルタイプが優先され、アイコンがそれぞれのファイルタイプに対応したものになるのです。InDesign がバージョンごとにファイルタイプを変えてくれているおかげで、これが可能になっています。参照:indd のファイルタイプ一覧
CC 以降のアイコンが同じなのは?
InDesign は CC 以降もファイルタイプを変えているものの、アイコン自体は同じになってしまいました。Glee は InDesign と同じアイコンを表示するようにしているので、どうしても同じになってしまいます。
Glee に関連付けをして表示されるアイコンファイルは、Glee.app の中にあります(アプリケーションパッケージの内容を表示して Contents > Resources)。そこにあるアイコンファイルを差し替えることで、CC 以降のアイコンをバージョン別に変えることは可能です。
どうやって indd のフルバージョンを調べているの?
今のところは、strings コマンドで indd からテキストを抽出し、そこから得られるドキュメントヒストリーからフルバージョンを取得しています。
indd から取得できるバージョン情報は、私が把握している限りでは4種類あります。
- ファイル先頭あたりにバイナリデータとしてマイナーバージョンまでの情報があります。Hex すると 10 進数のバージョン値が表れるので面白いです。Windows ではバージョンごとにアイコンが変わりますが、おそらくここを参照しているものと思われます。
- XMP の CreatorTool タグ。これはアプリケーション名なので、取得できるのはメジャーバージョンくらいです。
- XMP の History 関連のタグ。ここから取得できるのもメジャーバージョンくらいです。
- XMP ではないところにあるドキュメントヒストリー。ここにフルバージョンが記述されています。
マイナーバージョンまでなら、ファイル先頭をほんの少しだけバイナリで取得すればいいので速いです。XMP 外のドキュメントヒストリーは記述箇所が不定で、さらに古いデータが残っていると入れ子状になっていたりするので、とにかく読み込んで調べるしかありません。indd のファイルサイズが大きいと読み込むだけで時間がかかるので、どこまで読み込むかの勘所が難しいです。Glee はこれまで調整を何度も繰り返してきました。今のところ、ほとんどの indd に対応できていると思います。でも、もっと良い方法があるといいなぁ。