Next: Reverting, Previous: Backup Files, Up: Backups and Auto-Saving [Contents][Index]
Emacsは、visitしているすべてのファイルを定期的に保存します。これは自動保存(auto-saving)と呼ばれます。自動保存はシステムがクラッシュした場合に失われる作業量を、一定の作業量以下にします。デフォルトでは自動保存は300キーストロークごと、またはidleになった30秒後に発生します。自動保存に関するユーザー向けの情報についてはAuto-Saving: Protection Against Disasters in The GNU Emacs Manualを参照してください。ここでは自動保存の実装に使用される関数と、それらを制御する変数について説明します。
このバッファーローカル変数はカレントバッファーの自動保存に使用されるファイル名。そのバッファーが自動保存されるべきでなければnil
。
buffer-auto-save-file-name ⇒ "/xcssun/users/rms/lewis/#backups-ja.texi#"
これはバッファーローカルなマイナーモードであるAuto Saveモードにたいするモードコマンド。Auto Saveモードが有効なときはそのバッファーで自動保存が有効。呼び出し方法は他のマイナーモードと同様(Minor Mode Conventionsを参照)。
ほとんどのマイナーモードと異なりauto-save-mode
変数は存在しない。buffer-auto-save-file-name
が非nil
でbuffer-saved-size
(以下参照)が非0ならAuto
Saveモードが有効。
この関数はfilenameがauto-saveファイルのような文字列なら非nil
をリターンする。先頭と末尾がハッシュマーク(‘#’)であるような名前はauto-saveファイルの可能性があるという、auto-saveファイルにたいする通常の命名規則を想定する。引数filenameはディレクトリーパートを含まないこと。
(make-auto-save-file-name) ⇒ "/xcssun/users/rms/lewis/#backups-ja.texi#"
(auto-save-file-name-p "#backups-ja.texi#") ⇒ 0
(auto-save-file-name-p "backups-ja.texi") ⇒ nil
この関数の標準的な定義は、以下のようになる:
(defun auto-save-file-name-p (filename) "FILENAMEを以下によって取得できるなら非nilをリターンする" (string-match "^#.*#$" filename))
この関数はauto-saveファイルの命名規則規則を変更したいときにカスタマイズできるようにするために存在する。これを再定義するなら、それに対応して関数make-auto-save-file-name
も忘れずに再定義すること。
この関数はカレントバッファーの自動保存に使用されるファイル名をリターンする。これはファイル名の先頭と末尾にハッシュマーク(‘#’)を単に追加する。この関数は変数auto-save-visited-file-name
(以下参照)を調べない。呼び出し側はまずその変数をチェックすること。
(make-auto-save-file-name) ⇒ "/xcssun/users/rms/lewis/#backups-ja.texi#"
以下はこの関数の標準的定義の簡易版:
(defun make-auto-save-file-name () "カレントバッファーの自動保存に使用される\ ファイル名をリターンする" (if buffer-file-name
(concat (file-name-directory buffer-file-name) "#" (file-name-nondirectory buffer-file-name) "#") (expand-file-name (concat "#%" (buffer-name) "#"))))
auto-saveファイルの命名規則をカスタマイズして再定義できるように、これは独立した関数として存在している。ただしこれに対応した方法でauto-save-file-name-p
も忘れずに変更すること。
この変数が非nil
ならEmacsはvisit中のファイルにバッファーを自動保存する。つまり自動保存は編集中ファイルと同じファイルにたいして行われる。この変数は通常はnil
なので、auto-saveファイルはmake-auto-save-file-name
で作成された別の名前をもつ。
この変数の値を変更した際、バッファー内でauto-saveモードを再度有効にするまで、既存バッファーにたいして新たな値は効果をもたない。すでにauto-saveモードが有効なら、再度auto-save-mode
が呼び出されるまで同じファイルに自動保存が行われる。
この変数を非nil
にセットしても自動保存とバッファーの保存は異なるという事実は変わらないことに注意(Saving Buffersで説明したフックはバッファーが自動保存された際には実行されない)。
この関数はカレントバッファーが最後に読み込み、または保存されて以降に自動保存されていればt
をリターンする。
この関数はカレントバッファーを自動保存済みとマークする。そのバッファーは、バッファーテキストが再度変更されるまで自動保存されないだろう。この関数はnil
をリターンする。
この変数の値は自動保存の頻度を入力イベント数で指定する。この分の入力イベント読み取りごとに、Emacsは自動保存が有効なすべてのバッファーにたいして自動保存を行う。これを0にするとタイプした文字数にもとづいた自動保存は無効になる。
この変数の値は自動保存が発生すべきidle時間の秒数。この秒数分ユーザーが休止するたびに、Emacsは自動保存が有効なすべてのバッファーにたいして自動保存を行う(カレントバッファーが非常に大きければ、指定されたタイムアウトはサイズ増加とともに増加される因子で乗ぜられる。この因子は1MBのバッファーにたいしておよそ4)。
値が0かnil
ならidle時間にもとづいた自動保存は行われず、auto-save-interval
で指定される入力イベント数の後のみ自動保存が行われる。
このノーマルフックは自動保存が行われようとするたびに毎回実行される。
この変数が非nil
ならファイルをvisitするバッファーの自動保存がデフォルトで有効になり、それ以外では有効にならない。
この関数は自動保存される必要があるすべてのバッファーを自動保存する。これは自動保存が有効なバッファーであり、かつ前回の自動保存以降に変更されたすべてのバッファーを保存する。
いずれかのバッファーが自動保存される場合には、do-auto-save
は自動保存が行われる間、通常はそれを示すメッセージ‘Auto-saving...’をエコーエリアに表示する。しかしno-messageが非nil
ならこのメッセージは抑制される。
current-onlyが非nil
なら、カレントバッファーだけが自動保存される。
この関数はdelete-auto-save-files
が非nil
ならカレントバッファーのauto-saveファイルを削除する。これはバッファー保存時に毎回呼び出される。
この関数はforceがnil
なら最後に本当の保存が行われて以降、カレントEmacsセッションにより書き込まれたファイルだけを削除する。
この変数は関数delete-auto-save-file-if-necessary
により使用される。これが非nil
なら、Emacsは(visitされているファイルに)本当に保存が行われたときにauto-saveファイルを削除する。これはディスク容量を節約してディレクトリーを整理する。
この関数はvisitされているファイルの名前が変更されていればカレントバッファーのauto-saveファイルの名前を調整する。これはカレントEmacsセッションでauto-saveファイルが作成されていれば、既存のauto-saveファイルのリネームも行う。visitされているファイルの名前が変更されていなければ、この関数は何も行わない。
このバッファーローカル変数の値はカレントバッファーが最後に読み取り、保存、または自動保存されたときのバッファーの長さ。これはサイズの大幅な減少の検知に使用され、それに応じて自動保存がオフに切り替えられる。
-1なら、それはサイズの大幅な減少によりそのバッファーの自動保存が一時的に停止されていることを意味する。明示的な保存によりこの変数に正の値が格納されて、自動保存が再び有効になる。自動保存をオフやオンに切り替えることによってもこの変数は更新されるので、サイズの大幅な減少は忘れられさられる。
-2なら、特にバッファーサイズの変更により一時的に自動保存を停止されないように、そのバッファーがバッファーサイズの変更を無視することを意味する。。
この変数は、(非nil
なら)すべてのauto-saveファイルの名前を記録するファイルを指定する。Emacsが自動保存を行うたびには自動保存が有効な各バッファーごとに2行ずつ書き込みを行う。1行目はvisitされているファイルの名前(ファイルをvisitしないバッファーの場合は空)、2行目はauto-saveファイルの名前を示す。
Emacsを正常にexitした際にこのファイルは削除される。Emacsがクラッシュした場合にはこのファイルを調べることにより、失われるはずだった作業を含んだすべてのauto-saveファイルを探すことができる。recover-session
コマンドはそれらを見つけるためにこのファイルを使用する。
このファイルにたいするデフォルト名は、ユーザーのホームディレクトリーにある‘.saves-’で始まるファイルを指定する。この名前にはEmacsのプロセスIDとホスト名も含まれる。
initファイルを読み込んだ後、(nil
にセット済みでなければ)Emacsはこのプレフィックスにもとづいたホスト名とプロセスIDを追加して、auto-save-list-file-name
を初期化する。initファイル内でこれをnil
にセットした場合には、Emacsはauto-save-list-file-name
を初期化しない。