Azukiでは行ごとに3種類の編集状態を定義し、管理しています。具体的には未編集、編集済み、保存済み(一度以上編集されたが最後に保存された状態から変化していない)の3状態です。Azukiで3状態を扱うようにした背景は安直にも「Visual Studioに合わせただけ」なのですが、実際にやってみると思っていたより難しいことが分かりました。
この難しさの背景にはAzukiのデータ構造が単一のバッファ(gapped buffer)で構成されていることがあります。ドキュメント全体を単一のバッファで管理していることから、AzukiはUNDO/REDO情報をドキュメント全体に対する差分として記録しています。言い換えると「行単位の編集履歴」にはなっていません。もし編集履歴を行単位で記録していれば、ある行が「保存済み」状態であるかどうかは簡単に判定できます。しかし、ドキュメント単位での編集履歴で記録していると、正確に3状態を管理する方法が簡単には思いつきません。
元々は「保存済み」状態はUNDO/REDOによって復元されない仕様としていたので「未編集」と「編集済み」の2状態に関しては深く仕様検討したものの、「保存済み」状態についてまでは掘り下げて検討しませんでした。仕様範囲外だったので仕方ない部分もありますが、もう少し先を読んでおくべきだったかなと反省しています。「保存済み」状態までキッチリ検討できていないなら3状態とせず2状態とすることもできたはずなので。