トップ «前の日記(2017年09月11日) 最新 次の日記(2017年11月27日)» 編集

KeN's GNU/Linux Diary


2017年11月17日

_ [indesign] APFS+InDesignのスクリプトウィンドウの組み合わせバグをなんとかする

DTP作業用のmacを新調。すでに周知されているとおりInDesign CS6が動かなくなっているので、InDesign CC 2017をひとまず次の安定版ターゲットとすべくいろいろと立ち回っている。

macはもともとSierraが入っていたところに移行失敗でやむなくHigh Sierraになってしまったのだが、例のAPFS化により、InDesignのスクリプトウィンドウが困ったことになった。

本来は次のように辞書順にスクリプトファイルが並ぶ。

photo

これが、High Sierra環境だと、次のようになる。

photo

従来はOSから返るディレクトリのファイルエントリが辞書順になっていたのが、APFSになって生のハッシュ順になってしまったということらしい。Linuxでスクリプトを書いていた身からすると「フツーsortしてから加工を始めるだろ」と思うのだが、Adobeの開発は辞書順で返ってくる前提しか考えていなかったようだ。

APFSでない環境あるいはファイルシステムであればこの現象は発生しない。

InDesign CC 2017、2018両方で確認したこの現象についてはAdobeのチャットサポート経由で伝えており、たぶん2018では直るのではないかと、薄い期待を込めて思う。2017にも入れてほしい、とはお願いした。

ともあれ、このままでは何かと困るので、同等のスクリプトウィンドウを2時間ほどで作ってみた。こんなかんじ。


photo

Hacking InDesign with JavaScriptdialogScriptWindow.jsxとして置いた。

app.scriptPreferences.scriptsFolderはユーザー環境のほうしか見てくれないのでどうしたものかと思っていたのだが、scriptsListならアプリケーション・ユーザー環境両方のスクリプトファイルのパス一覧を配列で返してくれるので、これを加工することにした。しかも、scriptsListを実行した瞬間にパスを読み直してくれるようなので、ファイル追加にも対応できる。

scriptsListはちょっと変わった配列になっていて、

 [ "アプリケーション:Scripts Panel:Samples:JavaScript:AddGuides.jsx",
   "/Application/Adobe%20InDesign%20CC%202017/Scripts/Scripts%20Panel/Samples/JavaScript/AddGuides.jsx" ]
 [ ..., ... ]
 ...

のように、1つめに表示用フレンドリーなパス、2つめに実際のFile URIを格納する配列の配列という形となっている。:なのはたぶんmacだからで、Windowsだと違いそうだが、いずれにせよAPFS以外なら普通にスクリプトウィンドウを使えばよいので構わないだろう。

APFSの影響でこのscriptsListはバラバラな順序になってしまっているので、1つめのパス名に従ってソートした上で、関係ないファイルは飛ばしてツリー化する。applescriptも私は使わないので、JavaScript系のファイルのみにした。

ツリー構成(TreeView)はあまり情報がなくて苦労したのだが、要は枝を持つものはnode、端となるものはitemとして追加すればいいItemListの延長線だった。

TreeViewのonDoubleClickイベントはオブジェクトモデルビューアに載っていない。最初迂闊にalertを呼び出してみたら、初期描画のときにもなぜかこのイベントが呼び出されるようで、ひどい目にあった。

実際のスクリプト呼び出しはdoScriptを使ってscriptsListのFile URIを実行するだけで変わったことは何もしていない。

あとはInDesign CC 2017のUI文字が大きすぎる(13pt)ので9ptになるようにTreeViewに指定してみているのだが、どうもこれは無視されるようだ。

ということで、早くこんなツールがなくて済むようにバグ修正が待たれる。