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モードが有効なときはそのバッファーで自動保存が有効。呼び出し方法は他のマイナーモードと同様(マイナーモード記述の規約を参照)。
ほとんどのマイナーモードと異なりauto-save-mode
変数は存在しない。buffer-auto-save-file-name
が非nil
でbuffer-saved-size
(以下参照)が非0ならAuto
Saveモードが有効。
この変数はバッファーにたいしてauto-saveファイル名を作成する前にバッファーのファイル名に適用する変換(transform)をリストする。
この変換はそれぞれ(regexp replacement [uniquify])
という形式のリスト。regexpはファイル名にたいしてマッチを行う正規表現であり、マッチしたらマッチ部分をreplacementで置き換えるためにreplace-match
が使用される。オプション要素uniquifyが非nil
なら、クラッシュを回避するために変換ファイルのディレクトリー部分(クラッシュ回避のためにディレクトリー区切り文字はすべて‘!’に変更)とバッファーのファイル名を結合してauto-saveファイル名を構築する(ファイルシステムが結果となるファイルを切り詰める場合には正しく機能しないだろう)。
uniquifyがsecure-hash-algorithms
のメンバーのいずれかなら、バッファーのファイル名にsecure-hash
を適用することによって、Emacsはauto-saveファイルのディレクトリー部分以外を構築する。これは極端に長いファイル名というリスクを回避する。
リストにあるすべての変換をリスト順に試行する。いずれかの変換が適用されたらそれが最終結果となり、それ以上の変換は試みられない。
デフォルト値ではリモートファイルのauto-saveファイルは一時ディレクトリーに置くようセットアップされている(一意なファイル名の生成を参照)。
長いファイル名がないMS-DOSファイルシステムでは、この変数は常に無視される。
この関数は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
この関数はカレントバッファーの自動保存に使用されるファイル名をリターンする。これはファイル名の先頭と末尾にハッシュマーク(‘#’)を単に追加する。この関数は変数auto-save-visited-file-name
(以下参照)を調べない。呼び出し側はまずその変数をチェックすること。
(make-auto-save-file-name) ⇒ "/xcssun/users/rms/lewis/#backups-ja.texi#"
この変数が非nil
ならEmacsはvisit中のファイルにバッファーを自動保存する。つまり自動保存は編集中ファイルと同じファイルにたいして行われる。この変数は通常はnil
なので、auto-saveファイルはmake-auto-save-file-name
で作成された別の名前をもつ。
この変数の値を変更した際、バッファー内でauto-saveモードを再度有効にするまで、既存バッファーにたいして新たな値は効果をもたない。すでにauto-saveモードが有効なら、再度auto-save-mode
が呼び出されるまで同じファイルに自動保存が行われる。
この変数を非nil
にセットしても自動保存とバッファーの保存は異なるという事実は変わらないことに注意(バッファーの保存で説明したフックはバッファーが自動保存された際には実行されない)。
この関数はカレントバッファーが最後に読み込み、または保存されて以降に自動保存されていれば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
を初期化しない。