ちょっと補習 その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でやれって事ですか。
 やだ。

つづく

コメントを残す

メールアドレスが公開されることはありません。

*