2005-09-10 [長年日記]

[Q3] ワードラップとUndo (2)

Undo周りの情報を物理行でもっていたために、ワードラップ処理で挿入後に物理行が変わってしまうケースだと位置がずれてしまっていました。

が、よくよく考えるとビュー側でUndoまわりの処理をしているのがそもそもだめだめな感じです。同じモデルに複数のビューを結びつけたらうまくUndoできなくなってしまいます。おそらく選択状態やキャレット位置などはビューの属性なので、それもUndoするためにビューの持たせたのだと思うのですが、今から考えるといまいちですね。

よくよく考えると、いまいちどころかウィンドウ幅で折り返す設定にしてウィンドウ幅を変えた後でUndoすると変なところがUndoされてしまいます。

このあたりはUndo情報を論理行で保持するようにして、モデル側で管理すればよさそうですが、仮にビューが二つあるとすると、あるビューで編集後に別のビューでUndoすると、キャレットがUndoした位置に移動してしまうのがいまいちですね。私が使っているいくつかのエディタでもそういう動作をするのでそれで良いのかな。

[Q3] ワードラップとUndo (3)

というわけで、モデル側で論理行を扱うように変更しました。本来モデル側には関係ないはずのキャレット位置が入ってしまうのが気持ち悪いですが、許容範囲内でしょうか。

[]