Next: , Up: 自動保存-災害にたいする防御   [Contents][Index]


18.6.1 自動保存ファイル

自動保存は通常、visitしているファイルへの保存はしません。なぜなら永続化したくない変更を保存するのは、好ましくないからです。そのかわりに、自動保存はauto-saveファイルと呼ばれる別のファイルに保存し、visitしているファイルへの変更は、保存を明示的に要求したとき(C-x C-sなど)に行います。

auto-saveファイルの名前は通常、visitしているファイル名の前後に‘#’をつけて作られます。したがってfoo.cというファイルをvisitしているバッファーは、#foo.c#というファイルに自動保存されます。ファイルをvisitしていないバッファーのほとんどは、明示的に要求した場合だけ自動保存されます。それらのバッファーが自動保存されるとき、auto-saveファイル名は、バッファー名の前後に‘#’をつけて、その後ろに数字と文字を付け加えて一意な名前にします。たとえば送信メッセージを作成する*mail*バッファーは、#*mail*#704juuのような名前のファイルに、自動保存されます。Emacsの一部(関数make-auto-save-file-nameおよびauto-save-file-name-p)を違った方法で再プログラムしない限り、auto-saveファイル名はこの方法で作成されますバッファーの自動保存に使われるファイル名は、そのバッファーの自動保存をオンにしたときに計算されます。

変数auto-save-file-name-transformsは、auto-saveファイル名をある程度制御することを許します。これに一連の正規表現を指定して置換することにより、auto-saveファイル名を変更します。デフォルト値は、リモートのファイル(リモートファイルを参照してください)を、ローカルマシンの一時ディレクトリーのauto-saveファイルに変換します。

大きなバッファーから大量のテキストを削除したとき、そのバッファーにたいする自動保存は一時的にオフになります。これは、もしテキストをうっかり削除してしまった場合、それがauto-saveファイルに含まれていて、そこから探せる方が便利だからです。これが発生した後、再び自動保存を有効にするには、バッファーをC-x C-sで保存するか、C-u 1 M-x auto-save-modeを使います。

別のauto-saveファイルではなく、visitしているファイル自体に自動保存したい場合は、グローバルなマイナーモードauto-save-visited-modeを有効にします。このモードでは、自動保存は明示的な保存と等価です。このモードは上述のauto-saveと直交(orthogonal)するモードであり、両方同時に有効にできることに注意してください。しかし、いくつかのバッファーでauto-saveモードがアクティブで、かつ時代遅れのauto-save-visited-file-name変数が非nil値の場合、そのバッファーはauto-save-visited-modeの影響を受けないでしょう。

auto-save-visited-modeモードの自動保存処理の間隔は、変数auto-save-visited-intervalを使用してカスタマイズできます。auto-save-intervalauto-save-timeoutは、auto-save-visited-modeに影響を与えません。これらの変数の詳細は、自動保存の制御を参照してください。

バッファーのauto-saveファイルは、そのバッファーをvisitしているファイルに保存したとき削除されます(変数delete-auto-save-filesnilにセットすることにより、これを禁じることができます)。C-x C-wまたはset-visited-file-nameで、visitされているファイル名を変更することにより、あたらしくvisitされているファイル名にもとづいてauto-saveファイル名はリネームされます。

バッファーをkillしても、デフォルトではそのバッファーのauto-saveファイルは削除されません。しかしkill-buffer-delete-auto-save-filesが非nilなら、auto-saveをもつファイルのkillにおいて、Emacsがユーザーにauto-saveファイルを削除するかどうか問い合わせるようにできます(これはdelete-auto-save-filesnilなら抑制される)。