Возврат к предыдущей версии
Если вы внесли обширные изменения в файл, а затем передумали, вы можете избавиться от них, прочитав предыдущую версию файла с помощью команды revert-buffer. См. Возврат буфера в Руководстве пользователя GNU Emacs.
- Команда: revert-buffer &optional ignore-auto noconfirm preserve-modes
-
Эта команда заменяет текст буфера текстом посещаемого файла на диске. Это действие отменяет все изменения, внесенные с момента посещения или сохранения файла.
По умолчанию, если последний файл автоматического сохранения более новый, чем посещаемый файл, и аргумент ignore-auto имеет значение
nil,revert-bufferспрашивает пользователя, следует ли использовать этот файл автоматического сохранения вместо него. При интерактивном вызове этой команды ignore-auto имеет значениеt, если нет числового префиксного аргумента; таким образом, интерактивный режим по умолчанию не проверяет файл автоматического сохранения.Обычно
revert-bufferзапрашивает подтверждение перед изменением буфера; но если аргумент noconfirm имеет не-nilзначение,revert-bufferне запрашивает подтверждения.Обычно эта команда переинициализирует основные и дополнительные режимы буфера, используя
normal-mode. Но если preserve-modes имеет не-nilзначение, режимы остаются неизменными.Возврат пытается сохранить позиции маркеров в буфере, используя функцию замены
insert-file-contents. Если содержимое буфера и содержимое файла идентичны до операции возврата, возврат сохраняет все маркеры. Если они не идентичны, возврат изменяет буфер; в этом случае он сохраняет маркеры в неизмененном тексте (если таковой есть) в начале и конце буфера. Сохранение дополнительных маркеров было бы проблематично.При возврате из не-файловых источников маркеры обычно не сохраняются, но это зависит от реализации конкретной
revert-buffer-function.
- Переменная: revert-buffer-in-progress-p
revert-bufferприсваивает этой переменной не-nilзначение во время работы.
Вы можете настроить, как revert-buffer выполняет свою работу, установив переменные, описанные в остальной части этого раздела.
- Пользовательский параметр: revert-without-query
Эта переменная содержит список файлов, которые должны быть возвращены без запроса. Значение представляет собой список регулярных выражений. Если имя посещаемого файла соответствует одному из этих регулярных выражений, и файл был изменён на диске, но буфер не был изменён, то
revert-bufferвернёт файл без запроса подтверждения у пользователя.
Некоторые основные режимы настраивают revert-buffer путём создания буферно-локальных связей для этих переменных:
- Переменная: revert-buffer-function
-
Значение этой переменной — функция, используемая для возврата этого буфера. Это должна быть функция с двумя необязательными аргументами для выполнения работы по возврату. Два необязательных аргумента ignore-auto и noconfirm — это аргументы, которые
revert-bufferполучил.Режимы, такие как режим Dired, в котором редактируемый текст не состоит из содержимого файла, но может быть сгенерирован каким-либо другим способом, могут присвоить этой переменной буферно-локальное значение, представляющее собой специальную функцию для регенерации содержимого.
- Переменная: revert-buffer-insert-file-contents-function
-
Значение этой переменной определяет функцию, используемую для вставки обновлённого содержимого при возврате этого буфера. Функция получает два аргумента: во-первых, имя файла для использования; во-вторых,
tесли пользователь запросил чтение файла автосохранения.Причина, по которой режим изменяет эту переменную вместо
revert-buffer-function, заключается в предотвращении дублирования или замены остальной части того, чтоrevert-bufferделает: запроса подтверждения, очистки списка отмены, определения соответствующего основного режима и выполнения перечисленных ниже хуков.
- Переменная: before-revert-hook
Этот обычный хук выполняется стандартным
revert-buffer-functionперед вставкой изменённого содержимого. Пользовательскийrevert-buffer-functionможет или не может выполнить этот хук.
- Переменная: after-revert-hook
Этот обычный хук выполняется стандартным
revert-buffer-functionпосле вставки изменённого содержимого. Пользовательскийrevert-buffer-functionможет или не может выполнить этот хук.
Emacs может автоматически возвращать буферы. Он по умолчанию делает это для буферов, посещающих файлы. Ниже описано, как добавить поддержку автоматического возврата для новых типов буферов.
В первую очередь, такие буферы должны иметь подходящую revert-buffer-function и buffer-stale-function .
- Переменная: buffer-stale-function
-
Значение этой переменной указывает функцию, которую необходимо вызвать, чтобы проверить, нужно ли вернуть буфер. Значение по умолчанию обрабатывает только буферы, посещающие файлы, проверяя время их изменения. Для буферов, не посещающих файлы, требуется пользовательская функция с одним необязательным аргументом noconfirm. Функция должна возвращать не-
nil, если буфер должен быть возвращён. Буфер является текущим, когда эта функция вызывается.Хотя эта функция предназначена в основном для использования в автоматическом возврате, она может использоваться и для других целей. Например, если автоматический возврат отключён, она может использоваться для предупреждения пользователя о необходимости возврата буфера. Идея аргумента noconfirm заключается в том, что он должен быть
t, если буфер будет возвращён без запроса подтверждения, иnil, если функция просто будет использована для предупреждения пользователя о том, что буфер устарел. В частности, для использования в автоматическом возврате noconfirm имеет значениеt. Если функция будет использоваться только для автоматического возврата, вы можете проигнорировать аргумент noconfirm.Если вы хотите просто автоматически возвращать каждый
auto-revert-intervalсекунды (как в меню буфера), используйте:(setq-local buffer-stale-function (lambda (&optional noconfirm) 'fast))в функции режима буфера.
Специальное возвращаемое значение «fast» сообщает вызывающей стороне, что необходимость возврата не проверялась, но возврат буфера быстрый. Оно также сообщает Автоматическому возврату не выводить сообщения о возврате, даже если
auto-revert-verboseимеет не-nilзначение. Это важно, так как получение сообщений о возврате каждыеauto-revert-intervalсекунды может быть очень раздражающим. Информация, предоставляемая этим возвращаемым значением, может также оказаться полезной, если функция используется для целей, отличных от автоматического возврата.
После того как буфер получил подходящую revert-buffer-function и buffer-stale-function, обычно остаются некоторые проблемы.
Буфер будет автоматически возвращаться только если он отмечен как неизменённый. Следовательно, вам необходимо убедиться, что различные функции отмечают буфер как изменённый только в том случае, если буфер содержит информацию, которая может быть потеряна при возврате, или если есть основания полагать, что пользователь может быть неудобен при автоматическом возврате, поскольку он активно работает с буфером. Пользователь всегда может переопределить это, вручную изменяя статус изменения буфера. Для поддержки этого вызов revert-buffer-function для буфера, отмеченного как неизменённый, всегда должен сохранять буфер неизменённым.
Важно гарантировать, что точка не будет непрерывно перемещаться в результате автоматического возврата. Конечно, перемещение точки может быть неизбежным, если буфер радикально изменится.
Вы должны убедиться, что revert-buffer-function не выводит сообщения, которые излишне дублируют собственные сообщения Автоматического возврата, отображаемые, если auto-revert-verbose имеет значение t, и фактически переопределяет значение nil для auto-revert-verbose. Поэтому адаптация режима для автоматического возврата часто предполагает устранение таких сообщений. Это особенно важно для буферов, которые автоматически возвращаются каждые auto-revert-interval секунды.
Если новый автоматический возврат является частью Emacs, вы должны упомянуть об этом в строке документации global-auto-revert-non-file-buffers.
Аналогично, вы должны задокументировать добавления в руководстве пользователя Emacs.
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/Reverting.html