次: , 前: Buffer File Name, 上: Buffers


26.5 バッファの変更

Emacsは、各バッファごとに当該バッファのテキストを変更したかどうかを 記録する変更フラグ(modified flag)と呼ばれるフラグを保持しています。 バッファの内容が変わるたびにこのフラグはtに設定され、 保存するたびにnilに設定されます。 つまり、このフラグは未保存の変更があるかどうかを表します。 このフラグの値は通常モード行(see Mode Line Variables)に表示され、 保存(see Saving Buffers)と 自動保存(see Auto-Saving)を制御します。

このフラグを明示的に設定するLispプログラムもあります。 たとえば、関数set-visited-file-nameはこのフラグをtに設定します。 ファイルを訪問してから変更していなくても、 バッファのテキストが新たな訪問しているファイルとは一致しないからです。

バッファの内容を変更する関数についてはTextに述べてあります。

— 機能: buffer-modified-p &optional buffer

この関数は、最後にファイルから読み込んだり保存してから バッファbufferが変更されていればtを返し、 さもなければnilを返す。 bufferを指定しないとカレントバッファを調べる。

— 機能: set-buffer-modified-p flag

この関数は、flagnil以外であれば カレントバッファは変更されていると印を付け、 nilならば未変更であると印を付ける。

この関数を呼び出した別の効果として、 カレントバッファのモード行を無条件に再表示する。 実際、関数force-mode-line-updateはつぎのようにしている。

          (set-buffer-modified-p (buffer-modified-p))
     
— コマンド: not-modified

このコマンドは、カレントバッファを未変更であり 保存する必要がないと印を付ける。 前置引数を指定すると、バッファに変更されていると印を付け、 以降の適当な場面で保存される。

エコー領域にメッセージを表示するので、 プログラムからこの関数を使わないこと。 かわりにset-buffer-modified-pを使う(上記)。

— 機能: buffer-modified-tick &optional buffer

この関数は、bufferの変更回数を返す。 変更回数はバッファを変更するたびに増やされる。 buffernilであると(あるいは省略すると)、 カレントバッファを使う。