Next: , Previous: Buffer Modification, Up: Buffers


26.6 更新時刻の比較

ファイルを訪問してそのバッファで変更したとします。 そのあいだに、ディスク上の当該ファイル自身も変更されたとします。 ここでバッファを保存すると、ファイルの変更内容を上書きしてしまいます。 たしかにこれを望む場合もあるでしょうが、 普通は重要な情報を失うことになります。 そのため、Emacsは、ファイルに保存するまえに、 以下に述べる関数を用いてファイルの更新時刻を検査します。

— Function: verify-visited-file-modtime buffer

この関数は、bufferに記録してある 訪問しているファイルの更新時刻と、 オペレーティングシステムが記録している ファイルの実際の更新時刻を比較する。 Emacsが当該ファイルを訪問したり保存してから 他のプロセスが当該ファイルに書いていない限り、 2つの時刻は同じはずである。

実際の更新時刻とEmacsに記録している更新時刻が同じならばtを返し、 さもなければnilを返す。

— Function: clear-visited-file-modtime

この関数は、カレントバッファで訪問しているファイルの 最終更新時刻の記録を破棄する。 その結果、つぎにこのバッファを保存しようとしても、 ファイルの更新時刻のと不一致を報告しない。

この関数は、set-visited-file-nameや 変更されたファイルを上書きしないためのテストを行わない例外的な場面で 呼び出される。

— Function: visited-file-modtime

この関数は、 バッファに記録されているファイルの最終更新時刻を (high . low)の形のリストで返す。 (これはfile-attributesが時刻を返すために使う形と同じである。 File Attributesを参照。)

— Function: set-visited-file-modtime &optional time

この関数は、timenil以外であるときには、 バッファに記録してあるファイルの最終更新時刻を timeで指定された時刻にする。 さもなければ、訪問しているファイルの最終更新時刻にする。

timenilでないときには、 (high . low)(high low)の形であること。 いずれの場合も、2つの整数は時刻の16ビットを保持する。

この関数は、ファイルから普通に読み込んだのではないバッファや ファイル自体が明確な理由で変更された場合に有用である。

— Function: ask-user-about-supersession-threat filename

この関数は、ファイルfilenameを訪問している廃れたバッファを 変更しようとしたときにどのように処理すべきかをユーザーに問い合わせる ために用いる。 廃れたバッファ(obsolete buffer)とは、 未変更のバッファではあるが、対応するディスク上のファイルが バッファの最終更新時刻よりも新しいものである。 つまり、別のプログラムが当該ファイルを変更した可能性があることを意味する。

ユーザーの応答に依存して、関数は正常に戻る。 その場合、バッファは変更できる。 あるいは、データ(filename)を付けて エラーfile-supersessionを通知する。 その場合、バッファの変更は許されない。

この関数は、適切な場面でEmacsが自動的に呼び出す。 これを再定義することでEmacsをカスタマイズできるようにしている。 標準定義についてはファイルuserlock.elを参照。

File Locksのファイルロック機構も参照。