|
IKKI です。すみません、ひとつ忘れてました…
[4] フラグ指定で「選択した範囲内のみ」の検索・置換ができない
事前に
searchdown ".", regular, inselect;
gosearchstarted;
などとすれば可能でしょうけれど、そういう屁理屈は置いておいて…
私案:
・「選択した範囲内のみ」もフラグとして扱えるようにする
・escapeinselect に対応する enterinselect を新設
とは言ってみたものの、普段使わないので良いのかどうかわかりません。
何か適切な方法はあるでしょうか。
以下、返信です。
> >[1] マクロで find; や replace; を実行したときは searchbuffer の内容を
> > そのままダイアログに表示するよう仕様変更。
>
> 新たに find2 を作って searchbuffer を反映させる文を作るか、finddialog を
> 作って引数に指定できるようにするかではどうでしょう。
後者がわかりやすいし汎用性もあって良いと思います。
検索系文の命名規則(*1)からして名前は searchdialog, replacedialog の方が適切
な気がします。
仕様をいろいろ考えてみた結果、2つのアプローチに行き着きました。
A案■ユーザーの使い勝手を重視するなら
searchdialog "検索文字列", casesense, word;
replacedialog "検索文字列", "置換文字列", ask, linknext;
という形が使いやすそうです。 searchup 等と同じ文法で自然に書けます。
引数を省略した場合は searchbuffer を反映させます。そうすれば
setsearch "検索文字列", 0x03;
searchdialog;
としてフラグを数値で指定することもできますし、
getsearch;
searchdialog;
と書けば既存の find 文の完全な代替となります(*2)。
----------------
*1 命名規則
find* …バッファから実行。フラグのビット2によって検索または置換。
set* …引数からバッファへ代入。フラグを数値で指定。
search* …引数から実行。オプションをキーワードで指定。
replace* …引数から実行。オプションをキーワードで指定。
*2 今後ダイアログを出すには searchdialog 文を使ってもらうことにして
find 文は互換性のためだけに残す(ヘルプから消す)こともできます。
find 文だけ命名規則から外れているし、動作もわかりにくいですから。
----------------
B案■マクロエンジンの仕様肥大化を抑えるなら
find "検索文字列", 0x03;
replace "検索文字列", "置換文字列", 0x88;
という具合に引数を付けたらそれが反映されるようにすればよさそうです。
引数を省略した場合は従来通り裏で getsearch します。
検索オプションをキーワードで指定する方法との両立は難しいでしょう。
> >[3] 配列型キーワード searchhist[], replacehist[] を新設
>
> 作るとしたら、配列型キーワードではなく、関数になります。
> $a = getsearchhist(n);
> という感じです。どうでしょう。
いいですね。
同時に setsearchhist 文も作れば Iranoan さんの要望も満たされそうです。
ぜひ両方ともお願いします。
> >[2] findall 文、 findallfast 文を新設。
>
> これがあるとマクロが作りやすくなるかもしれません。
> 検索の場合は意味が無いので、全置換専用ということになるので、findallとい
> う名前はエレガントではありますがスッキリしない気がします。
私もそう思いますが、現在の命名規則に則るなら他に名付けようがないです。
何か妙案はないものか…
|
|