あるファイルをvisitしてそのバッファー内で変更を行い、その一方ではディスク上でファイル自身が変更されたとします。この時点でバッファーを保存するとファイル内の変更は上書きされるでしょう。これが正に望んでいる動作のときもありますが、通常は有用な情報が失われてしまいます。したがってEmacsはファイルを保存する前に、以下で説明する関数を使用してファイルの変更時刻をチェックします(ファイルの変更時刻を調べる方法はファイルの属性を参照)。
この関数はbuffer(デフォルトはカレントバッファー)にvisitされているファイルにたいして記録されている変更時刻と、オペレーティングシステムにより記録された実際の変更時刻を比較する。これら2つの時刻はEmacsがそのファイルをvisitか保存して以降、他のプロセスにより書き込みがされていなければ等しくなるはずである。
この関数は実際の最終変更時刻とEmacsが記録した変更時刻が同じならt
、それ以外はnil
をリターンする。そのバッファーが記録済みの最終変更時刻をもたない、すなわちvisited-file-modtime
が0をリターンするような場合にもt
をリターンする。
これはたとえvisited-file-modtime
が非0の値をリターンしたとしても、ファイルをvisitしていないバッファーにたいしては常にt
をリターンする。たとえばDiredバッファーにたいして、この関数は常にt
をリターンする。また存在せず、
以前に存在したこともなかったファイルをvisitするバッファーにたいしてt
をリターンするが、visitしているファイルが削除されたバッファーにたいしてはnil
をリターンする。
この関数はカレントバッファーによりvisitされているファイルの最終変更時刻の記録をクリアーする。結果としてこのバッファーにを次回の保存ではファイルの変更時刻の食い違いは報告されなくなる。
この関数はset-visited-file-name
、および変更済みファイルの上書きを防ぐための通常テストを行わない例外的な箇所で呼び出される。
この関数はカレントバッファーにたいして記録された最終ファイル変更時刻をLispタイムスタンプ(時刻を参照)としてリターンする。
バッファーが最終変更時刻の記録をもたなければこの関数は0をリターンする。これが発生するのは、たとえばバッファーがファイルをvisitしていなかったり、clear-visited-file-modtime
で最終変更時刻が明示的にクリアーされた場合。しかしvisited-file-modtime
は、いくつかの非ファイルバッファーにたいするタイムスタンプをリターンすることに注意。たとえばディレクトリーをリストするDiredバッファーでは、Diredが記録するそのディレクトリーの最終変更時刻がリターンされる。
バッファーが存在しないファイルをvisitしている場合には、この関数は−1をリターンする。
この関数はバッファーがvisitしているファイルの最終変更時刻の記録を、timeが非nil
ならtime、それ以外はvisitしているファイルの最終変更時刻に更新する。
timeがnil
やvisited-file-modtime
がリターンする整数フラグでなければ、それはLispのtime値であること(時刻を参照)。
この関数はバッファーが通常のようにファイルから読み取られたものでない場合や、ファイル自身が害のない既知の理由により変更されている場合に有用。
これはvisitしているファイルfilenameがバッファーのテキストより新しいときにバッファーの変更を試みた後に、ユーザーに処理方法を尋ねるために使用する関数。Emacsはディスク上のファイルの変更時刻がバッファーを最後に保存した時刻新しいかどうか、バッファーのコンテンツが変更されているかによりこれを検知する。これはおそらく他のプログラムがファイルを変更したことを意味する。
この関数が正常にリターンするかどうかは、ユーザーの応答に依存する。関数はバッファーの変更が処理された場合は正常にリターンし、バッファーの変更が許可されなかった場合はデータ(filename)
とともにエラーfile-supersession
をシグナルする。
この関数は適切なタイミングでEmacsにより自動的に呼び出される。これは再定義することによりEmacsをカスタマイズ可能にするために存在する。標準的な定義はファイルuserlock.elを参照のこと。
ファイルのロックのファイルロックのメカニズムも参照されたい。