番号 | 記号 | 初期キー | 機能 |
---|---|---|---|
#29 | #? | - | 再表示 |
サイレントフラグを無効にしてカーソル行を再表示する。画面全体を再表示する&dよりも速度の点で有利である。
ラインバッファに入る機能があるダミーコマンドであるが,#26〜#28と異なるのはビューモード(mr==$80)でも有効なことだ。ビューモードであっても,#29でラインバッファに入り,cpを足掛かりにしてカーソル行を書き換えたのち#29で再表示できてしまう。
カーソル行をラインバッファに入れるという働きは,#04〜#29 に共通した機能であるが,#29はビューモードでもラインバッファに入れるダミーコマンドとして特異なコマンドである。
ビューモード(mr==$80)でもカーソルをラインバッファに入れることができる反面,再表示という副作用があるので,ビューモードでは無効だが副作用のない#28との使い分けをする。
コマンド | サイレントモード | ビューモード |
---|---|---|
#29(#?) | オフにして再表示 | 有効 |
#28 | 変更しない | 無効 |
編集スイッチEn(カーソルを改行以降に表示しない)が無効(初期値)であるとき,lx(表示カーソルの桁位置)とkx(保存した表示カーソルの桁位置)を一致させる効果があるので,カーソルを移動させることなくカーソル位置を正規化する目的にも使用できる。
戻り値 r:0=行編集開始, -1=ラインバッファがいっぱい
無効
無効
無効
無効
初期キーが与えられていない(特にキーを与える玄人も存在する)ダミーコマンドであるため,拡張ではなく利用例を示す。
23 ^OW "" ;Case lower (50) ;[\] Upper ?. #? (r)?. wa..19.2-, ;bend (ks&1)?&Su(cp) ?&Sl(cp) #?
解説を加えておこう。
?. | 編集モードでなければ終了 |
#? | ラインバッファに入る(cpがラインバッファの中を指す) |
(r)?. | エラー(ラインバッファ飽和)なら終了 |
wa..19.2-, | ラインバッファの終端の先にヌルを埋め込む(ラインバッファを「文字列」として扱えるようにする) |
(ks&1) | シフトキーフラグを評価して |
?&Su(cp) | 真ならカーソル位置以降を大文字化する |
?&Sl(cp) | 偽ならカーソル位置以降を小文字化する |
#? | カーソル行を再表示する |
本来,カーソル位置の「1語」を大文字/小文字化するコマンドは#23だが,この拡張は次の点で有利だ。
拡張文字列関数の&Su()/&Sl()は,まさにこのような要求から装備されたものであり,新関数を活用した好例と言えるだろう。