27.1.1 Создание файлов резервного копирования

Функция: backup-buffer

Эта функция создает резервную копию файла, открытого в текущем буфере, если это уместно. Она вызывается функцией save-buffer перед первым сохранением буфера.

Если резервная копия была создана путем переименования, возвращаемое значение — это ячейка cons вида (modes extra-alist backupname), где modes — это биты режима исходного файла, возвращенные функцией file-modes (см. Проверка доступности), extra-alist — это alist, описывающий расширенные атрибуты исходного файла, возвращенные функцией file-extended-attributes (см. Расширенные атрибуты файлов), а backupname — это имя резервной копии.

Во всех остальных случаях (т.е. если резервная копия была создана путем копирования или если резервная копия не была создана) эта функция возвращает nil.

Переменная: buffer-backed-up

Эта буферная переменная указывает, была ли резервная копия файла этого буфера создана в связи с этим буфером. Если она не равна nil, файл был записан в резервную копию. В противном случае файл должен быть резервирован при следующем сохранении (если резервное копирование включено). Это постоянная локальная переменная; kill-all-local-variables не изменяет ее.

Пользовательский вариант: make-backup-files

Эта переменная определяет, следует ли создавать файлы резервного копирования. Если она не равна nil, Emacs создает резервную копию каждого файла при его первом сохранении — при условии, что backup-inhibited равен nil (см. ниже).

Пример ниже показывает, как изменить переменную make-backup-files только в буферах Rmail, а не в других. Установка ее в nil предотвращает создание резервных копий этих файлов, что может сэкономить дисковое пространство. (Вы поместите этот код в свой файл инициализации.)

(add-hook 'rmail-mode-hook
          (lambda () (setq-local make-backup-files nil)))
Переменная: backup-enable-predicate

Значение этой переменной — это функция, которая вызывается при определенных случаях для определения, должен ли файл иметь резервные копии. Функция принимает один аргумент — абсолютное имя файла для рассмотрения. Если функция возвращает nil, резервное копирование для этого файла отключено. В противном случае другие переменные в этом разделе определяют, как и когда создавать резервные копии.

Значение по умолчанию — normal-backup-enable-predicate, которое проверяет файлы в temporary-file-directory и small-temporary-file-directory.

Переменная: backup-inhibited

Если эта переменная не равна nil, резервное копирование запрещено. Она записывает результат проверки backup-enable-predicate для открытого имени файла. Ее также можно согласованно использовать другими механизмами, которые запрещают резервное копирование на основе открытого файла. Например, VC устанавливает эту переменную в не-nil, чтобы предотвратить создание резервных копий для файлов, управляемых системой контроля версий.

Это постоянная локальная переменная, поэтому изменение основного режима не приводит к потере ее значения. Основные режимы не должны устанавливать эту переменную — они должны устанавливать make-backup-files вместо этого.

Пользовательский вариант: backup-directory-alist

Значение этой переменной — это alist шаблонов имен файлов и каталогов для резервных копий. Каждый элемент выглядит так:

(regexp . directory)

Резервные копии файлов, чьи имена соответствуют regexp, будут созданы в directory. directory может быть относительным или абсолютным. Если он абсолютный, и все соответствующие файлы резервируются в одном каталоге, то имена файлов в этом каталоге будут полными именами файла, в котором все разделители каталогов заменены на !rsquo; для предотвращения конфликтов. Это не сработает корректно, если ваша файловая система обрезает полученное имя.

Для общего случая, когда все резервные копии помещаются в один каталог, alist должен содержать один элемент, сопоставляющий ""." с соответствующим каталогом.

Если эта переменная равна nil (по умолчанию) или не совпадает с именем файла, резервная копия создается в каталоге исходного файла.

В файловых системах MS-DOS без длинных имен эта переменная всегда игнорируется.

Пользовательский вариант: make-backup-file-name-function

Значение этой переменной — это функция, используемая для создания имен файлов резервных копий. Функция make-backup-file-name вызывает ее. См. Именование файлов резервных копий.

Это может быть локально буферным для выполнения чего-то специального для конкретных файлов. Если вы измените ее, возможно, вам также потребуется изменить backup-file-name-p и file-name-sans-versions.