ちょっと補習 その3


忘れてたわけではなくて手詰まり加減だったわけで。
 昔から宿題ぜんぜんやってこない子でしたが

問題の「挿入点が行頭か行末か判別する」というくだり、一時的にキーボード操作で home → end と
 入力してやれば視認上の行の先頭か末尾に挿入点を移動できるわけで、それさえできれば元の状態からindexに変更があったかどうか見るだけで解決してしまう。そして事後に元の挿入点に選択を戻して終了、とスイートな思いつきがあったので実践。

これには、まったくわからないなりに一部AppleScriptを使ってみる。

tell application “System Events”
key code 115 –homeキー
key code 119 –endキー
  end tell

これをJavascriptに組み込む。
var my_AppleScript = ‘tell application \”System Events\”\r key code 115\r key code 119\r end tell’;
app.doScript (my_AppleScript, ScriptLanguage.APPLESCRIPT_LANGUAGE);

で、問題。
 これ単体ではちゃんと動く。カーソルのチカチカが、あっち行ってこっち行って落っこちる。いや落ちない。
しかし、コード本体に混ぜるとおかしくなるようで。
よくわからんなりに、最後に出している
alert(lineObj+”行目ですべ!”);
をコメントアウトして代わりに
app.activeDocument.activeLayer.name=(lineObj+”行目ですだべ!”);
 としてみたら、最後の最後にapp.doScript が走っているっぽい。
どうやらアラートウィンドウが出て隙にホームスティールされてたようで。。
 どうにかして挿入点の移動を待つ必要がある。

安直に、それ以下の処理もexecuteScriptにしてしまえば先着順のご案内になるかな、などと思い、
 こうしてみた。めでたくカーソルが移動した判定はまだ入れてない.


if(!app.documents.length){exit();}
if(!app.selection.length){exit();}
var selAry=app.selection;

var my_AppleScript = ‘tell application \”System Events\”\r key code 115\r key code 119\r end tell’;
var my_Javascript = “\
var sel=app.selection[0], par, ulObj, dlObj, fiObj, LLObj;\
switch(sel.parent.reflect.name){\
case \”Cell\” : par=sel.parent; break;\
case \”Story\” : par=sel.parentTextFrames[0]; break;\
default : exit();\
}\
fi
Obj=(sel.reflect.name==\”InsertionPoint\”)? sel : sel.insertionPoints[0];\
ulObj=par.texts.itemByRange(par.insertionPoints[0], fiObj).lines.length;\
dlObj=par.texts.itemByRange(fiObj, par.insertionPoints[-1]).lines.length;\
LLObj=(ulObj+dlObj>par.lines.length)? ulObj : ulObj+1;\
app.selection[0]=sel;\
alert(LLObj+\”行目ですか\”);\
“;

app.doScript (my_AppleScript, ScriptLanguage.APPLESCRIPT_LANGUAGE);
app.doScript (my_Javascript);



が、key codeはやっぱりalertの影でコソコソ動いた。。
全部ASでやれって事ですか。
 やだ。

つづく

InDesign:gyogyomeと仲良くなるためには

前回、あまりにぶっきらぼうに投げすぎたので、改めてリファレンスを用意しました。
 今回は外人に書かせた物を先方付きの翻訳者に逆ローカライズしてもらいました(うそ)



はじめに
ExtendScriptによる行送り値補助ツール「ギョギョーム」は、貴女の抱えている腐れ作業をワンダフルにサポートします。

例えば、「テキスト 1行分サゲ」などの赤字が入った場合、通常の手段では座標の窓や移動のダイアログに1行分の手入力を行います。
 この作業が連続する場合は環境設定のカーソルキー移動量を本文の行送り値に設定しておけば多少はマシでしょうが、それ以外の編集作業も併行して行うためには何の解決にもなりませんし、
その際も「13H」など付随する単位まで入力、あるいは「13→3.25」など単位差の脳内変換が煩わしいなど、悩みは絶えません。
 ねちねち迫り来る、しつこいせこい作業にやられてストレスの権化とされた貴女は、
周囲に当たり散らしたりコンビニでレシートの受け取りを拒否したり匿名で掲示板を困らせたりしてしまいます。


 しかし、もうそんな大変な思いはさせません。貴女は恋人との19時の待ち合わせにもきっと間に合うはずです。
なぜなら、貴女はたった今からこの「ギョギョーム」のユーザーとなる為です。
え,恋人がいない? 大丈夫、きっとすぐ見つかります。「ギョギョーム」にお任せ下さい。



簡単なつかいかた
本来は使い方の説明など必要のないぐらいシンプルかつダイナミックなこの「ギョギョーム」ですが、
 本日は特別にその機能の全てをここで紹介させて頂きます。これを読めば貴女も今日からプロ・ギョギョーマー!

目的の行送り値をもつテキストフレームを選択して、パレット内のcaptureボタンを押すと、その行送り値がカーソルキー移動量に設定されます。
 captureが成功したかどうかは、パレットの中央あたりを見れば一目瞭然ですね。
そこには、貴女のドキュメントの定規の単位に換算されたカーソルキー移動量が、
 そのすぐ後ろには換算前の単位の移動量が表示されています。


何も心配は要りません。あとはカーソルキーをへっこへっこ叩くだけで、
 貴女は素晴らしいレイアウトデザインを手にできる事でしょう。
浮いた時間や余った体力で、エレガントに綿棒で耳をほじくるなど有意義にお過ごし下さい*。
*:日本の耳鼻科はこの行為を薦めておりません

当然、移動の対象にできるオブジェクトは当該のテキストフレームに限った事ではありません。
 周囲の部材もどんどん移動しちゃって下さい。
貴女はもはやドキュメント上の神となったのです。



そしてこの「ギョギョーム」は、このままヤリ逃げなどというあまりにもあんまりな事は致しません。
 capture以前の元のカーソルキー移動量は、しっかりと責任を持ってお預かりしています。
ほんの一度、カチリとreleaseボタンを押すだけで,元の移動量ちゃんはいつだって無邪気な子犬のように猛スピードで貴女の手元に駆け戻ってくるのです。




次に、ボタン配置とは説明