Spec-Zone.ru › Elisp

Модификация буфера

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

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

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

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

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

Функция: 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, но не заставляет повторно отображать строки состояния.

Команда: 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-2022 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