Vz Resources
Commands
2019-06-27T21:05:28+09:00

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

番号記号初期キー機能
#62#W@W [F02]ウィンドウ切替え

s==0(編集モード)

ウィンドウ切替え

戻り値 r:常に 0

表テキストと裏テキストを交換する。

表/裏テキスト

マルチテキストを扱えるVZのテキスト管理は次のようになっている。

変数TC(オープン可能なテキスト数)で指定した数のテキストを扱えるが,TCを1つ増やすごとにメモリを222バイト消費してマクロバッファ等の残量が減少するため,あまり大きな値にすることは勧められない。

TCで指定した範囲でオープンされたファイルは,オープンされた順にテキスト番号が割り振られる。そのテキスト番号はテキストレコード(=テキストワーク:編集テキストの状態が記録される構造体)の3バイト目(例:wa.2)に1バイトで記録される。この情報はコマンド関数&#T(n)の引数として使用できるが,若い番号のテキストがクローズされると番号が繰り上がって変化するので,マクロで使用するには適さない。マクロの中で確実に目的のテキストに切り替えるにはid(テキストid)を使用するべきである。なお,使用されるテキストレコードは,テキスト番号と同じ順番に配置されているとは限らない。クローズされたテキストが使っていたテキストレコードが再使用される可能性は低くないからだ。

複数のファイルをオープンすると,カレント(アクティブ)ファイルのテキストレコードの先頭アドレスをシステム変数 wa が指すようになる。同時に,直前に表示していたファイルのテキストレコードの先頭アドレスをシステム変数 wb が指すようになる。この wa / wb が指すテキストレコードに該当するテキストが「表/裏」テキストである。

VZはウィンドウを上下もしくは左右で分割し,それぞれのウィンドウで別のテキストを表示できる(参照モード…リードオンリもしくはビューモード…であれば,同じテキストも表示できる。)。ウィンドウを分割するにはコマンド#64を使用する。ウィンドウを分割したとき,それぞれのウィンドウに表示されるのは「表/裏」の関係にあるテキストとなる。カーソルのある側(アクティブ)のテキストが「表」で,他の側のテキストは「裏」になる。

#62で切り替えられるのは表/裏のふたつのテキストだけなので,それら以外のテキストに切り替えるにはコマンド#63を使用する。

表/裏状態の変更

ふたつ以上のテキストをオープンしている場合の表テキストと裏テキストは,次のように変化する。

全画面の場合
オープン時表:新規テキスト裏:元の表テキスト
クローズ時表:元の裏テキスト裏:残りのうちテキスト番号が最大のもの
分割画面の場合
オープン時表:新規テキスト裏:不変
クローズ時表:残りのうちテキスト番号が最大のもの裏:不変

関係する変数・オプション

ウィンドウ/テキスト

マルチファイル時のステータスライン表示属性(tVZ)

高橋版VZでは,スクリーン分割時に表/裏テキストを判別しやすくするため,ステータスラインの表示属性を変更することができる。単に表/裏だけでなく,リードオンリファイルやコンソールファイルについても別個に設定することが可能だ。

参考までに,表示属性関係のオプションを紹介しておく。

表テキスト
裏テキスト

裏テキストのステータスライン属性を指定するオプション

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

無効

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

無効

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

当コマンドは無効だが,短縮表示が同じファイラー専用コマンドの#Wがあり,1 or 2ウィンドウの切替え(トグル)を実行する。

s==4(メニュー)

戻り値rの内容

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

無効

マクロでの使用例

参照画面(同時)スクロール

上村郁夫氏の古典的名作小物である。画面分割時で通常の実行時には参照画面のみスクロールし,シフトキーを押しながら実行すると両画面を同時にスクロールする。

50 ^[UP] ""     c=#w, >01
50 ^[DOWN] ""   c=#z, >01
01:     (s)?. (wt)??{ &o(c) . }
        &s #W &o(c) #W
        (ks&1)?&o(c) &d ;Togather

もしもスクロール行数を大きくしたい場合は,次のようなコードをローカルマクロの前に置いてやればよい。この例は1画面単位になっている。少しだけ多くしたい場合は#33#34を使うことも可能だ。

50 ^T ""        c=#r, >01
50 ^V ""        c=#c, >01

上記のマクロはふたつのテキストをざっくりと比較したいときに使えるが,現在の表示範囲など一定の部分で比較したいときは,次のマクロの連続実行により目視が可能だろう。なお無粋な蛇足だが,表示範囲に限定せず,かつ厳密に比較するには,コマンド#69を使用する。

52 @P ""        ;Swap Text      実用むさい比較 ;modified by m.gann
        ?. &s ly[, #W ky], &#Y(wt) &d

この連続実行を自動化した榊原氏の半分冗談みたいなマクロも,意外に実用性があると思えるのである。

========== HIKAKU.DEF ==========
* M
89 ^\ "一目で比較"
        ?.
        a=wn,b=wt,
:A      &k (r==$1b)?>Z          ;[ESC]で終了
;       &w(1)                   ;★必要に応じて入れて下さい
        #W &#Y(wt)              ;画面入れ替え
        >A
:Z      (b&1)?#W &#T(a)         ;画面復帰
*

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