Vz Editor
2005-11-14T21:06:14+09:00

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

番号記号初期キー機能
#05#e^E [UP]

s==0(編集モード)

スクリーン上で1行上にカーソルを移動します。

返り値 r: 0=移動成功,-1=ファイルの先頭表示行で移動失敗

ld(表示行)は変化しますが,ln(論理行)は不変も有り得ます。マクロで使用する場合に,確実に前の論理行に移動するには #< #s でないと無限ループの可能性があります。

ファイルの先頭表示行で実行されると,命令失敗でrに-1(通常は成功でrは0)を返します。ファイル先頭に向かっての処理では,返り値を判定しないと無限ループに陥る可能性があります。

また,スイッチEn(カーソルを改行以降に表示しない)が無効(-:初期値)であれば,擬似的なカーソルとなって表示桁位置にぶれを生じません。このときの表示上の桁位置は,編集テキスト変数kx(保存された桁位置)に保持されています。

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

[入力文字列先頭一致で]ヒストリーを遡ります。

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

[入力文字列先頭一致で]ヒストリーを遡ります。

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

スクリーン上で1行上にカーソルを移動します。

FM(ファイラーのモード)+8(Rotate)が指定されていて,カーソルがファイラーの上端にある場合,上端から末尾にカーソルを移動します。ただし,FW(ディレクトリバッファの数)の値が少ないと,すべてのファイルを表示できないので注意が必要です。複窓ファイラーの場合は双方の合計がFWの値に納まることが必要です。

s==4(メニュー)

メニュー上で1行上にカーソルを移動します。メニューにおけるコマンドキーの例外([UP][DOWN][CR])に当たり,他のコマンドキーがメニューをキャンセルするのに対して,意味のある特定の動作をします。

メニューの上端アイテムにカーソルがある場合は,メニューの末尾アイテムにカーソルを移動します。リードオンリーメニューや1アイテムメニューであっても,コマンドキーによる返り値は得られません。(可能にする技術としてはコマンドキーテーブルの一時的書換というものがあります)

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

無効

マクロによる拡張

このコマンドは各モード共通コマンドであるため,マクロによる拡張にあまり馴染みませんが,ほとんど使われることのない歴史的ダイヤモンドカーソル^Eに特定の機能を持たせることは可能です。コマンドキー側のキーを削除しなければ,編集モード以外ではコマンドキーがマクロキーに優先するため,編集モードでのみ使うような機能がよいでしょう。

例-1
ファイルの上端に到達してさらに上へとカーソルを進めようとすると,新たに空行を挿入します。フリーカーソルを欲張りにしたような動作になります。
= free_up
* macro
5 ^E "" ?.
        #e (r)?{                ;ファイルの上端に達したら
                #< #n           ;1行挿入する
        }
*
参照: #< #n
例-2
例-1を少し拡張させたもので,不要な空白は削除し,挿入する空白にはタブを使用しないというものです。
= free_up
* macro
5 ^E "" ?.
        #e (r)?{
                x=lx,                   ;カーソルの桁位置を記録
                ' ' #16                 ;行末空白を削除
                #< #n                   ;空行挿入
                Eu[+, &#V(x) Eu], #>    ;元カーソル位置まで空白を埋める
        }
*
参照: lx #16 Eu &#V()

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