InDesignスクリプトアイコン

スクリプト取り消し一発!インデザインスクリプト実行後のundo(取り消し)のためのdoScript

このサイト配布InDesignスクリプトに下記のような記述のコードが頻繁に見受けられることがありますよね?

Main()
 function Main(){
  app.doScript(
   "doMain()",
   ScriptLanguage.JAVASCRIPT,
   [],
   UndoModes.fastEntireScript
  );
 }
 doMain(){
  //何か処理
 }

処理速度もアップする

Main」を呼び出してそこから、「doScript」でさらに「doMain」を呼び出しています。何故、そんなまだるっこしいことをするかというと、「doScript」の3つ目の引数「UndoModes.fastEntireScript」とは「指定されたスクリプトをアンドゥ(Undo:取り消し)のことは忘れて、処理に集中します。」という意味なのです。このスクリプトの実行方法の利点は3つあります。

  1. スクリプト処理速度がアップする(多少)
  2. 取り消し操作1回でスクリプト実行前まで戻る
  3. エラーが発生した場合、スクリプト実行前まで戻る(try処理がない場合)

1つ目の利点

まず、1つ目の利点はInDesignがアンドゥを意識しないから、処理速度がアップするみたいです(体感で130%増量くらいと思われます)。大がかりなスクリプトほど効果は増大します。

2つ目の利点

2つ目の利点がこの記事の表題のことなのですが、つまり「Ctrl+z」で一発でスクリプト実行前に戻ることができるのです。例えば拙作「wordルビ振りplus」を例にとると、通常なら下記画像のように、

最後に行った操作が取り消し対象となる

最後に処理した「ルビフラグをオンにする」動作がアンドゥ処理として記録されていますが、doScript(UndoModes.fastEntireScript)を使用すると、

取り消し対象はスクリプト実行そのもの

スクリプトの取り消し」とスクリプト自体の取り消しに相成るわけなのです。

スポンサーリンク

3つ目の利点

3つ目の利点2つ目の利点に関連してますが、万一エラーが発生すればスクリプト実行前に戻ってくれるのです。ただしtry処理をしていない場合に限ります。していないと、下記イメージのようなメッセージが表示されちゃったあと、スクリプト実行前に戻ります。私の場合はtry処理を入れて途中まででも実行したことにしています。気に食わなければ、そこでUndoするとスクリプト実行前に戻ります。

厳しめのダイアログ

引数の受け渡し方法

どうしても引数が必要な場合もあるでしょう、その場合の受け渡し方法は、

Main("文字列")
function Main(str){
 app.doScript(
  "doMain(\""+str+"\")",
  ScriptLanguage.JAVASCRIPT,
  [],
  UndoModes.fastEntireScript
 );
}
doMain(){
 //何か処理
}

このような感じでコーディングします。文字列を囲むの前にエスケープ文字の\を付けます。いかがでしょうか?スクリプトを自分で書ける人も書けない人も、誰かに書いてもらったInDesignスクリプトをチェックしてみて、必要ならば書き加えてみてはいかがでしょうか?

スポンサーリンク

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です