Emacs хранит флаг под названием modified flag для каждого буфера, чтобы
зафиксировать, изменяли ли вы текст буфера. Этот флаг устанавливается в t
каждый раз, когда вы изменяете содержимое буфера, и сбрасывается в nil,
когда вы сохраняете его. Таким образом, флаг показывает, есть ли несохраненные
изменения. Значение флага обычно отображается в строке состояния (см.
Переменные, используемые в строке состояния) и
контролирует сохранение (см. Сохранение буферов) и
автосохранение (см. Автосохранение).
Некоторые программы на Lisp явно устанавливают этот флаг. Например, функция
set-visited-file-name устанавливает флаг в t,
потому что текст не соответствует недавно посещенному файлу, даже если он не
изменился по сравнению с ранее посещенным файлом.
Функции, изменяющие содержимое буферов, описаны в разделе Текст.
Эта функция возвращает не-nil, если buffer
был изменен с момента последнего чтения из файла или сохранения, или
nil в противном случае. Если buffer был
автоматически сохранен с момента последнего изменения, эта функция возвращает
символ autosaved. Если buffer равен
nil или опущен, по умолчанию используется текущий буфер.
Эта функция помечает текущий буфер как измененный, если flag
не равен nil, или как не измененный, если флаг равен nil.
Другим эффектом вызова этой функции является принудительный повторный отображение
строки состояния для текущего буфера. Фактически, функция force-mode-line-update
работает именно так:
(set-buffer-modified-p (buffer-modified-p))
Подобно set-buffer-modified-p, но не принуждает повторное
отображение строк состояния. Эта функция также позволяет значению flag
быть символом autosaved, что помечает буфер как измененный и
автоматически сохраненный после последнего изменения.
Эта команда помечает текущий буфер как не измененный и не требующий
сохранения. Если arg не равен nil, она
помечает буфер как измененный, чтобы он был сохранен при следующей подходящей
возможности. В интерактивном режиме arg — это префиксный
аргумент.
Не используйте эту функцию в программах, так как она выводит сообщение в
область вывода; вместо этого используйте set-buffer-modified-p
(выше).
Эта функция возвращает счетчик изменений buffer. Это
счетчик, который увеличивается каждый раз, когда буфер изменяется. Если
buffer равен nil (или опущен), используется
текущий буфер.
Эта функция возвращает счетчик изменений символов buffer.
Изменения свойств текста не изменяют этот счетчик; однако каждый раз, когда текст
вставляется или удаляется из буфера, счетчик сбрасывается до значения, которое
было бы возвращено buffer-modified-tick. Сравнивая значения,
возвращаемые двумя вызовами buffer-chars-modified-tick, вы можете
узнать, произошло ли изменение символа в этом буфере между вызовами. Если
buffer равен nil (или опущен), используется
текущий буфер.
Иногда возникает необходимость изменять буфер таким образом, чтобы это не
приводило к фактическому изменению его текста, например, если изменяются только
его свойства текста. Если вашей программе необходимо изменить буфер, не
вызывая никаких хуков и функций, реагирующих на изменения буфера, используйте
макрос with-silent-modifications.
Выполняет body, делая вид, что он не изменяет буфер. Это включает проверку того, заблокирован ли файл буфера (см. Блокировка файлов), выполнение хуков изменения буфера (см. Хуки изменения) и т. д. Обратите внимание, что если body фактически изменяет текст буфера (а не его свойства), его данные отмены могут быть повреждены.