Next: , Previous: , Up: Backups and Auto-Saving   [Contents][Index]


26.2 自動保存

Emacsは、visitしているすべてのファイルを定期的に保存します。これは自動保存(auto-saving)と呼ばれます。自動保存はシステムがクラッシュした場合に失われる作業量を、一定の作業量以下にします。デフォルトでは自動保存は300キーストロークごと、またはidleになった30秒後に発生します。自動保存に関するユーザー向けの情報についてはAuto-Saving: Protection Against Disasters in The GNU Emacs Manualを参照してください。ここでは自動保存の実装に使用される関数と、それらを制御する変数について説明します。

Variable: buffer-auto-save-file-name

このバッファーローカル変数はカレントバッファーの自動保存に使用されるファイル名。そのバッファーが自動保存されるべきでなければnil

buffer-auto-save-file-name
     ⇒ "/xcssun/users/rms/lewis/#backups-ja.texi#"
Command: auto-save-mode arg

これはバッファーローカルなマイナーモードであるAuto Saveモードにたいするモードコマンド。Auto Saveモードが有効なときはそのバッファーで自動保存が有効。呼び出し方法は他のマイナーモードと同様(Minor Mode Conventionsを参照)。

ほとんどのマイナーモードと異なりauto-save-mode変数は存在しない。buffer-auto-save-file-nameが非nilbuffer-saved-size(以下参照)が非0ならAuto Saveモードが有効。

Function: auto-save-file-name-p filename

この関数は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も忘れずに再定義すること。

Function: 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も忘れずに変更すること。

User Option: auto-save-visited-file-name

この変数が非nilならEmacsはvisit中のファイルにバッファーを自動保存する。つまり自動保存は編集中ファイルと同じファイルにたいして行われる。この変数は通常はnilなので、auto-saveファイルはmake-auto-save-file-nameで作成された別の名前をもつ。

この変数の値を変更した際、バッファー内でauto-saveモードを再度有効にするまで、既存バッファーにたいして新たな値は効果をもたない。すでにauto-saveモードが有効なら、再度auto-save-modeが呼び出されるまで同じファイルに自動保存が行われる。

この変数を非nilにセットしても自動保存とバッファーの保存は異なるという事実は変わらないことに注意(Saving Buffersで説明したフックはバッファーが自動保存された際には実行されない)。

Function: recent-auto-save-p

この関数はカレントバッファーが最後に読み込み、または保存されて以降に自動保存されていればtをリターンする。

Function: set-buffer-auto-saved

この関数はカレントバッファーを自動保存済みとマークする。そのバッファーは、バッファーテキストが再度変更されるまで自動保存されないだろう。この関数はnilをリターンする。

User Option: auto-save-interval

この変数の値は自動保存の頻度を入力イベント数で指定する。この分の入力イベント読み取りごとに、Emacsは自動保存が有効なすべてのバッファーにたいして自動保存を行う。これを0にするとタイプした文字数にもとづいた自動保存は無効になる。

User Option: auto-save-timeout

この変数の値は自動保存が発生すべきidle時間の秒数。この秒数分ユーザーが休止するたびに、Emacsは自動保存が有効なすべてのバッファーにたいして自動保存を行う(カレントバッファーが非常に大きければ、指定されたタイムアウトはサイズ増加とともに増加される因子で乗ぜられる。この因子は1MBのバッファーにたいしておよそ4)。

値が0かnilならidle時間にもとづいた自動保存は行われず、auto-save-intervalで指定される入力イベント数の後のみ自動保存が行われる。

Variable: auto-save-hook

このノーマルフックは自動保存が行われようとするたびに毎回実行される。

User Option: auto-save-default

この変数が非nilならファイルをvisitするバッファーの自動保存がデフォルトで有効になり、それ以外では有効にならない。

Command: do-auto-save &optional no-message current-only

この関数は自動保存される必要があるすべてのバッファーを自動保存する。これは自動保存が有効なバッファーであり、かつ前回の自動保存以降に変更されたすべてのバッファーを保存する。

いずれかのバッファーが自動保存される場合には、do-auto-saveは自動保存が行われる間、通常はそれを示すメッセージ‘Auto-saving...’をエコーエリアに表示する。しかしno-messageが非nilならこのメッセージは抑制される。

current-onlyが非nilなら、カレントバッファーだけが自動保存される。

Function: delete-auto-save-file-if-necessary &optional force

この関数はdelete-auto-save-filesが非nilならカレントバッファーのauto-saveファイルを削除する。これはバッファー保存時に毎回呼び出される。

この関数はforcenilなら最後に本当の保存が行われて以降、カレントEmacsセッションにより書き込まれたファイルだけを削除する。

User Option: delete-auto-save-files

この変数は関数delete-auto-save-file-if-necessaryにより使用される。これが非nilなら、Emacsは(visitされているファイルに)本当に保存が行われたときにauto-saveファイルを削除する。これはディスク容量を節約してディレクトリーを整理する。

Function: rename-auto-save-file

この関数はvisitされているファイルの名前が変更されていればカレントバッファーのauto-saveファイルの名前を調整する。これはカレントEmacsセッションでauto-saveファイルが作成されていれば、既存のauto-saveファイルのリネームも行う。visitされているファイルの名前が変更されていなければ、この関数は何も行わない。

Variable: buffer-saved-size

このバッファーローカル変数の値はカレントバッファーが最後に読み取り、保存、または自動保存されたときのバッファーの長さ。これはサイズの大幅な減少の検知に使用され、それに応じて自動保存がオフに切り替えられる。

-1なら、それはサイズの大幅な減少によりそのバッファーの自動保存が一時的に停止されていることを意味する。明示的な保存によりこの変数に正の値が格納されて、自動保存が再び有効になる。自動保存をオフやオンに切り替えることによってもこの変数は更新されるので、サイズの大幅な減少は忘れられさられる。

-2なら、特にバッファーサイズの変更により一時的に自動保存を停止されないように、そのバッファーがバッファーサイズの変更を無視することを意味する。。

Variable: auto-save-list-file-name

この変数は、(非nilなら)すべてのauto-saveファイルの名前を記録するファイルを指定する。Emacsが自動保存を行うたびには自動保存が有効な各バッファーごとに2行ずつ書き込みを行う。1行目はvisitされているファイルの名前(ファイルをvisitしないバッファーの場合は空)、2行目はauto-saveファイルの名前を示す。

Emacsを正常にexitした際にこのファイルは削除される。Emacsがクラッシュした場合にはこのファイルを調べることにより、失われるはずだった作業を含んだすべてのauto-saveファイルを探すことができる。recover-sessionコマンドはそれらを見つけるためにこのファイルを使用する。

このファイルにたいするデフォルト名は、ユーザーのホームディレクトリーにある‘.saves-’で始まるファイルを指定する。この名前にはEmacsのプロセスIDとホスト名も含まれる。

User Option: auto-save-list-file-prefix

initファイルを読み込んだ後、(nilにセット済みでなければ)Emacsはこのプレフィックスにもとづいたホスト名とプロセスIDを追加して、auto-save-list-file-nameを初期化する。initファイル内でこれをnilにセットした場合には、Emacsはauto-save-list-file-nameを初期化しない。