Next: , Previous: Undo, Up: Text


31.10 アンドゥリストの管理

本節では、指定されたバッファでアンドゥ情報の記録をオン/オフする 方法について述べます。 また、アンドゥリストが大きくなりすぎないように 自動的に切り詰める方法についても説明します。

新たに作成されたバッファのアンドゥ情報の記録は普通は始めオンですが、 バッファ名が空白で始まる場合は最初からオフです。 つぎの2つの関数を使うか、読者自身がbuffer-undo-listに設定すれば、 アンドゥ記録を明示的にオン/オフできます。

— コマンド: buffer-enable-undo &optional buffer-or-name

このコマンドは、バッファbuffer-or-nameでのアンドゥ記録をオンにし、 以降の変更を取り消せるようにする。 引数を指定しないと、カレントバッファを使う。 当該バッファでアンドゥ記録がすでにオンであると、 この関数はなにもしない。 nilを返す。

対話的に呼ばれると、buffer-or-nameはカレントバッファである。 他のバッファを指定できない。

— コマンド: buffer-disable-undo &optional buffer
— コマンド: buffer-flush-undo &optional buffer

この関数はバッファbufferのアンドゥリストを破棄し、 以降のアンドゥ情報の記録をオフにする。 その結果、これ以前の変更も以降の変更も取り消すことはできない。 bufferのアンドゥリストがすでにオフであると、 この関数にはなんの効果もない。

この関数はnilを返す。

名前buffer-flush-undoは廃れているとはみなさないが、 好ましい名前はbuffer-disable-undoである。

編集を続けるにしたがってアンドゥリストはどんどん長くなります。 これらがメモリを使い尽くさないように、 読者が設定した上限サイズにガベッジコレクションが切り詰めます。 (この目的においてアンドゥリストの『サイズ』は、 リストを構成するコンスセルの個数と削除された文字列の和である。) 2つの変数undo-limitundo-strong-limitは、 許容できるサイズの範囲を制御します。

— Variable: undo-limit

これはアンドゥリストの許容できるサイズの緩い制限である。 このサイズを越える位置にある変更グループは保持される最古のものである。

— Variable: undo-strong-limit

これはアンドゥリストの許容できるサイズの上限である。 このサイズを越える位置にある変更グループは (これより古いものも含めて)削除される。 例外が1つあり、最新の変更グループは それがどれほど大きくてもけっして破棄しない。