本セクションの関数について記載しているのは、主にバックアップファイルの命名規則を再定義することでカスタマイズできるためです。1つ変更すれば、おそらく残りの関数も変更する必要があります。
この関数は、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以外の値を返します。(ドキュメント文字列の1行目をテキスト上では2行に分割するためにバックスラッシュを使用していますが、文字列自体では1行として扱っています。)
このシンプルな式は、カスタマイズのために再定義しやすいよう、別の関数に配置されています。
この関数は、ファイル 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の一部の機能では、バックアップファイル名が‘~’で終わることを前提としています。この慣習に従わない場合、深刻な問題が生じることはありませんが、これらのコマンドの結果が期待通りにならない可能性があります。
この関数は、filename
用の新しいバックアップファイルの名前を算出します。また、削除対象として既存の特定のバックアップファイルを提案する場合もあります。find-backup-file-name は、CAR
が新しいバックアップファイルの名前であり、CDR
が削除が提案されているバックアップファイルのリストであるリストを返します。また、値は nil
となる場合もあり、これはバックアップを作成しないことを意味します。
kept-old-versions と kept-new-versions
の2つの変数によって、どのバックアップバージョンを保持するかが決定されます。この関数は、それらのバージョンを値の CDR から除外することで保持します。番号付きバックアップファイルの作成と削除 を参照してください。
この例では、~rms/foo.~5~ が新しいバックアップファイルに使用する名前であり、~rms/foo.~3~ は呼び出し側が今すぐ削除を検討すべき不要なバージョンであることが示されています。
(find-backup-file-name "~rms/foo")
⇒ ("~rms/foo.~5~" "~rms/foo.~3~")
この関数は、filename のすべてのバックアップファイル名のリストを返します。ファイルがない場合は
nil を返します。ファイルは更新日時の降順でソートされ、最新のファイルが先頭に表示されます。
この関数は、file-backup-file-names が返すリストの最初の要素を返します。
一部のファイル比較コマンドでは、ファイルと最新のバックアップを自動的に比較できるよう、この関数を利用しています。