Vz Editor
2007-05-07T21:05:28+09:00

コマンド拡張で学ぶVZマクロ入門 #43

番号記号初期キー機能
#43#U^QP直前のカーソル位置

s==0(編集モード)

以下の命令(ジャンプ系コマンド及びコマンド関数)を最後に実行した位置にカーソルを移動する。

実行時にカーソル位置をマークする命令一覧
コマンド機能
#41/#^ファイルの先頭行へジャンプ
#42/#_ファイルの最終行へジャンプ
#43/U直前のカーソル位置へジャンプ
#44/#Mカーソル位置のマーク
#45/#J指定行番号ジャンプ
#55/#F検索文字列の設定
+(n)/&#U(n)指定マーク位置へジャンプ

これらの命令が記録するマーク位置は,テキストワークのwa+126を先頭とする4バイトにロング整数(2-4G超)で保存される。値は,wa..63(下位)とwa..64(上位)で取得できるほか,あらかじめ用意した4バイトのバッファ*qに,ロング演算関数&Le(*q,wa+126)で転送できる。

戻り値 r:常に0

s==1(文字列入力モード)

無効

s==2(コマンドラインモード)

無効

s==3(ファイラーモード)

無効

s==4(メニュー)

戻り値rの内容

s==4(1文字入力モード)

無効

マクロによる拡張

コマンドの拡張としてのコマンド関数 &#U()

#U(#43)を拡張するまでもなく,その他の4ヶ所のマークにジャンプできるのが,コマンド関数&#U()である。引数には0-4の値を与えることができ,値に応じたテキストワーク構造体アドレスにあるロング整数の値に対応するテキスト内の位置にジャンプする。引数に応じたテキストワーク構造体アドレスは以下のとおり。

マーク番号(引数)に対応する値の格納されるテキストワーク(wa)のアドレス
マーク(引数)先頭アドレス下位の値上位の値
0wa+126wa..63wa..64
1wa+130wa..65wa..66
2wa+134wa..67wa..68
3wa+138wa..69wa..70
4wa+142wa..71wa..72

マーク0は,コマンド#43(#U)/#44(#M)その他で使用される。このため,&#U(0)(マーク0へのジャンプ)は#Uと同じ結果になる。

次は標準組込マクロの拡張例である。標準組込マクロでは,引数として1-4のみ受け付けるようになっているが,0及び5-9も活用した例となる。


23 ^Q0 ""       ;Jump
        ?. i=r, (i>0 && i<5)?{ &#U(i). }
        (i)?? >00 (i-5)>?{ >05 >06 >07 >08 >09 }
0:      &m(" TOP  // Jump: 5=Page/Line, 6=n/10, 7 <=, 8 =>, 9=BOTTOM") #^ #<
5:      &m("Jump") (Dn && Dl)??{ #45. } &g("Page:") (r<=0)?. &#J((r-1)*PG+1)
6:      &g("Jump n/10") n=r, (n<0)?. &s #_ n=(ln/10)*n, &#J(n) &d
7:      &m("<=") &x(0)
8:      &m("=>") &s ly[, kx-, #x (r) ? #> ? #s ky], &d #]       ;T.Tanomura
9:      &m(" BOTTOM") #_ #>

実際には数字だけでなく,一部の記号も戻り値を得ることができる。具体的には,文字コードの連続(30h-3Fh)する「0123456789:;<=>?」の16文字である。「?」をヘルプとして使う例がある「コマンド拡張で学ぶVZマクロ入門 #00」も参照されたい。


コマンド拡張で学ぶVZマクロ入門 #43
The VZ resources, valid XHTML 1.0 Strict. ©2007-2018 by mezala.