番号 | 記号 | 初期キー | 機能 |
---|---|---|---|
#62 | #W | @W [F02] | ウィンドウ切替え |
ウィンドウ切替え
戻り値 r:常に 0
表テキストと裏テキストを交換する。
マルチテキストを扱えるVZのテキスト管理は次のようになっている。
変数TC(オープン可能なテキスト数)で指定した数のテキストを扱えるが,TCを1つ増やすごとにメモリを222バイト消費してマクロバッファ等の残量が減少するため,あまり大きな値にすることは勧められない。
TCで指定した範囲でオープンされたファイルは,オープンされた順にテキスト番号が割り振られる。そのテキスト番号はテキストレコード(=テキストワーク:編集テキストの状態が記録される構造体)の3バイト目(例:wa.2)に1バイトで記録される。この情報はコマンド関数&#T(n)の引数として使用できるが,若い番号のテキストがクローズされると番号が繰り上がって変化するので,マクロで使用するには適さない。マクロの中で確実に目的のテキストに切り替えるにはid(テキストid)を使用するべきである。なお,使用されるテキストレコードは,テキスト番号と同じ順番に配置されているとは限らない。クローズされたテキストが使っていたテキストレコードが再使用される可能性は低くないからだ。
複数のファイルをオープンすると,カレント(アクティブ)ファイルのテキストレコードの先頭アドレスをシステム変数 wa が指すようになる。同時に,直前に表示していたファイルのテキストレコードの先頭アドレスをシステム変数 wb が指すようになる。この wa / wb が指すテキストレコードに該当するテキストが「表/裏」テキストである。
VZはウィンドウを上下もしくは左右で分割し,それぞれのウィンドウで別のテキストを表示できる(参照モード…リードオンリもしくはビューモード…であれば,同じテキストも表示できる。)。ウィンドウを分割するにはコマンド#64を使用する。ウィンドウを分割したとき,それぞれのウィンドウに表示されるのは「表/裏」の関係にあるテキストとなる。カーソルのある側(アクティブ)のテキストが「表」で,他の側のテキストは「裏」になる。
#62で切り替えられるのは表/裏のふたつのテキストだけなので,それら以外のテキストに切り替えるにはコマンド#63を使用する。
ふたつ以上のテキストをオープンしている場合の表テキストと裏テキストは,次のように変化する。
オープン時 | 表:新規テキスト | 裏:元の表テキスト |
クローズ時 | 表:元の裏テキスト | 裏:残りのうちテキスト番号が最大のもの |
オープン時 | 表:新規テキスト | 裏:不変 |
クローズ時 | 表:残りのうちテキスト番号が最大のもの | 裏:不変 |
高橋版VZでは,スクリーン分割時に表/裏テキストを判別しやすくするため,ステータスラインの表示属性を変更することができる。単に表/裏だけでなく,リードオンリファイルやコンソールファイルについても別個に設定することが可能だ。
参考までに,表示属性関係のオプションを紹介しておく。
裏テキストのステータスライン属性を指定するオプション
無効
無効
当コマンドは無効だが,短縮表示が同じファイラー専用コマンドの#Wがあり,1 or 2ウィンドウの切替え(トグル)を実行する。
無効
上村郁夫氏の古典的名作小物である。画面分割時で通常の実行時には参照画面のみスクロールし,シフトキーを押しながら実行すると両画面を同時にスクロールする。
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) ;画面復帰 *