ナローイングの実装
実装の面から考えてみます。
範囲内の置換なので、選択範囲を抜き出して、検索・置換を行って、その結果を元の選択範囲にはめこめばよいことになります。このとき、1度の検索・置換ごとに再表示とかするとめんどかったり、効率が良くなかったりするので、「範囲内の置換時は全置換のみ有効」という仕様のエディタが多いのだと思います。
これを、範囲内の置換であっても通常の置換と同じ操作性にしたいわけです。で、それを emacs でいうナローイングで実現しようとしているのですが、emacs 的なナローイングとするか、xyzzy 的なそれとするかで実装の仕方が変わってくる。
前者の場合、ナローイング中はバッファにも置換対象の部分しか存在しないのですから、置換処理にも表示処理にも修正は必要ありません。ナローイングの仕組みだけを新しくつくればよさそうです。
ただ、スクリプト中などでユーザが知らないところでナローイングされたままユーザが気付かない場合なんかが出てきそうなので、ナローイング中であるということをかなり目立つように明示しないとまずそうです。あるいは、置換が終了したら常にナローイングを解除してしまって、ナローイングしながらの編集ということをさせないか。
後者の場合は、ナローイングの境界を常に意識しなければいけません。キャレットの移動、文字の送出・削除、表示。。。などなど修正するところも多そうです。ただ、ナローイングされていることすぐわかるし、目で見えるというのはかなりのメリットだと思います。
んー、どっちにしたものかな。
by knife37
| 2004-12-28 21:07
| 妄想を申そう
| Top
|