@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. 
@c See the file elisp-jp.texi for copying conditions.
@c 複製の条件は elisp-jp.texi に書いてあります。
@setfilename ../info/backups-jp
@node Backups and Auto-Saving, Buffers, Files, Top
@chapter バックアップと自動セーブ

バックアップ・ファイルと自動セーブは、Emacsがクラッシュやユーザ自身のあ
やまちがもたらす結果からユーザを守ろうとするのに使う二つの方法です。自動
セーブは、現在の編集セッションの初期の段階のテキストを保存します。バック
アップ・ファイルは現在のセッション以前のファイルの内容を保存します。

@menu
* Backup Files::   バックアップ・ファイルはどのように作られるか。名前はど
                     うのように選ばれるのか。
* Auto-Saving::    自動セーブ・ファイルはどのように作られるか。名前はど
                     のように選ばれるのか。
* Reverting::      @code{revert-buffer}とそのカスタマイズ方法。
@end menu

@node Backup Files, Auto-Saving, Backups and Auto-Saving, Backups and Auto-Saving
@section バックアップ・ファイル
@cindex backup file
@cindex バックアップ・ファイル[はつくあつふふあいる]

@dfn{バックアップ・ファイル(backup file)}は、編集しているファイルの古い
内容のコピーです。Emacsはバッファを、読み込んだファイル(visited file)に
最初にセーブするときにバックアップ・ファイルを作ります。普通は、バックアッ
プ・ファイルには現在の編集セッションの前のファイルの内容が入っていること
になります。バックアップ・ファイルの内容は、通常は一度作られたら変更され
ずに残ります。

バックアップは通常、読み込んだファイルを新しい名前に変更して作ります。読
み込んだファイルをコピーしてバックアップ・ファイルを作るように指定すること
も可能です。この選択は複数の名前をもつファイルに関して違いがあります。ま
た、編集しているファイルが元のオーナーの所有のままか、編集しているユーザ
の所有になるかにも影響します。

デフォルトでは、Emacsは編集しているファイルそれぞれに一つのバックアップ・
ファイルを作ります。あるいは、番号付のバックアップを指定することもできま
す。こうすると、新しいバックアップ・ファイルはそれぞれ新しい名前になりま
す。古い番号つきバックアップは、もうこれ以上いらないと思ったときに消すこ
とができますし、自動的に消すこともできます。

@menu
* Making Backups::     Emacsはいつ、どのようにバックアップ・ファイルを作るか。
* Rename or Copy::     二つの選択肢:古いファイルの名前を変えるか、コピーするか。
* Numbered Backups::   おのおののソース・ファイルの複数のバックアップをとっておく。
* Backup Names::       バックアップ・ファイルの名前のつけ方、カスタマイズ。
@end menu

@node Making Backups, Rename or Copy, Backup Files, Backup Files
@subsection バックアップ・ファイルの作成

@defun backup-buffer
この関数はカレント・バッファに読み込んでいるファイルのバックアップを、必
要ならば作ります。@code{save-buffer}はバッファが最初にセーブされるときに
これを呼び出します。
@end defun

@defvar buffer-backed-up
このバッファローカル変数は、このバッファのファイルがこのバッファのために
バックアップされているかどうかを示します。非@code{nil}ならバックアップ・
ファイルは書き込まれています。そうでなければファイルは次のセーブ時にバッ
クアップする必要があります(バックアップがオンになっていれば)。これは常時
ローカルで、@code{kill-local-variables}は効きません。
@end defvar

@defopt make-backup-files
この変数はバックアップ・ファイルを作るかどうかを決めます。これが非
@code{nil}なら、Emacsはそれぞれのファイルのバックアップをそれが最初にセー
ブされるときに作ります、ただし@code{backup-inhibited}が@code{nil}(下記参
照)ならばです。

次の例は、@code{make-backup-files}変数を@file{RMAIL}バッファの中だけで変
更して、ほかでは変更しない方法を示しています。これを@code{nil}にすると、
Emacsは@file{RMAIL}ファイルのバックアップを作らなくなり、ディスク・スペー
スの節約になります。(このコードは@file{.emacs}ファイルに入れておくといい
でしょう。)

@smallexample
@group
(add-hook 'rmail-mode-hook 
          (function (lambda ()
                      (make-local-variable 
                       'make-backup-files)
                      (setq make-backup-files nil))))
@end group
@end smallexample
@end defopt

@defvar backup-enable-predicate
この変数の値は、ファイルをバックアップする必要があるかどうか判断するとき
に呼び出される関数です。この関数は引数を一つ受けとり、それをファイル名と
みなします。この関数が@code{nil}を返す場合はそのファイルはバックアップす
る必要がありません。そうでない場合はこの節のほかの変数によってバックアッ
プするかどうか、またその方法が決まります。

デフォルト値はこうです:

@example
(lambda (name)
  (or (< (length name) 5)
      (not (string-equal "/tmp/"
                         (substring name 0 5)))))
@end example
@end defvar

@defvar backup-inhibited
この変数が非@code{nil}の場合はバックアップを行ないません。この変数には、
読み込んだファイル名を@code{backup-enable-predicate}で試した結果が記録さ
れています。この変数は、読み込んだファイルにしたがってバックアップを抑制
するほかの仕組みが一緒に使っても大丈夫です。
たとえば、VCはバージョン管理システムで管理されているファイルのバッ
クアップが作られるのを防ぐためにこの変数を非@code{nil}にセットします。

この変数は、主モードを変更しても変数の値が変わらないように常時ロー
カルになっています。主モードはこの変数をセットしてはいけません。代
わりに@code{make-backup-files}をセットすべきです。
@end defvar

@node Rename or Copy, Numbered Backups, Making Backups, Backup Files
@subsection バックアップの手段は名前の変更?それともコピー?
@cindex backup files, how to make them
@cindex バックアップ・ファイルの作り方[はつくあつふふあいるのつくりかた]

Emacsがバックアップ・ファイルを作る方法は二つあります:

@itemize @bullet
@item
Emacsは元のファイルをバックアップ・ファイルになるように名前を変更して、次
にバッファを新しいファイルに書き出すことができます。この手続きのあとでは、
元のファイルの別の名前(つまりハード・リンク)は全てバックアップ・ファイルの方
を参照することになります。新しいファイルのオーナーは編集しているユーザに
なり、グループはそのディレクトリでユーザが新しいファイルを作成する場合の
デフォルトになります。

@item
Emacsは元のファイルをバックアップ・ファイルにコピーし、新しい内容を元のファ
イルに上書きすることができます。この手続きのあとでは、元のファイルの別の
名前(つまりハード・リンク)は全てそのファイルの現在のバージョンを参照したま
まになります。ファイルのオーナーとグループは変わりません。
@end itemize

1番目の、名前を変更する方法がデフォルトです。

変数@code{backup-by-copying}が非@code{nil}なら2番目の方法、元のファイル
をコピーしてバッファの新しい内容を上書きする方法を使います。変数
@code{file-precious-flag}が非@code{nil}のときも同様の効果(本来の意味の副
作用としてですが)があります。@xref{Saving Buffers}。

@defvar backup-by-copying
この変数が非@code{nil}なら、Emacsは常にバックアップ・ファイルをコピーによっ
て作ります。
@end defvar

以下の二つの変数が非@code{nil}のときは、ある特殊な場合に2番目の方法が使わ
れることになります。ファイルがその特殊な場合に当てはまらない場合はファイ
ルの扱い方に何の影響もありません。

@defvar backup-by-copying-when-linked
この変数が非@code{nil}なら、Emacsは複数の名前をもつファイル(ハード・リンク)
のバックアップをコピーによって作ります。

@code{backup-by-copying}が非@code{nil}なら常にコピーが使われるので、この
変数は@code{backup-by-copying}が@code{nil}のときだけ意味があります。
@end defvar

@defvar backup-by-copying-when-mismatch
この変数が非@code{nil}なら、Emacsは名前を変更するとオーナーやグループが
変わってしまうようなファイルのバックアップをコピーによって作ります。

名前を変更してもファイルのオーナーやグループに変化がないときは、すなわち
ファイルがユーザーの所有で、グループがそこでユーザーがファイルを作成した
ときのデフォルトと一致している場合、この値は何の影響も与えません。

@code{backup-by-copying}が非@code{nil}なら常にコピーが使われるので、この
変数は@code{backup-by-copying}が@code{nil}のときだけ意味があります。
@end defvar

@node Numbered Backups, Backup Names, Rename or Copy, Backup Files
@subsection 番号付バックアップ・ファイルの作成と削除

ファイルの名前が@file{foo}なら、その番号付バックアップ・バージョンの名前は
@file{foo.~@var{v}~}になります。@var{v}はさまざまな整数で、こんな感じになり
ます: @file{foo.~1~}、@file{foo.~2~}、@file{foo.~3~}、@dots{}、
@file{foo.~259~}など。

@defopt version-control
この変数は、単独の番号付でないバックアップ・ファイルを作るか、複数の番号付
バックアップを作るかを制御します。

@table @asis
@item @code{nil}
読み込んだファイルがすでに番号付バックアップを持っていれば番号付バックアッ
プを作り、そうでなければ作りません。

@item @code{never}
番号付バックアップを作りません。

@item @var{anything else}
番号付バックアップを作ります。
@end table
@end defopt

番号付バックアップを使っていると、しまいにはたくさんのバックアップ・バー
ジョンができてしまいます。そうなったらそれらを削除しなくてはなりません。
Emacsがこれを自動で行なうこともできますし、それらを削除するかどうかユー
ザに問い合わせることもできます。

@defopt kept-new-versions
この変数の値は、新しい番号付バックアップが作られたときに取っておく最新の
バージョンの数です。新しく作られたバックアップはこの数に含まれています。
デフォルト値は2です。
@end defopt

@defopt kept-old-versions
この変数の値は、新しい番号付バックアップが作られたときに取っておく最も古
いバージョンの数です。デフォルト値は2です。
@end defopt

1、2、3、5と7の番号がついたバックアップがあり、これらの変数の値が両方と
も2なら、1と2の番号のバックアップを古いバージョンとして取っておき、5番と
7番を新しいバージョンとしてとっておきます。バックアップ・バージョン3は過
剰ということになります。関数@code{find-backup-file-name}(@pxref{Backup
Names})は、どのバックアップ・バージョンを削除するか決定する役を引き受け
ますが、それ自身でそれらを削除することはありません。

@defopt trim-versions-without-asking
この変数が非@code{nil}なら、ファイルをセーブするときに過剰なバックアップ・
バージョンを黙って削除します。そうでなければ、それらを削除するかどうかユー
ザに問い合わせます。
@end defopt

@defopt dired-kept-versions
この変数はDiredコマンド@kbd{.}(@code{dired-clean-directory})中で最新のバックアップ・バージョンをいくつ取っておくかを指定します。これは、新しいバックアップ・ファイルを作るときに@code{kept-new-versions}が指定している動作とお
なじことです。デフォルト値は2です。
@end defopt

@node Backup Names,  , Numbered Backups, Backup Files
@subsection バックアップ・ファイルの命名

この節の関数を再定義することによってバックアップ・ファイルの名前をつけるや
り方をカスタマイズできるようにすることを主な目的として説明します。一つを
変更したなら、多分残りも変更する必要があるでしょう。

@defun backup-file-name-p filename
この関数は、@var{filename}がバックアップ・ファイルの名前として適当な場合、
非@code{nil}を返します。@var{filename}という名前のファイルが存在する必要
はありません。この関数は名前をチェックするだけです。

@smallexample
@group
(backup-file-name-p "foo")
     @result{} nil
@end group
@group
(backup-file-name-p "foo~")
     @result{} 3
@end group
@end smallexample

この関数の標準の定義は以下のとおりです:

@smallexample
@group
(defun backup-file-name-p (file)
  "Return non-nil if FILE is a backup file \
name (numeric or not)..."
  (string-match "~$" file))
@end group
@end smallexample

@noindent
したがって、この関数はファイル名が@samp{~}で終っていれば非@code{nil}値を
返します。(説明文字列の最初の行を二つの行に分割するのにバックスラッシュを
使っていますが、実際には1行になります。)
@c ちょっと怪しい…

この簡単な式を独立した関数にしているのは、カスタマイズするときに再定義し
やすくするためです。
@end defun

@defun make-backup-file-name filename
この関数は、ファイル@var{filename}の番号つきでないバックアップ・ファイル
の名前の文字列を返します。Unixでは、ただ単に@var{filename}にチルダ
(tilde)を後ろにつけたものになります。

この関数の標準の定義は以下のとおりです:

@smallexample
@group
(defun make-backup-file-name (file)
  "Create the non-numeric backup file name for FILE.
@dots{}"
  (concat file "~"))
@end group
@end smallexample

この関数を定義し直すことによって、バックアップ・ファイルの名前のつけ方を変
えることができます。以下の例では、チルダを後ろにつけるのに加えて@samp{.}
を前につけるように@code{make-backup-file-name}を定義し直しています:

@smallexample
@group
(defun make-backup-file-name (filename)
  (concat "." filename "~"))
@end group

@group
(make-backup-file-name "backups.texi")
     @result{} ".backups.texi~"
@end group
@end smallexample
@end defun

@defun find-backup-file-name filename
この関数は、@var{filename}の新しいバックアップ・ファイルのファイル名を算出
します。また、既存のバックアップ・ファイルのうち削除した方がいいものを示し
すこともします。@code{find-backup-file-name}はリストを返します。そのリス
トの@sc{car}が新しいバックアップ・ファイルの名前で、@sc{cdr}が削除した方が
いいバックアップ・ファイルのリストです。

二つの変数@code{kept-old-versions}と@code{kept-new-versions}は、取ってお
くべきバックアップ・バージョンを決めます。この関数はこれらのバージョンを
取っておくために、返り値の@sc{cdr}からこれらを除きます。@xref{Numbered
Backups}。

この例では、@file{~rms/foo.~5~}が新しいバックアップ・ファイルに使う名前で、
@file{~rms/foo.~3~}が``過剰''バージョン、現時点で消すべきだと思われるバー
ジョン、であることを示しています。

@smallexample
@group
(find-backup-file-name "~rms/foo")
     @result{} ("~rms/foo.~5~" "~rms/foo.~3~")
@end group
@end smallexample
@end defun

@c Emacs 19 feature
@defun file-newest-backup filename
この関数は、@var{filename}の最も新しいバックアップ・ファイルの名前を返しま
す。そのファイルのバックアップ・ファイルがなければ@code{nil}を返します。

あるファイル比較コマンドは、ファイルをその最新のバックアップと自動的に比
較するためにこの関数を使います。
@end defun 

@node Auto-Saving, Reverting, Backup Files, Backups and Auto-Saving
@section 自動セーブ
@cindex auto-saving
@cindex 自動セーブ[じどうせーぶ]

Emacsは読み込んだファイル全てを定期的にセーブします。これを@dfn{自動セー
ブ(auto-saving)}といいます。自動セーブはシステムがクラッシュしたときに、
ある決まった量以上の作業が失われることを防ぎます。デフォルトでは自動セー
ブは300打鍵ごと、または30秒以上暇だと行なわれます。自動セーブのユーザ向
け情報は、@xref{Auto-Save, Auto-Save, Auto-Saving: Protection Against
Disasters, emacs, The GNU Emacs Manual}。ここでは自動セーブを実装するの
に使われている関数とそれらを制御する変数について説明します。

@defvar buffer-auto-save-file-name
このバッファローカル変数は、カレント・バッファを自動セーブするのに使われ
るファイルの名前です。バッファが自動セーブされないときは@code{nil}です。

@example
@group
buffer-auto-save-file-name
=> "/xcssun/users/rms/lewis/#files.texi#"
@end group
@end example
@end defvar

@deffn Command auto-save-mode arg
対話的に引数なしで使われたときはこのコマンドはトグル・スイッチになり、カ
レント・バッファの自動セーブがオフならオンにし、オンならオフにします。引
数@var{arg}があり、その値が@code{t}、空ではないリスト、正の整数のいずれ
かのときは、このコマンドは自動セーブをオンにします。それ以外のときは自動
セーブをオフにします。
@end deffn

@defun auto-save-file-name-p filename
この関数は@var{filename}が自動セーブ・ファイルの名前になり得る文字列のとき
非@code{nil}値を返します。この関数は、ハッシュ・マーク(@samp{#})で始まって
終る名前が自動セーブ・ファイル名になり得るという自動セーブ・ファイルの命名法
の知識に基づいて働きます。引数@var{filename}はディレクトリ部分を含んでい
てはいけません。

@example
@group
(make-auto-save-file-name)
     @result{} "/xcssun/users/rms/lewis/#files.texi#"
@end group
@group
(auto-save-file-name-p "#files.texi#")
     @result{} 0
@end group
@group
(auto-save-file-name-p "files.texi")
     @result{} nil
@end group
@end example

この関数の標準の定義は以下のとおりです:

@example
@group
(defun auto-save-file-name-p (filename)
  "Return non-nil if FILENAME can be yielded by..."
  (string-match "^#.*#$" filename))
@end group
@end example

この関数は、自動セーブ・ファイルの命名法を変更したいときにカスタマイズ可能
にするために存在します。これを定義し直したときは、必ず関数
@code{make-auto-save-file-name}も定義し直してください。
@end defun

@defun make-auto-save-file-name
この関数はカレント・バッファの自動セーブに使うファイル名を返します。これ
はファイル名の前と後ろにハッシュ・マーク(@samp{#})をつけただけのものです。
この関数は変数@code{auto-save-visited-file-name}(下記参照)を見ませんので、
この関数を呼び出す前にチェックしなくてはなりません。

@example
@group
(make-auto-save-file-name)
     @result{} "/xcssun/users/rms/lewis/#backup.texi#"
@end group
@end example

この関数の標準の定義は以下のとおりです:

@example
@group
(defun make-auto-save-file-name ()
  "Return file name to use for auto-saves \
of current buffer.
@dots{}"
  (if buffer-file-name
@end group
@group
      (concat
       (file-name-directory buffer-file-name)
       "#"
       (file-name-nondirectory buffer-file-name)
       "#")
    (expand-file-name
     (concat "#%" (buffer-name) "#"))))
@end group
@end example

自動セーブ・ファイルの命名法をカスタマイズするためにこれを定義し直せるよう
に、独立した関数として存在します。必ず@code{auto-asve-file-name-p}も一致
するように変更してください。
@end defun

@defvar auto-save-visited-file-name
この変数が非@code{nil}なら、Emacsはバッファを読み込んだファイルに自動セー
ブします。すなわち、編集しているファイルと同じファイルに自動セーブが行な
われます。通常この変数は@code{nil}なので、自動セーブ・ファイルは
@code{make-auto-save-file-name}によって作られた別の名前になります。

この変数の値を変更したときは、どのバッファでも次に自動セーブ・モードがもう
一度オンになるまで効果がありません。自動セーブ・モードがすでにオンになってい
るなら、@code{auto-save-mode}が再び呼ばれるまで同じファイル名に自動セー
ブし続けます。
@end defvar

@defun recent-auto-save-p
この関数は、カレント・バッファが最後に読み込みまたはセーブされたとき以降
に自動セーブされていたら@code{t}を返します。
@end defun

@defun set-buffer-auto-saved
この関数はカレント・バッファに自動セーブされたという印をつけます。このバッ
ファはそのテキストが次に変更されるまで自動セーブされません。この関数は
@code{nil}を返します。
@end defun

@defopt auto-save-interval
この変数の値は、Emacsが自動セーブと自動セーブの間にキーボードから読み込
む文字の数を示しています。この文字数よりも多くの文字を読み込むたびに、自
動セーブがオンになっている全てのバッファで自動セーブが行なわれます。
@end defopt

@defopt auto-save-timeout
この変数の値は、自動セーブが起きるアイドル時間の秒数です。この長さの間ユー
ザが何もしないでいるたびごとに、Emacsは必要な全てのバッファで自動セーブ
を行ないます。(実際には、カレント・バッファのサイズに依存する要因のせい
で、指定された時間より長くなります。)
@end defopt

@defvar auto-save-hook
この正規フックは自動セーブが行なわれる直前に実行されます。
@end defvar

@defopt auto-save-default
この変数が非@code{nil}なら、ファイルを読み込んでいるバッファはデフォルト
で自動セーブがオンになります。それ以外ならそうなりません。
@end defopt

@deffn Command do-auto-save &optional no-message current-only
この関数は自動セーブが必要な全てのバッファを自動セーブします。自動セーブ
がオンになっていて前回の自動セーブ以降変更されているバッファをセーブしま
す。

通常、いくつかのバッファを自動セーブすると自動セーブの実行中に
@samp{Auto-saving...}というメッセージがエコー領域に表示されます。ですが、
@var{no-message}が非@code{nil}ならメッセージは抑制されます。

@var{current-only}が非@code{nil}ならカレント・バッファだけを自動セーブし
ます。
@end deffn

@defun delete-auto-save-file-if-necessary
この関数は@code{delete-auto-save-files}が非@code{nil}ならカレント・バッ
ファの自動セーブ・ファイルを削除します。これはバッファをセーブするたびご
とに呼び出されます。
@end defun

@defvar delete-auto-save-files
この変数は関数@code{delete-auto-save-file-if-necessary}で使われます。こ
れが非@code{nil}なら、Emacsは本当のセーブを(読み込んだファイルへ)実行す
るときに自動セーブ・ファイルを削除します。これはディスク・スペースを節約し、
あなたのディレクトリが散らからないようにします。
@end defvar

@defun rename-auto-save-file
この関数はカレント・バッファのセーブするファイル名が変更されていれば、自
動セーブ・ファイル名を調節します。また既存の自動セーブ・ファイルの名前も
変えます。セーブするファイル名が変更されていなければ、この関数は何もしま
せん。
@end defun

@defvar buffer-saved-size
このバッファローカル変数の値は、カレント・バッファの最後に読み込まれたか
セーブされたか自動セーブされたときの長さです。これは、サイズの大量の減少
を検出するのに使われ、それに応じて自動セーブをオフにします。

これが-1なら、大量の削除のためにこのバッファの自動セーブが一時的に停止さ
れていることを意味します。明示的にこのバッファをセーブするとこの変数に正
の値が入れられるので、自動セーブは再びオンになります。自動セーブ・モードを
オフしたりオンするとこの変数の値も変更されます。
@end defvar

@defvar auto-save-list-file-name
この変数は(非@code{nil}なら)全ての自動セーブ・ファイルの名前を記録するファ
イルを指定します。Emacsは自動セーブを行なうたびに、自動セーブがオンになっ
ているバッファそれぞれにつき2行をこのファイルに書き込みます。1行目は読み
込んだファイルの名前で(なければ空です)、2行目は自動セーブ・ファイルの名前
です。

Emacsが正常に終了するときは、このファイルを削除します。Emacsがクラッシュ
した場合は、下手をすると失われた作業を含むかもしれない自動セーブ・ファイル
全てをそのファイルで見つけることができるでしょう。@code{recover-session}
コマンドはこれらのファイルを使います。

このファイルのデフォルトの名前はあなたのホーム・ディレクトリにあり
@samp{.saves-}で始まります。Emacsのプロセス@sc{id}とホスト名も含んでいま
す。
@end defvar

@node Reverting,  , Auto-Saving, Backups and Auto-Saving
@section 復帰

ファイルを広範囲に渡って変更してから気が変わった場合、
@code{revert-buffer}コマンドでファイルの直前のバージョンを読み込むことに
よりその変更を破棄できます。@xref{Reverting, , Reverting a Buffer,
emacs, The GNU Emacs Manual}。

@deffn Command revert-buffer &optional check-auto-save noconfirm
このコマンドはバッファのテキストをディスク上の読み込んだファイルのテキス
トで置き換えます。この動作はファイルを読み込んだまたはセーブした以降の全
ての変更を取り消します。

引数@var{check-auto-save}が非@code{nil}で、最新の自動セーブ・ファイルが読
み込んだファイルよりも新しいなら、@code{revert-buffer}はユーザに代わりに
それを使うかどうか問い合わせます。そうでなければ常に読み込んだファイル
(visited file)自身
のテキストが使われます。対話的に使う場合、数値前置引数があれば
@var{check-auto-save}がセットされます。

通常@code{revert-buffer}はバッファを変更する前に確認を求めますが、引数
@var{noconfirm}が非@code{nil}なら確認を求めません。

復帰するときにはそのバッファ中のマーカの位置を、
@code{insert-file-contents}の置換機能を使って保存しようとします。復帰す
る前にバッファの内容とファイルの内容が同一なら、全てのマーカが保存され
ます。同一でない場合はバッファを変更して、次にバッファの先頭と末尾の変更
されていないテキスト(もしあれば)の中のマーカを保存します。保存された追
加のマーカはどれも信用できません。
@c 最後の文が…
@end deffn

これらの変数、ほとんどがバッファローカル変数です、を設定することによって
@code{revert-buffer}の動作をカスタマイズできます。

@defvar revert-buffer-function
この変数の値はこのバッファを復帰するのに使う関数です。非@code{nil}ならこ
れは、復帰の作業を行なうために関数として引数なしで呼び出されます。値が
@code{nil}なら、復帰は通常のやり方で行なわれます。

Diredモードのような編集されるテキストがファイルの内容ではないがある別の
やり方で再生できるモードでは、この変数に内容を再生する関数をバッファロー
カルな値としてセットします。
@end defvar

@defvar revert-buffer-insert-file-contents-function
この変数の値はもし非@code{nil}なら、このバッファを復帰するときに新しい内
容を挿入するのに使う関数です。この関数は二つの引数を受けとります。1番目は
使うファイル名で、2番目はユーザが自動セーブ・ファイルを読み込むことを求め
たなら@code{t}になります。
@end defvar

@defvar before-revert-hook
この正規フックは変更された内容が実際に挿入される前に
@code{revert-buffer}によって実行されます。ただし
@code{revert-buffer-function}が@code{nil}のときだけです。

Font Lockモードはバッファがもうフォント修飾(fontify)されないことを記録す
るためにこのフックを使います。
@c fontifiedってどう訳せばいいの?
@end defvar

@defvar after-revert-hook
この正規フックは変更された内容が実際に挿入されたあとに
@code{revert-buffer}によって実行されます。ただし
@code{revert-buffer-function}が@code{nil}のときだけです。

Font Lockモードは更新されたバッファの内容のフォントを再算出するためにこ
のフックを使います。
@end defvar

