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


27.6 バッファーの変更 Time

あるファイルをvisitしてそのバッファー内で変更を行い、その一方ではディスク上でファイル自身が変更されたとします。この時点でバッファーを保存するとファイル内の変更は上書きされるでしょう。これが正に望んでいる動作のときもありますが、通常は有用な情報が失われてしまいます。したがってEmacsはファイルを保存する前に、以下で説明する関数を使用してファイルの変更時刻をチェックします(ファイルの変更時刻を調べる方法はFile Attributesを参照)。

Function: verify-visited-file-modtime &optional buffer

この関数は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をリターンする。

Function: clear-visited-file-modtime

この関数はカレントバッファーによりvisitされているファイルの最終変更時刻の記録をクリアーする。結果としてこのバッファーにを次回の保存ではファイルの変更時刻の食い違いは報告されなくなる。

この関数はset-visited-file-name、および変更済みファイルの上書きを防ぐための通常テストを行わない例外的な箇所で呼び出される。

Function: visited-file-modtime

この関数はカレントバッファーにたいして記録された最終ファイル変更時刻を(high low microsec picosec)のような形式のリストでリターンする(これはfile-attributesが時刻値をリターンするために使用するフォーマットと同じ。File Attributesを参照)。

バッファーが最終変更時刻の記録をもたなければこの関数は0をリターンする。これが発生するのは、たとえばバッファーがファイルをvisitしていなかったり、clear-visited-file-modtimeで最終変更時刻が明示的にクリアーされた場合。しかしvisited-file-modtimeは、いくつかの非ファイルバッファーにたいするリストをリターンすることに注意。たとえばディレクトリーをリストするDiredバッファーでは、Diredが記録するそのディレクトリーの最終変更時刻がリターンされる。

バッファーが存在しないファイルをvisitしている場合には、この関数は-1をリターンする。

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

この関数はバッファーがvisitしているファイルの最終変更時刻の記録を、timeが非nilならtime、それ以外はvisitしているファイルの最終変更時刻に更新する。

timenilvisited-file-modtimeがリターンする整数フラグでなければ、それはcurrent-timeで使用される形式(high low microsec picosec)というフォーマットであること(Time of Dayを参照)。

この関数はバッファーが通常のようにファイルから読み取られたものでない場合や、ファイル自身が害のない既知の理由により変更されている場合に有用。

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

これはvisitしているファイルfilenameがバッファーのテキストより新しいときにバッファーの変更を試みた後に、ユーザーに処理方法を尋ねるために使用する関数。Emacsはディスク上のファイルの変更時刻がバッファーを最後に保存した時刻新しいかどうか、バッファーのコンテンツが変更されているかによりこれを検知する。これはおそらく他のプログラムがファイルを変更したことを意味する。

この関数が正常にリターンするかどうかは、ユーザーの応答に依存する。関数はバッファーの変更が処理された場合は正常にリターンし、バッファーの変更が許可されなかった場合はデータ(filename)とともにエラーfile-supersessionをシグナルする。

この関数は適切なタイミングでEmacsにより自動的に呼び出される。これは再定義することによりEmacsをカスタマイズ可能にするために存在する。標準的な定義はファイルuserlock.elを参照のこと。

File Locksのファイルロックのメカニズムも参照されたい。