Spec-Zone.ru › Elisp

Возврат к предыдущей версии

Если вы внесли обширные изменения в файл, а затем передумали, вы можете избавиться от них, прочитав предыдущую версию файла с помощью команды 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API