27.1.4 Именование резервных файлов

Функции в этом разделе документированы в основном потому, что вы можете настроить правила именования резервных файлов, переопределив их. Если вы измените одно, вам, вероятно, придется изменить и остальные.

Функция: backup-file-name-p filename

Эта функция возвращает не-nil значение, если filename является возможным именем резервного файла. Она просто проверяет имя, а не то, существует ли файл с именем filename.

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

Стандартное определение этой функции выглядит следующим образом:

(defun backup-file-name-p (file)
  "Возвращает не-nil, если FILE является именем резервной копии \
(числовым или нет)..."
  (string-match "~'" file))

Таким образом, функция возвращает не-nil значение, если имя файла заканчивается на «~». (Мы используем обратный слеш, чтобы разделить первую строку строки документации на две строки в тексте, но получить только одну строку в самой строке.)

Это простое выражение помещено в отдельную функцию, чтобы его было легко переопределить для настройки.

Функция: make-backup-file-name filename

Эта функция возвращает строку, которая является именем, используемым для непронумерованного резервного файла для файла filename. В Unix это просто filename с добавленным тильдой.

Стандартное определение этой функции, в большинстве операционных систем, выглядит следующим образом:

(defun make-backup-file-name (file)
  "Создает имя резервной копии без номера для 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~"

Некоторые части Emacs, включая некоторые команды Dired, предполагают, что имена резервных файлов заканчиваются на «~». Если вы не соблюдаете это соглашение, это не вызовет серьезных проблем, но эти команды могут дать нежелательные результаты.

Функция: find-backup-file-name filename

Эта функция вычисляет имя файла для новой резервной копии для filename. Она также может предложить некоторые существующие резервные файлы для удаления. find-backup-file-name возвращает список, чей CAR — это имя новой резервной копии, а чей CDR — это список резервных файлов, удаление которых предлагается. Значение также может быть nil, что означает отказ от создания резервной копии.

Две переменные, kept-old-versions и kept-new-versions, определяют, какие версии резервных копий следует сохранить. Эта функция сохраняет эти версии, исключая их из CDR возвращаемого значения. См. Создание и удаление резервных файлов с нумерацией.

В этом примере значение указывает, что ~rms/foo.~5~ — имя, которое следует использовать для новой резервной копии, а ~rms/foo.~3~ — это избыточная версия, которую вызывающий должен рассмотреть для удаления.

(find-backup-file-name "~rms/foo")
     ⇒ ("~rms/foo.~5~" "~rms/foo.~3~")
Функция: file-backup-file-names filename

Эта функция возвращает список всех имен резервных файлов для filename или nil, если их нет. Файлы отсортированы по времени модификации в порядке убывания, так что самые недавние файлы идут первыми.

Функция: file-newest-backup filename

Эта функция возвращает первый элемент списка, возвращаемого file-backup-file-names.

Некоторые команды сравнения файлов используют эту функцию, чтобы они могли автоматически сравнивать файл с его самой последней резервной копией.