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