次: , 前: Backup Files, 上: Backups and Auto-Saving


25.2 自動保存

Emacsは編集中のすべてのファイルを定期的に保存します。 これを自動保存(auto-savign)と呼びます。 自動保存により、システムがクラッシュしても、 一定量以上の作業を失わないようにします。 デフォルトでは、300打鍵ごと、あるいは、30秒間なにもしないと自動保存します。 ユーザー向けの自動保存に関する情報については、 See 自動保存、不慮の事故に対する備え。 ここでは、自動保存を実装するための関数と それらを制御する変数について述べます。

— 変数: buffer-auto-save-file-name

このバッファローカルな変数は、カレントバッファの自動保存に 用いるファイル名である。 当該バッファを自動保存しない場合にはnilである。

          buffer-auto-save-file-name
          => "/xcssun/users/rms/lewis/#files.texi#"
     
— コマンド: auto-save-mode arg

引数なしに対話的に呼ばれると、 このコマンドは自動保存機能をトグルする。 つまり、カレントバッファの自動保存がオンであるとオフにし、 オフならばオンにする。 引数argを指定すると、 argの値がt、空でないリスト、正整数のいずれかであれば、 このコマンドは自動保存をオンにする。 さもなければ自動保存をオフにする。

— 機能: auto-save-file-name-p filename

この関数は、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も それに従って必ず再定義すること。

— 機能: 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もそれに従って必ず変更すること。

— 変数: auto-save-visited-file-name

この変数がnil以外であると、 Emacsは訪問しているファイルにバッファを自動保存する。 つまり、読者が編集しているファイルと同じファイルに自動保存を行う。 通常、この変数はnilであり、自動保存ファイルには make-auto-save-file-nameで作成した別の名前がある。

この変数の値を変更しても、 バッファの自動保存をつぎにオンにするまで、この値は効果を発揮しない。 自動保存がすでにオンであると、 auto-save-modeを再度呼び出すまでは、 同じファイルの名前に自動保存し続ける。

— 機能: recent-auto-save-p

カレントバッファに最後に読み込んだり保存してから以降に自動保存していると、 この関数はtを返す。

— 機能: set-buffer-auto-saved

この関数は、カレントバッファに自動保存済みであると印を付ける。 バッファのテキストが再度変更されない限り、バッファは自動保存されない。 この関数はnilを返す。

— ユーザオプション: auto-save-interval

この変数の値は、つぎの自動保存までに Emacsがキーボードから読み取る文字の個数である。 これだけの文字を読み取ると、自動保存をオンにしてあるすべてのバッファを 自動保存する。

— ユーザオプション: auto-save-timeout

この変数の値は、自動保存を引き起こすまでのなにもしていない期間の秒数である。 この時間だけユーザーがなにもしないと、 Emacsは自動保存する必要があるバッファを自動保存する。 (実際には、カレントバッファの大きさに依存した係数を指定時間に掛ける。)

— 変数: auto-save-hook

このノーマルフックは、自動保存を行う直前に毎回実行される。

— ユーザオプション: auto-save-default

この変数がnil以外であると、 ファイルを訪問しているバッファはデフォルトで自動保存をオンにする。 さもなければ、そうしない。

— コマンド: do-auto-save &optional no-message current-only

この関数は、自動保存する必要があるすべてのバッファを自動保存する。 自動保存がオンになっていて、かつ、以前の自動保存からあとで 変更されているすべてのバッファを自動保存する。

通常、バッファを自動保存すると、 自動保存を実行中にはエコー領域にメッセージ`Auto-saving...'が表示される。 しかし、no-messagenil以外であると、 メッセージを表示しない。

current-onlynil以外であると、 カレントバッファのみを自動保存する。

— 機能: delete-auto-save-file-if-necessary

この関数は、delete-auto-save-filesnil以外であると、 カレントバッファの自動保存ファイルを削除する。 バッファを保存するたびに呼び出される。

— 変数: delete-auto-save-files

この変数は、関数delete-auto-save-file-if-necessaryが使う。 nil以外であると、Emacsは(訪問しているファイルに)実際に 保存すると自動保存ファイルを削除する。 これによりディスクスペースを節約し、読者のディレクトリを整頓できる。

— 機能: rename-auto-save-file

この関数は、訪問しているファイルの名前が変更されていると、 カレントバッファの自動保存ファイルの名前を修正する。 さらに、既存の自動保存ファイルも改名する。 訪問しているファイルの名前が変更されていなければ、 この関数はなにもしない。

— 変数: buffer-saved-size

このバッファローカルな変数の値は、 最後に読み込んだり保存したり自動保存したときの カレントバッファの長さである。 サイズの大幅な変更を検知すると自動保存をオフにするために使われる。

この変数が−1であると、 大幅に削除したために一時的に自動保存をオフにしたことを意味する。 明示的にバッファを保存すると、この変数に正の値が保存され、 自動保存が再度オンになる。 自動保存をオフにしたりオンにしても、この変数が変更される。

— 変数: auto-save-list-file-name

この変数は(nil以外であると)、 すべての自動保存ファイルの名前を記録するファイルを指定する。 Emacsが自動保存を行うたびに、 自動保存がオンである各バッファに関する2行をこのファイルに書き出す。 1行目は訪問しているファイルの名前を与え(訪問していなければ空)、 2行目は自動保存ファイルの名前を与える。

Emacsが正常に終ると、このファイルは削除される。 Emacsがクラッシュしたら、失われてしまう作業内容を含んでいるかもしれない 自動保存ファイルを探すために読者はこのファイルを調べられる。 コマンドrecover-sessionはこれらのファイルを使う。

このファイルのデフォルト名は、 読者のホームディレクトリにあり`.saves-'で始まる。 さらに、Emacsのプロセスidとホスト名も含む。