В этом разделе описывается, как включить и отключить информацию об отмене для данного буфера. Также объясняется, как список отмены автоматически усекается, чтобы он не стал слишком большим.
Запись информации об отмене в только что созданном буфере по умолчанию
включена; но если имя буфера начинается с пробела, запись отмены изначально
отключена. Вы можете явно включить или отключить запись отмены с помощью
следующих двух функций или установив buffer-undo-list
самостоятельно.
Эта команда включает запись информации об отмене для буфера
buffer-or-name, чтобы последующие изменения можно было отменить.
Если не указан аргумент, используется текущий буфер. Эта функция
ничего не делает, если запись отмены уже включена в буфере. Она
возвращает nil.
При интерактивном вызове buffer-or-name — это текущий буфер. Вы не можете указать другой буфер.
Эта функция отбрасывает список отмены buffer-or-name и отключает дальнейшую запись информации об отмене. В результате становится невозможно отменить ни предыдущие, ни последующие изменения. Если список отмены buffer-or-name уже отключен, эта функция не имеет эффекта.
При интерактивном вызове BUFFER-OR-NAME — это текущий буфер. Вы
не можете указать другой буфер. Эта функция возвращает nil.
По мере продолжения редактирования списки отмены становятся все длиннее.
Чтобы предотвратить использование ими всего доступного объема памяти, сборщик
мусора усекает их до установленных вами пределов. (Для этой цели размер
списка отмены измеряет ячейки cons, составляющие список, плюс строки удаленного
текста.) Три переменные контролируют диапазон допустимых размеров:
undo-limit, undo-strong-limit и
undo-outer-limit. В этих переменных размер считается как
количество занятых байтов, включая как сохраненный текст, так и другие
данные.
Это мягкий предел допустимого размера списка отмены. Группа изменений, при которой превышается этот размер, сохраняется последней.
Это верхний предел допустимого размера списка отмены. Группа
изменений, при которой превышается этот размер, отбрасывается сама (вместе
со всеми более старыми группами изменений). Есть одно исключение: самая
последняя группа изменений отбрасывается только в том случае, если она
превышает undo-outer-limit.
Если во время сборки мусора информация об отмене для текущей команды превышает этот предел, Emacs отбрасывает информацию и выводит предупреждение. Это крайний предел для предотвращения переполнения памяти.
Если эта переменная не равна nil, когда
информация об отмене превышает undo-outer-limit, Emacs
спрашивает в области эхо, следует ли отбрасывать информацию. Значение
по умолчанию — nil, что означает автоматическое
отбрасывание.
Эта опция в основном предназначена для отладки. Сборка мусора приостанавливается, пока задается вопрос, что означает, что Emacs может потерять память, если пользователь слишком долго не отвечает.