人気ブログランキング | 話題のタグを見る
ナローイングはxyzzy的に


けっこう(30cm くらい?)積もったので、玄関まで雪かきしたら死亡。しかも雪かきし終えたらまた降り始めるとは何事ですか。。。




とりあえず xyzzy 的なナローイングでいってみようかなーと。


具体的に実装する場合どうなるかを考えてみると、とりあえずバッファ内のテキストにナローイングされている・されていないという区別がつくことになるので、その境界を管理する必要が出てきます。


そいで、その境界はナローイングされていないテキストを編集することで変化するので、その補正をしなければいけません。そういう仕組みはマークが持っているので、境界をマークの 1 つとしてもてばよさそうです。


マークの仕組みを、作った本人自身が忘れているので一応おさらいすると、他のエディタでしおりとかブックマークとか呼ばれている機能です。一般的には行指向のものが多いのに対し、萌ディタのマークは文字指向になっています。ある文字と文字の間にマークを挟んでおくと、その前後のテキストを編集しても自動的に位置を補正してくれる。


内部的には、バッファを生成するごとにユーザーマーク 1 ~ 9、システムマーク 0 が確保されます。それから、ビューがバッファを参照するごとにビューごとのキャレットマークが確保されます。ここに、ナローイングの端点を示すマークを含めるようにすればよさそうです。


ただ、端点のうち右の 1 点は従来のマークそのままでよいのですが、左の 1 点はちょっと動作が違う。文字の間にキャレットとマークがどういう風に位置するかというと、概念的には



という風になってます。なので、キャレット位置に文字を挿入するとマークはそのぶんずれていくわけです。これに対し、ナローイングの左の端点に対応するマークは、キャレットと左の文字の間に位置する必要がある。


ということで、とりあえずマークにスナップする方向を指定できるようにしてみました。


ひとまずキャレットのメソッドに Restrict() と UnRestrict() を追加。


by knife37 | 2004-12-30 06:54 | 妄想を申そう  | Top  | 
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
検索
最新のコメント
Hi! Good stu..
by lacedkl at 10:19
i think abou..
by MaybridabanTy at 06:31
Thank you!
by Roy at 20:27
Thank you!
by Patrick at 20:26
Great work!
by Andy at 20:25
Thank you!
by Rex at 20:23
Great work!
by Maggie at 20:23
I love it: ..
by siljb at 15:51
Keep up t..
by reizomo at 15:40
http://0buyp..
by affomfobe at 02:56
最新のトラックバック
フォロー中のブログ
ファン
記事ランキング
ブログジャンル
画像一覧