Previous: Numbered Backups, Up: Backup Files


25.1.4 バックアップファイルの命名方法

本節の関数は、それらを再定義することでバックアップファイルの命名方法を カスタマイズできるため、ここで述べることにします。 どれか1つを変更すると、残りのものも変更する必要があるでしょう。

— Function: backup-file-name-p filename

この関数は、filenameがバックアップファイルの名前である 可能性があるとnil以外の値を返す。 filenameという名前のファイルが存在する必要はなく、 この関数は単に名前だけを検査する。

          (backup-file-name-p "foo")
               ⇒ nil
          (backup-file-name-p "foo~")
               ⇒ 3

この関数の標準定義はつぎのとおりである。

          (defun backup-file-name-p (file)
            "Return non-nil if FILE is a backup file \
          name (numeric or not)..."
            (string-match "~$" file))

したがって、ファイル名が‘~’で終っていると、 この関数はnil以外の値を返す。 (説明文字列を2行に分けるためにバックスラッシュを使っているが、 文字列としては1行になる。)

カスタマイズのために再定義しやすいように、 この単純な式を独立した関数にしてある。

— Function: make-backup-file-name filename

この関数は、ファイルfilenameに対する 番号なしバックアップファイルに使う名前を表す文字列を返す。 UNIXでは、単にfilenameの末尾にティルダを付加したものである。

ほとんどのオペレーティングシステムでは、 この関数の標準定義はつぎのとおりである。

          (defun make-backup-file-name (file)
            "Create the non-numeric backup file name for FILE..."
            (concat file "~"))

この関数を再定義すれば、バックアップファイルの命名方法を変更できる。 つぎの例では、ティルダに加えて先頭に‘.’を付けるように make-backup-file-nameを再定義する。

          (defun make-backup-file-name (filename)
            (expand-file-name
              (concat "." (file-name-nondirectory filename) "~")
              (file-name-directory filename)))
          
          (make-backup-file-name "backups.texi")
               ⇒ ".backups.texi~"

diredコマンドを含めてEmacsには、 バックアップファイルは‘~’で終ると仮定しているものがある。 この慣習に従わない場合、重大な問題には至らないであろうが、 それらのコマンドがあまり望ましくない結果をもたらすかもしれない。

— Function: find-backup-file-name filename

この関数は、filenameに対する新たなバックアップファイルの ファイル名を計算する。 さらに、削除すべき既存のバックアップファイルも計算する。 find-backup-file-nameは、 carに新たなバックアップファイルの名前、 cdrに削除すべきバックアップファイルのリストを持つリストを返す。

2つの変数、kept-old-versionskept-new-versionsは、 どのバックアップを保存すべきかを決定する。 この関数は、値のcdrではそれらのバックアップファイルは 除外してある。 see Numbered Backups

つぎの例の値では、~rms/foo.~5~が 新たなバックアップファイルの名前であり、 ~rms/foo.~3~が『範囲外』のものであり、 呼び出し側で削除するかどうか考慮すべきである。

          (find-backup-file-name "~rms/foo")
               ⇒ ("~rms/foo.~5~" "~rms/foo.~3~")
— Function: file-newest-backup filename

この関数は、filenameの最新のバックアップファイルの名前を返す。 当該ファイルにバックアップファイルがなければnilを返す。

ファイルを比較するコマンドのなかには、 最新のバックアップファイルと自動的に比較できるように この関数を使うものがある。