番号 | 記号 | 初期キー | 機能 |
---|---|---|---|
#43 | #U | ^QP | 直前のカーソル位置 |
以下の命令(ジャンプ系コマンド及びコマンド関数)を最後に実行した位置にカーソルを移動する。
コマンド | 機能 |
---|---|
#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
無効
無効
無効
無効
#U(#43)を拡張するまでもなく,その他の4ヶ所のマークにジャンプできるのが,コマンド関数&#U()である。引数には0-4の値を与えることができ,値に応じたテキストワーク構造体アドレスにあるロング整数の値に対応するテキスト内の位置にジャンプする。引数に応じたテキストワーク構造体アドレスは以下のとおり。
マーク(引数) | 先頭アドレス | 下位の値 | 上位の値 |
---|---|---|---|
0 | wa+126 | wa..63 | wa..64 |
1 | wa+130 | wa..65 | wa..66 |
2 | wa+134 | wa..67 | wa..68 |
3 | wa+138 | wa..69 | wa..70 |
4 | wa+142 | wa..71 | wa..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」も参照されたい。