Spec-Zone.ru › Elisp

Изменение буфера

Emacs хранит для каждого буфера флаг, называемый флагом модификации, который показывает, изменяли ли вы текст буфера. Этот флаг устанавливается в t при любом изменении содержимого буфера и сбрасывается в nil при сохранении буфера. Таким образом, флаг показывает, есть ли несохранённые изменения. Значение флага обычно отображается в строке режима (см. Переменные, используемые в строке режима) и определяет поведение при сохранении (см. Сохранение буферов) и автосохранении (см. Автосохранение).

Некоторые программы на Lisp устанавливают флаг явно. Например, функция set-visited-file-name устанавливает флаг в t, поскольку текст не совпадает с содержимым вновь открытого файла, даже если он не отличается от содержимого ранее открытого файла.

Функции, изменяющие содержимое буферов, описаны в разделе Текст.

Функция: buffer-modified-p &optional buffer

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

Функция: set-buffer-modified-p flag

Эта функция помечает текущий буфер как изменённый, если flag не равен nil, или как неизменённый, если флаг равен nil.

Ещё один эффект вызова этой функции — принудительное обновление строки режима текущего буфера. Фактически функция force-mode-line-update работает именно так:

(set-buffer-modified-p (buffer-modified-p))
Функция: restore-buffer-modified-p flag

Как set-buffer-modified-p, но без принудительного обновления строк режима. Эта функция также позволяет присвоить flag значение символа autosaved, которое помечает буфер как изменённый и автоматически сохранённый после последнего изменения.

Команда: not-modified &optional arg

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

Не используйте эту функцию в программах, поскольку она выводит сообщение в область эха; вместо неё используйте set-buffer-modified-p (см. выше).

Функция: buffer-modified-tick &optional buffer

Эта функция возвращает счётчик изменений buffer. Это счётчик, увеличивающийся при каждом изменении буфера. Если buffer равен nil (или не указан), используется текущий буфер.

Функция: buffer-chars-modified-tick &optional buffer

Эта функция возвращает счётчик изменений символов в buffer. Изменения текстовых свойств не меняют этот счётчик; однако при каждой вставке или удалении текста из буфера счётчик сбрасывается до значения, которое возвращает buffer-modified-tick. Сравнив значения, возвращённые двумя вызовами buffer-chars-modified-tick, можно определить, происходило ли между вызовами изменение символов в этом буфере. Если buffer равен nil (или не указан), используется текущий буфер.

Иногда требуется изменить буфер так, чтобы его текст фактически не менялся, например, изменить только его текстовые свойства. Если программе нужно изменить буфер, не запуская хуки и другие механизмы, реагирующие на изменения буфера, используйте макрос with-silent-modifications.

Макрос: with-silent-modifications body…

Выполняет body, делая вид, что буфер не изменяется. Это включает проверку блокировки файла буфера (см. Блокировки файловХуки изменений) и т. д. Обратите внимание: если body фактически изменяет текст буфера (а не его текстовые свойства), данные отмены изменений могут быть повреждены.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Buffer-Modification.html

Spec-Zone.ru

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