Изменение буфера
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