2014年01月11日

Emeditorマクロ・論理行の移動

 この記事も含めて、まとめはこちらLink

 Emeditorのマクロについて、ちょっとした小技。
 マクロを使ってカーソルを上下に移動したい場合、
document.selection.LineUp(false,1);    // カーソルを下に移動
document.selection.LineDown(false,1); // カーソルを下に移動
 の命令があるが、これは「表示上の行」の移動なので、画面上で折り返された行も含めた「論理行の移動」を行いたい場合はうまくいかない。
 今の所、Emeditorのマクロで論理行の移動を行うコマンドは無いので、一工夫してみる。

カーソル移動命令を利用した方法

// 次の行の先頭
document.selection.
EndOfLine(false,eeLineLogical); // 行末に移動
document.selection.CharRight(false,1); // カーソルを右に

// 前の行の先頭
document.selection.
StartOfLine(false,eeLineLogical); // 行頭に移動
document.selection.CharLeft(false,1); // カーソルを左に
document.selection.
StartOfLine(false,eeLineLogical); // 行頭に移動

// 次の行の先頭(1行選択命令を利用)
document.selection.SelectLine(); // カーソルの行を1行選択
document.selection.Collapse(); // 選択解除
 行末 → カーソル右で次の行頭、行頭 → カーソル左で前の行末に移動を利用したものと、1行選択するマクロ命令「SelectLine」でカーソルは次の行の先頭に移動する事を利用したもの。
 でもこれらは、本来の使い方と少々違った姑息な手段ではある。

座標指定命令を使ったカーソル移動

 そこで、現在のカーソルY座標を取得する「GetActivePointY」と、指定した数値の座標にカーソルを移動する「SetActivePoint」命令で、数値によって移動する方法を取ったもの。
// 論理行の移動マクロ
function YMove(YM , TF) { // 取得したY座標+YMの位置に移動
document.selection.SetActivePoint
(eePosLogical , 1 ,
document.selection.GetActivePointY(eePosLogical)
+ YM , TF);
}
YMove(-2,false); // 2行上に移動
document.selection.Text="2行上"; // 書込
YMove(3,true); // 3行下まで範囲指定
 移動の部分をfunctionにして、YMoveに入れた数値だけ移動と範囲指定も指示できるので、色々と汎用性があると思う。

(2014/01/12 追記)
後で調べたら・・・、あった。

前の論理行:editor.ExecuteCommandByID(4269);
次の論理行:editor.ExecuteCommandByID(4268);

・・・orz
勉強不足だったが、指定行数の移動や範囲指定が使えるので残しておく。



タグ:EmEditor

posted by 司隆 at 11:46 | Comment(0) | Computer
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。