Автосохранение
Emacs периодически сохраняет все файлы, которые вы посещаете; это называется автосохранением. Автосохранение предотвращает потерю более чем ограниченного объема работы в случае сбоя системы. По умолчанию автосохранение происходит каждые 300 нажатий клавиш или после приблизительно 30 секунд бездействия. См. Автосохранение: Защита от катастроф в Руководстве по GNU Emacs для информации об автосохранении для пользователей. Здесь мы описываем функции, используемые для реализации автосохранения, и переменные, которые их контролируют.
- Переменная: buffer-auto-save-file-name
-
Эта локальная для буфера переменная является именем файла, используемого для автосохранения текущего буфера. Она равна
nil, если буфер не должен автосохраняться.buffer-auto-save-file-name ⇒ "/xcssun/users/rms/lewis/#backups.texi#"
- Команда: auto-save-mode arg
-
Это командный режим для режима Автосохранения, локального для буфера вспомогательного режима. При включенном режиме Автосохранения автосохранение включено в буфере. Способ вызова аналогичен другим командам вспомогательных режимов (см. Правила вспомогательных режимов).
В отличие от большинства вспомогательных режимов, нет переменной
auto-save-mode. Режим Автосохранения включен, еслиbuffer-auto-save-file-nameнеnilиbuffer-saved-size(см. ниже) отлична от нуля.
- Переменная: auto-save-file-name-transforms
-
Эта переменная перечисляет преобразования, которые необходимо применить к имени файла буфера перед созданием имени файла автосохранения.
Каждое преобразование — это список вида
(regexp replacement [uniquify]). regexp — это регулярное выражение для сопоставления с именем файла; если оно соответствует,replace-matchиспользуется для замены соответствующей части на replacement. Если необязательный элемент uniquify не равен nil, имя файла автосохранения строится путем конкатенации части пути к преобразованному имени файла с именем файла буфера, в котором все разделители путей были заменены на ‘!’ для предотвращения конфликтов. (Это не будет работать правильно, если ваша файловая система обрезает полученное имя.)Если uniquify является одним из членов
secure-hash-algorithms, Emacs строит непутевую часть имени файла автосохранения, применяя этоsecure-hashк имени файла буфера. Это предотвращает любые риски чрезмерно длинных имён файлов.Все преобразования в списке выполняются в указанном порядке. Когда одно преобразование применяется, его результат окончательный; дальнейшие преобразования не применяются.
Значение по умолчанию настроено на размещение файлов автосохранения удалённых файлов в временном каталоге (см. Уникальные имена файлов).
На файловых системах MS-DOS без длинных имён эта переменная всегда игнорируется.
- Функция: auto-save-file-name-p filename
-
Эта функция возвращает значение отличное от
nil, если filename — это строка, которая может быть именем файла автосохранения. Она предполагает обычную систему именования для файлов автосохранения: имя, начинающееся и заканчивающееся диезами (‘#’) — это возможное имя файла автосохранения. Аргумент filename не должен содержать пути.(make-auto-save-file-name) ⇒ "/xcssun/users/rms/lewis/#backups.texi#"(auto-save-file-name-p "#backups.texi#") ⇒ 0(auto-save-file-name-p "backups.texi") ⇒ nil
- Функция: make-auto-save-file-name
-
Эта функция возвращает имя файла, используемого для автосохранения текущего буфера. Это просто имя файла с диезами (‘#’) перед и после него. Эта функция не проверяет переменную
auto-save-visited-file-name(описанную ниже); вызывающие функции должны сначала проверить эту переменную.(make-auto-save-file-name) ⇒ "/xcssun/users/rms/lewis/#backups.texi#"
- Пользовательский параметр: auto-save-visited-file-name
-
Если эта переменная не
nil, Emacs автосохраняет буферы в файлы, которые они посещают. То есть автосохранение выполняется в том же файле, который вы редактируете. Обычно эта переменная равнаnil, поэтому файлы автосохранения имеют разные имена, создаваемыеmake-auto-save-file-name.При изменении значения этой переменной новое значение не вступает в силу в существующем буфере до следующего включения режима автосохранения в нём. Если режим автосохранения уже включен, автосохранения продолжают производиться в том же имени файла до тех пор, пока
auto-save-modeне будет вызвано снова.Обратите внимание, что установка этой переменной в значение отличное от
nilне меняет тот факт, что автосохранение отличается от сохранения буфера; например, хуки, описанные в Сохранение буферов, не запускаются при автосохранении буфера.
- Функция: recent-auto-save-p
Эта функция возвращает
t, если текущий буфер был автосохранён с момента последнего чтения или сохранения.
- Функция: set-buffer-auto-saved
Эта функция помечает текущий буфер как автосохранённый. Буфер не будет больше автосохраняться до следующего изменения текста буфера. Функция возвращает
nil.
- Пользовательский параметр: auto-save-interval
Значение этой переменной определяет частоту автоматического сохранения в терминах количества событий ввода. Каждый раз, когда будет прочитано столько дополнительных событий ввода, Emacs выполняет автоматическое сохранение для всех буферов, в которых это включено. Установка значения 0 отключает автоматическое сохранение, основанное на количестве набранных символов.
- Пользовательский параметр: auto-save-timeout
-
Значение этой переменной — количество секунд бездействия, после которого выполняется автоматическое сохранение. Каждый раз, когда пользователь приостанавливается на это время, Emacs выполняет автоматическое сохранение для всех буферов, в которых это включено. (Если текущий буфер большой, указанный таймаут умножается на коэффициент, который увеличивается по мере увеличения размера; для буфера в один миллион байт коэффициент почти равен 4.)
Если значение равно нулю или
nil, автоматическое сохранение по бездействию не выполняется, только после определенного количества событий ввода, как указано вauto-save-interval.
- Переменная: auto-save-hook
Этот обычный хук выполняется всякий раз, когда собирается произойти автоматическое сохранение.
- Пользовательский параметр: auto-save-default
Если эта переменная имеет значение, отличное от
nil, буферы, посещающие файлы, имеют автоматическое сохранение по умолчанию. В противном случае — нет.
- Команда: do-auto-save &optional no-message current-only
-
Эта функция выполняет автоматическое сохранение всех буферов, которые нужно сохранить. Она сохраняет все буферы, для которых включено автоматическое сохранение и которые были изменены с момента предыдущего автоматического сохранения.
Если какие-либо буферы были сохранены автоматически,
do-auto-saveобычно отображает сообщение «Сохранение...» в области эха во время выполнения автоматического сохранения. Однако, если no-message имеет значение, отличное отnil, сообщение подавляется.Если current-only имеет значение, отличное от
nil, сохраняется только текущий буфер.
- Функция: delete-auto-save-file-if-necessary &optional force
-
Эта функция удаляет файл автоматического сохранения текущего буфера, если
delete-auto-save-filesимеет значение, отличное отnil. Она вызывается каждый раз при сохранении буфера.Если force имеет значение, отличное от
nil, эта функция удаляет файл только в том случае, если он был записан текущей сессией Emacs с момента последнего истинного сохранения.
- Пользовательский параметр: delete-auto-save-files
Эта переменная используется функцией
delete-auto-save-file-if-necessary. Если она имеет значение, отличное отnil, Emacs удаляет файлы автоматического сохранения при выполнении истинного сохранения (в посещаемом файле). Это экономит место на диске и упорядочивает вашу директорию.
- Функция: rename-auto-save-file
Эта функция изменяет имя файла автоматического сохранения текущего буфера, если имя посещаемого файла изменилось. Также переименовывает существующий файл автоматического сохранения, если он был создан в текущей сессии Emacs. Если имя посещаемого файла не изменилось, эта функция ничего не делает.
- Переменная: buffer-saved-size
-
Значение этой буферной локальной переменной — длина текущего буфера при последнем чтении, сохранении или автоматическом сохранении. Это используется для обнаружения существенного уменьшения размера и отключения автоматического сохранения в ответ.
Если это -1, это означает, что автоматическое сохранение временно выключено в этом буфере из-за существенного уменьшения размера. Явное сохранение буфера сохраняет положительное значение в этой переменной, тем самым снова включая автоматическое сохранение. Отключение или включение режима автоматического сохранения также обновляет эту переменную, чтобы забыть о существенном уменьшении размера.
Если это -2, это означает, что этот буфер должен игнорировать изменения размера буфера; в частности, он не должен временно отключать автоматическое сохранение из-за изменений размера буфера.
- Переменная: auto-save-list-file-name
-
Эта переменная (если не
nil) указывает файл для записи имен всех файлов автоматического сохранения. Каждый раз, когда Emacs выполняет автоматическое сохранение, он записывает две строки в этот файл для каждого буфера, в котором включено автоматическое сохранение. Первая строка содержит имя посещаемого файла (пустая, если у буфера нет), а вторая — имя файла автоматического сохранения.При нормальном завершении работы Emacs удаляет этот файл; если Emacs зависает, вы можете посмотреть в этот файл, чтобы найти все файлы автоматического сохранения, которые могли содержать работу, которая иначе была бы потеряна. Команда
recover-sessionиспользует этот файл для их поиска.Имя по умолчанию для этого файла задаёт ваш домашний каталог и начинается с «.saves-». Также включает идентификатор процесса Emacs и имя хоста.
- Пользовательский параметр: auto-save-list-file-prefix
После того, как Emacs прочитал ваш файл инициализации, он инициализирует
auto-save-list-file-name(если вы ещё не установили его в отличное отnil) на основе этого префикса, добавляя имя хоста и идентификатор процесса. Если вы установите это значение вnilв файле инициализации, Emacs не будет инициализироватьauto-save-list-file-name.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Auto_002dSaving.html