Next: , Previous: , Up: Buffers   [Contents][Index]


26.5 Buffer Modification

Emacsは、各バッファーにたいして、バッファーのテキストを変更したかどうかを記録するために、変更フラグ(modified flag)と呼ばれるフラグを管理しています。このフラグは、バッファーのコンテンツを変更すると常にtにセットされ、バッファーを保存したときnilにクリアーされます。したがって、このフラグは保存されていない変更があるかどうかを表します。フラグの値は通常、モードライン内(Mode Line Variablesを参照)に表示され、保存(Saving Buffersを参照)と自動保存(Auto-Savingを参照)を制御します。

いくつかのLispプログラムは、このフラグを明示的にセットします。たとえば、関数set-visited-file-nameは、このフラグをtにセットします。なぜなら、たとえその前にvisitしていたファイルが変更されていなくても、テキストは新たにvisitされたファイルとマッチしないからです。

バッファーのコンテンツを変更する関数については、Textで説明されています。

Function: buffer-modified-p &optional buffer

この関数は、バッファーbufferが最後にファイルから読み込まれた、あるいは保存されてから変更されていればt、それ以外ではnilをリターンする。bufferが与えられない場合は、カレントバッファーがテストされる。

Function: set-buffer-modified-p flag

この関数は、flagが非nilならカレントバッファーを変更済みとしてマークし、nilなら未変更としてマークする。

この関数を呼び出すことによる別の効果は、それがカレントバッファーのモードラインの無条件な再表示を引き起こすことである。実際のところ、関数force-mode-line-updateは、以下を行うことにより機能する:

(set-buffer-modified-p (buffer-modified-p))
Function: restore-buffer-modified-p flag

set-buffer-modified-pと同様だが、モードラインにたいする強制的な再表示を行わない。

Command: not-modified &optional arg

このコマンドは、カレントバッファーが変更されておらず、保存する必要がないとマークする。argが非nilの場合、これは変更されているとマークするので、次回の適切なタイミングでバッファーは保存されるだろう。interactiveに呼び出された場合、argはプレフィックス引数である。

この関数は、エコーエリア内にメッセージをプリントするので、プログラム内で使用してはならない。かわりに、set-buffer-modified-p(上記)を使用すること。

Function: buffer-modified-tick &optional buffer

この関数は、bufferの変更カウント(modification-count)をリターンする。これは、バッファーが変更されるたびに増加されるカウンターである。buffernil(または省略)の場合は、カレントバッファーが使用される。このカウンターは、時折0にクリアーされ得る。

Function: buffer-chars-modified-tick &optional buffer

この関数は、bufferの文字変更に関わる変更カウントをリターンする。テキストプロパティを変更しても、このカウンターは変化しない。しかし、そのバッファーにテキストが挿入、または削除されるたびに、このカウンターはbuffer-modified-tickによりリターンされるであろう値にリセットされる。buffer-chars-modified-tickを2回呼び出してリターンされる値を比較することにより、その呼び出しの間にバッファー内で文字変更があったかどうかを知ることができる。buffernil(または省略)の場合は、カレントバッファーが使用される。