Home About Contact
InDesign , ExtendScript , DTP

InDesign CS5 のExtendScriptをターミナルから実行する(Mac OS X)

ターミナルから InDesign CS5 用スクリプトが実行する方法です。 この方法を使えば、ESTKを起動しなくても ExtendScript をターミナルから実行できるので、vim などでコードを書いていると便利な場合があります。 特にESTKのテキスト編集機能は気に入らない場合には。

一番簡単な例

foo ユーザの ~/tmp.jsx (/Users/foo/tmp.jsx) にあるスクリプトを実行したい場合のAppleScript。

tell application "Adobe InDesign CS5"
   do script file ("/Users/foo/tmp.jsx" as POSIX file) language javascript
end tell

これで実行できます。

以下のように...

$ osascript hello.applescript

改良する

先ほどのAppleScriptコードでは、 実行対象が /Users/foo/tmp.jsx に固定されてしまうので、不便。

任意の場所、任意のファイル名をもつ hoge.jsx を実行できるようにするには、 pythonなどでこのコードを生成すればよい。 このとき 状況に応じて、起動する jsx のパスを書き換えるようにする。

ind.py

import sys 
import os

target = "Adobe InDesign CS5"

template = """tell application "%s"
do script file ("%s" as POSIX file) language javascript
end tell"""

if len(sys.argv)>1 :
    filename = sys.argv[1]
    jsxpath = os.path.join(os.getcwd(),filename)
    print template % (target,jsxpath)

target を書き換えれば InDesign CS4 用としても使えると思われる。 たぶん、target = "Adobe InDesign CS4" ではないかと(未確認)。

ちなみに、ESTK 経由でjsx を起動する場合は、 jsx ファイルの先頭に以下のような記述を入れると

 #target "InDesign-6.0"

適切なアプリケーション(ここではInDesign のCS4)を選んでくれます。

AppleScriptによるアプリ指定文字列と ESTKの #target による指定文字列は異なる点に注意が必要。

ind コマンドをつくる

ind.py を起動するためのシェルスクリプト. パスの通ったディレクトリに配置(~/bin/ind など).

#!/bin/bash
tmpfile=~/_tmp.applescript
python ~/bin/ind.py $* > $tmpfile
osascript $tmpfile
rm -f $tmpfile

使い方

ind にパスを通した上で、以下のように実行すればOK. ここでは、~(ホームディレクトリ上)で実行していますが、 どのディレクトリにいてもjsxを即実行できます。

$ cd ~/
$ cat tmp.jsx
alert('hello world!');
$ ind tmp.jsx