Next: Reverting, Previous: Backup Files, Up: Backups and Auto-Saving
Emacsは編集中のすべてのファイルを定期的に保存します。 これを自動保存(auto-savign)と呼びます。 自動保存により、システムがクラッシュしても、 一定量以上の作業を失わないようにします。 デフォルトでは、300打鍵ごと、あるいは、30秒間なにもしないと自動保存します。 ユーザー向けの自動保存に関する情報については、 See 自動保存、不慮の事故に対する備え。 ここでは、自動保存を実装するための関数と それらを制御する変数について述べます。
このバッファローカルな変数は、カレントバッファの自動保存に 用いるファイル名である。 当該バッファを自動保存しない場合には
nil
である。buffer-auto-save-file-name => "/xcssun/users/rms/lewis/#files.texi#"
引数なしに対話的に呼ばれると、 このコマンドは自動保存機能をトグルする。 つまり、カレントバッファの自動保存がオンであるとオフにし、 オフならばオンにする。 引数argを指定すると、 argの値が
t
、空でないリスト、正整数のいずれかであれば、 このコマンドは自動保存をオンにする。 さもなければ自動保存をオフにする。
この関数は、filenameが自動保存ファイルの名前でありえれば、
nil
以外を返す。 この関数は自動保存ファイルの名前の慣習に基づいて動作する。 名前がハッシュマーク(‘#’)で始まりかつ終っていれば、 自動保存ファイルの名前である可能性がある。 引数filenameにはディレクトリ部分を含まないこと。(make-auto-save-file-name) "/xcssun/users/rms/lewis/#files.texi#" (auto-save-file-name-p "#files.texi#") 0 (auto-save-file-name-p "files.texi") nilこの関数の標準定義はつぎのとおりである。
(defun auto-save-file-name-p (filename) "Return non-nil if FILENAME can be yielded by..." (string-match "^#.*#$" filename))この関数は、自動保存ファイルの名前の慣習を変更したい場合に 当該関数をカスタマイズできるようにするためである。 当該関数を再定義した場合には、関数
make-auto-save-file-name
も それに従って必ず再定義すること。
この関数は、カレントバッファの自動保存に使うファイル名を返す。 その名前は、単にファイル名の前後にハッシュマーク(‘#’)を 付加するだけである。 この関数は変数
auto-save-visited-file-name
(下記参照)を 調べないため、読者はこの関数を呼び出すまえにその変数を検査しておくこと。(make-auto-save-file-name) "/xcssun/users/rms/lewis/#backup.texi#"この関数の標準定義はつぎのとおりである。
(defun make-auto-save-file-name () "Return file name to use for auto-saves \ of current buffer..." (if buffer-file-name (concat (file-name-directory buffer-file-name) "#" (file-name-nondirectory buffer-file-name) "#") (expand-file-name (concat "#%" (buffer-name) "#"))))自動保存ファイルの名前の慣習をカスタマイズするために 関数を再定義できるように1つの関数にしてある。 関数
auto-save-file-name-p
もそれに従って必ず変更すること。
この変数が
nil
以外であると、 Emacsは訪問しているファイルにバッファを自動保存する。 つまり、読者が編集しているファイルと同じファイルに自動保存を行う。 通常、この変数はnil
であり、自動保存ファイルにはmake-auto-save-file-name
で作成した別の名前がある。この変数の値を変更しても、 バッファの自動保存をつぎにオンにするまで、この値は効果を発揮しない。 自動保存がすでにオンであると、
auto-save-mode
を再度呼び出すまでは、 同じファイルの名前に自動保存し続ける。
この関数は、カレントバッファに自動保存済みであると印を付ける。 バッファのテキストが再度変更されない限り、バッファは自動保存されない。 この関数は
nil
を返す。
この変数の値は、つぎの自動保存までに Emacsがキーボードから読み取る文字の個数である。 これだけの文字を読み取ると、自動保存をオンにしてあるすべてのバッファを 自動保存する。
この変数の値は、自動保存を引き起こすまでのなにもしていない期間の秒数である。 この時間だけユーザーがなにもしないと、 Emacsは自動保存する必要があるバッファを自動保存する。 (実際には、カレントバッファの大きさに依存した係数を指定時間に掛ける。)
この関数は、自動保存する必要があるすべてのバッファを自動保存する。 自動保存がオンになっていて、かつ、以前の自動保存からあとで 変更されているすべてのバッファを自動保存する。
通常、バッファを自動保存すると、 自動保存を実行中にはエコー領域にメッセージ‘Auto-saving...’が表示される。 しかし、no-messageが
nil
以外であると、 メッセージを表示しない。current-onlyが
nil
以外であると、 カレントバッファのみを自動保存する。
この関数は、
delete-auto-save-files
がnil
以外であると、 カレントバッファの自動保存ファイルを削除する。 バッファを保存するたびに呼び出される。
この変数は、関数
delete-auto-save-file-if-necessary
が使う。nil
以外であると、Emacsは(訪問しているファイルに)実際に 保存すると自動保存ファイルを削除する。 これによりディスクスペースを節約し、読者のディレクトリを整頓できる。
この関数は、訪問しているファイルの名前が変更されていると、 カレントバッファの自動保存ファイルの名前を修正する。 さらに、既存の自動保存ファイルも改名する。 訪問しているファイルの名前が変更されていなければ、 この関数はなにもしない。
このバッファローカルな変数の値は、 最後に読み込んだり保存したり自動保存したときの カレントバッファの長さである。 サイズの大幅な変更を検知すると自動保存をオフにするために使われる。
この変数が−1であると、 大幅に削除したために一時的に自動保存をオフにしたことを意味する。 明示的にバッファを保存すると、この変数に正の値が保存され、 自動保存が再度オンになる。 自動保存をオフにしたりオンにしても、この変数が変更される。
この変数は(
nil
以外であると)、 すべての自動保存ファイルの名前を記録するファイルを指定する。 Emacsが自動保存を行うたびに、 自動保存がオンである各バッファに関する2行をこのファイルに書き出す。 1行目は訪問しているファイルの名前を与え(訪問していなければ空)、 2行目は自動保存ファイルの名前を与える。Emacsが正常に終ると、このファイルは削除される。 Emacsがクラッシュしたら、失われてしまう作業内容を含んでいるかもしれない 自動保存ファイルを探すために読者はこのファイルを調べられる。 コマンド
recover-session
はこれらのファイルを使う。このファイルのデフォルト名は、 読者のホームディレクトリにあり‘.saves-’で始まる。 さらに、Emacsのプロセスidとホスト名も含む。