Emacsは、閲覧中のすべてのファイルを定期的に保存します。これを自動保存と呼びます。自動保存により、システムがクラッシュしても、失われる作業量を限定的に抑えることができます。デフォルトでは、300回のキー入力ごと、または約30秒間のアイドル状態の後に自動保存が行われます。ユーザー向けの自動保存に関する情報については、The GNU Emacs Manualの自動保存:災害からの保護を参照してください。ここでは、自動保存を実現するために使用される関数と、それらを制御する変数について説明します。
このバッファローカル変数は、現在のバッファを自動保存する際に使用されるファイル名です。バッファを自動保存しない場合は nil となります。
buffer-auto-save-file-name
⇒ "/xcssun/users/rms/lewis/#backups.texi#"
これは、バッファローカルなマイナーモードである Auto Save モードのコマンドです。Auto Save モードが有効になると、そのバッファで自動保存が有効になります。呼び出し規約は、他のマイナーモードコマンドと同様です(マイナーモード記述の規約を参照してください)。
ほとんどのマイナーモードとは異なり、auto-save-mode 変数は存在しません。buffer-auto-save-file-name が nil ではなく、かつ buffer-saved-size(後述)が 0 でない場合に、オートセーブモードが有効になります。
この変数には、自動保存ファイル名を生成する前にバッファのファイル名に適用する変換が列挙されています。
各変換は (regexp replacement [uniquify])
形式のリストです。regexp はファイル名に照合するための正規表現であり、一致した場合は replace-match を用いて一致部分を replacement に置き換えます。オプション要素 uniquify が nil
以外の場合、自動保存ファイル名は、変換後のファイル名のディレクトリ部分と、競合を防ぐためにすべてのディレクトリ区切り文字を ‘!’
に置換したバッファのファイル名を連結して構成されます。(ファイルシステムが結果として得られた名前を切り詰める場合、正しく動作しません。)
uniquify が secure-hash-algorithms の構成要素の一つである場合、Emacs はその secure-hash
をバッファファイル名に適用することで、自動保存ファイル名のディレクトリ以外の部分を生成します。これにより、ファイル名が過度に長くなるリスクを回避できます。
リスト内のすべての変換は、記載された順に試行されます。いずれかの変換が適用された場合、その結果が確定し、それ以降の変換は試行されません。
デフォルトでは、リモートファイルの自動保存ファイルを一時ディレクトリに保存するように設定されています(一意のファイル名の生成を参照)。
ロングファイル名に対応していないMS-DOSファイルシステムでは、この変数は常に無視されます。
この関数は、filename が自動保存ファイル名となり得る文字列である場合、nil 以外の値を返します。本関数は、自動保存ファイルの一般的な命名規則(先頭と末尾がハッシュ記号
(‘#’)
である名前が自動保存ファイル名となり得る)を前提としています。引数 filename
にディレクトリ部分を含めてはなりません。
(make-auto-save-file-name)
⇒ "/xcssun/users/rms/lewis/#backups.texi#"
(auto-save-file-name-p "#backups.texi#")
⇒ 0
(auto-save-file-name-p "backups.texi")
⇒ nil
この関数は、現在のバッファを自動保存する際に使用するファイル名を返します。これは、ファイル名の前後にハッシュ記号 (‘#’) を付加したものです。この関数は変数 auto-save-visited-file-name(後述)を参照しません。この関数を呼び出す側は、まずその変数を確認する必要があります。
(make-auto-save-file-name)
⇒ "/xcssun/users/rms/lewis/#backups.texi#"
この変数が nil 以外の場合、Emacs
は閲覧中のファイルにバッファを自動保存します。つまり、自動保存は編集中のファイルに対して行われます。通常、この変数は nil であるため、自動保存ファイルには make-auto-save-file-name によって生成される固有の名前が付けられます。
この変数の値を変更しても、次回そのバッファで自動保存モードが再度有効になるまで、新しい値は既存のバッファに反映されません。すでに自動保存モードが有効になっている場合は、auto-save-mode が再度呼び出されるまで、同じファイル名で自動保存が継続されます。
なお、この変数にnil以外の値を設定しても、自動保存がバッファの保存とは異なるという事実に変わりはありません。例えば、バッファの保存で説明されているフックは、バッファが自動保存される際には実行されません。
この関数は、現在のバッファが最後に読み込まれたか保存されて以降、自動保存されている場合に t
を返します。
この関数は、現在のバッファを自動保存対象としてマークします。バッファの内容が再度変更されるまで、そのバッファが再度自動保存されることはありません。この関数は
nil を返します。
この変数の値は、入力イベント数単位で自動保存を行う頻度を指定します。この数だけ追加の入力イベントが読み込まれるたびに、Emacsは自動保存が有効なすべてのバッファに対して自動保存を行います。この値を0に設定すると、入力された文字数に基づく自動保存が無効になります。
この変数の値は、自動保存をトリガーするアイドル時間の秒数です。ユーザーがこの時間だけ操作を中断するたびに、Emacsはその機能が有効なすべてのバッファに対して自動保存を行います。(現在のバッファが大きい場合、指定されたタイムアウト値に、サイズの増加に伴って大きくなる係数が乗じられます。100万バイトのバッファの場合、その係数はほぼ4になります。)
値が 0 または nil の場合、アイドル状態による自動保存は行われず、auto-save-interval で指定された一定数の入力イベントが発生した後にのみ行われます。
この通常のフックは、自動保存が実行されようとするたびに呼び出されます。
この変数が nil
以外の場合、ファイルを参照しているバッファではデフォルトで自動保存が有効になります。そうでない場合は、有効になりません。
この関数は、自動保存が必要なすべてのバッファを自動保存します。自動保存が有効になっており、前回の自動保存以降に変更があったすべてのバッファを保存します。
バッファが自動保存されている場合、通常 do-auto-save は自動保存の実行中にエコー領域に
‘Auto-saving...’
というメッセージを表示します。ただし、no-message が nil 以外の場合は、このメッセージは表示されません。
current-only が nil
でない場合、現在のバッファのみが自動保存されます。
この関数は、delete-auto-save-files が nil でない場合に、現在のバッファの自動保存ファイルを削除します。バッファが保存されるたびに呼び出されます。
force が nil
でない限り、この関数は、前回の真の保存以降に現在の Emacs セッションによって書き込まれたファイルのみを削除します。
この変数は関数 delete-auto-save-file-if-necessary
で使用されます。これが nil 以外の場合、Emacs
は(訪問中のファイルで)実際の保存が行われた際に自動保存ファイルを削除します。これにより、ディスク容量が節約され、ディレクトリが整理されます。
この関数は、訪問済みファイル名が変更された場合に、現在のバッファの自動保存ファイル名を調整します。また、現在のEmacsセッション中に作成された既存の自動保存ファイル名も変更します。訪問済みファイル名に変更がない場合は、この関数は何も行いません。
このバッファローカル変数の値は、現在のバッファが最後に読み込まれた、保存された、あるいは自動保存された際のサイズです。これは、サイズの大幅な減少を検出し、それに応じて自動保存を無効にするために使用されます。
値が −1 の場合、サイズが大幅に減少したため、このバッファでは自動保存が一時的に無効になっていることを意味します。バッファを明示的に保存すると、この変数に正の値が格納され、自動保存が再度有効になります。また、自動保存モードをオフまたはオンにしてもこの変数が更新されるため、サイズの大幅な減少はリセットされます。
−2 の場合、このバッファはバッファサイズの変更を無視すべきであることを意味します。具体的には、バッファサイズの変更によって自動保存を一時的に停止すべきではありません。
この変数(nil
以外の場合は)は、すべての自動保存ファイルの名前を記録するためのファイルを指定します。Emacs
が自動保存を行うたびに、自動保存が有効なバッファごとに、このファイルに2行を書き込みます。1行目には訪問済みファイルの名前(バッファにない場合は空)が記載され、2行目には自動保存ファイルの名前が記載されます。
Emacsが正常に終了すると、このファイルは削除されます。Emacsがクラッシュした場合は、ファイル内を確認することで、本来であれば失われていた作業内容が含まれている可能性のあるすべての自動保存ファイルを見つけることができます。recover-sessionコマンドはこのファイルを使用してそれらを探します。
このファイルのデフォルト名にはホームディレクトリが指定されており、‘.saves-’ で始まります。また、EmacsプロセスのIDとホスト名も含まれています。
Emacsはinitファイルを読み込んだ後、このプレフィックスに基づいてauto-save-list-file-nameを初期化し(すでにnon-nilに設定していない場合)、ホスト名とプロセスIDを追加します。initファイルでこれをnilに設定している場合、Emacsはauto-save-list-file-nameを初期化しません。