Next: Modification Time, Previous: Buffer File Name, Up: Buffers [Contents][Index]
Emacsは各バッファーにたいしてバッファーのテキストを変更したかどうかを記録するために、変更フラグ(modified
flag)と呼ばれるフラグを管理しています。このフラグはバッファーのコンテンツを変更すると常にt
にセットされ、バッファーを保存したときnil
にクリアーされます。したがってこのフラグは保存されていない変更があるかどうかを表します。フラグの値は通常はモードライン内(Mode Line Variablesを参照)に表示され、保存(Saving Buffersを参照)と自動保存(Auto-Savingを参照)を制御します。
いくつかのLispプログラムは、このフラグを明示的にセットします。たとえば、関数set-visited-file-name
は、このフラグをt
にセットします。なぜなら、たとえその前にvisitしていたファイルが変更されていなくても、テキストは新たにvisitされたファイルとマッチしないからです。
バッファーのコンテンツを変更する関数はTextで説明されています。
この関数はバッファーbufferが最後にファイルから読み込まれたか、あるいは保存されてから変更されていればt
、それ以外ではnil
をリターンする。bufferが与えられなければカレントバッファーがテストされる。
この関数はflagが非nil
ならカレントバッファーを変更済みとして、nil
なら未変更としてマークする。
この関数を呼び出すことによる別の効果は、それがカレントバッファーのモードラインの無条件な再表示を引き起こすことである。実際のところ関数force-mode-line-update
は以下を行うことにより機能する:
(set-buffer-modified-p (buffer-modified-p))
set-buffer-modified-p
と同様だがモードラインにたいする強制的な再表示を行わない点が異なる。
このコマンドはカレントバッファーが変更されておらず保存する必要がないとマークする。argが非nil
なら変更されているとマークするので、次回の適切なタイミングでバッファーは保存されるだろう。interactiveに呼び出された場合には、argはプレフィックス引数。
この関数はエコーエリア内にメッセージをプリントするのでプログラム内で使用してはならない。かわりにset-buffer-modified-p
(上述)を使用すること。
この関数はbufferの変更カウント(modification-count)をリターンする。これはバッファーが変更されるたびに増加されるカウンター。bufferがnil
(または省略)ならカレントバッファーが使用される。
この関数はbufferの文字変更に関わる変更カウントをリターンする。テキストプロパティを変更してもこのカウンターは変化しない。しかしそのバッファーにテキストが挿入または削除されるたびに、このカウンターはbuffer-modified-tick
によりリターンされるであろう値にリセットされる。buffer-chars-modified-tick
を2回呼び出してリターンされる値を比較することにより、その呼び出しの間にバッファー内で文字変更があったかどうかを知ることができる。bufferがnil
(または省略)ならカレントバッファーが使用される。
テキストプロパティの変更の等、バッファーのテキストを実際には変更しない方法でバッファーを変更することを要する場合があります。プログラムがフックやバッファー変更にたいするリアクションを何もトリガーせずにバッファーを変更する必要がある場合には、with-silent-modifications
マクロを使用します。
バッファーを変更しないように装ってbodyを実行する。これにはバッファーのファイルがロックされているかどうかのチェック(File Locksを参照)、バッファーの変更フック(Change Hooksを参照)等が含まれる。bodyが持実際にバッファーテキストを変更する場合にはアンドゥするデータが破損するかもしれないことに注意。