Поддержание списков отмены
В этом разделе описывается, как включить и выключить информацию об отмене для заданного буфера. Также объясняется, как список отмены автоматически усекается, чтобы он не становился слишком большим.
Запись информации об отмене в недавно созданном буфере обычно включена по умолчанию; но если имя буфера начинается с пробела, запись отмены изначально отключена. Вы можете явно включить или отключить запись отмены с помощью следующих двух функций или, установив buffer-undo-list.
- Команда: buffer-enable-undo &optional buffer-or-name
-
Эта команда включает запись информации об отмене для буфера buffer-or-name, чтобы последующие изменения можно было отменить. Если аргумент не указан, используется текущий буфер. Эта функция ничего не делает, если запись отмены уже включена в буфере. Она возвращает
nil.В интерактивном вызове buffer-or-name — это текущий буфер. Вы не можете указать какой-либо другой буфер.
- Команда: buffer-disable-undo &optional buffer-or-name
-
Эта функция отбрасывает список отмены для buffer-or-name и отключает дальнейшую запись информации об отмене. В результате больше невозможно отменить предыдущие изменения или любые последующие изменения. Если список отмены для buffer-or-name уже отключен, эта функция не имеет эффекта.
В интерактивном вызове BUFFER-OR-NAME — это текущий буфер. Вы не можете указать какой-либо другой буфер. Эта функция возвращает
nil.
По мере продолжения редактирования списки отмены становятся все длиннее и длиннее. Чтобы предотвратить использование всего доступного места в памяти, сборка мусора обрезает их до установленных вами предельных размеров. (Для этих целей размер списка отмены измеряется в ячейках cons, составляющих список, плюс строки удаленного текста.) Три переменные контролируют диапазон допустимых размеров: undo-limit, undo-strong-limit и undo-outer-limit. В этих переменных размер подсчитывается как количество занимаемых байт, что включает как сохраненный текст, так и другие данные.
- Пользовательский параметр: undo-limit
Это мягкий предел для допустимого размера списка отмены. Группа изменений, при превышении которой этого размера, — это последняя сохраняемая группа.
- Пользовательский параметр: undo-strong-limit
Это верхний предел для допустимого размера списка отмены. Группа изменений, при превышении которой этого размера, отбрасывается (вместе со всеми более старыми группами изменений). Есть одно исключение: самая последняя группа изменений отбрасывается только в том случае, если она превышает
undo-outer-limit.
- Пользовательский параметр: undo-outer-limit
Если во время сборки мусора информация об отмене для текущей команды превышает этот предел, Emacs отбрасывает информацию и отображает предупреждение. Это последний предел для предотвращения переполнения памяти.
- Пользовательский параметр: undo-ask-before-discard
-
Если эта переменная не
nil, когда информация об отмене превышаетundo-outer-limit, Emacs спрашивает в области эха, нужно ли отбрасывать информацию. Значение по умолчанию —nil, что означает автоматическое отбрасывание.Этот параметр предназначен в основном для отладки. Сборка мусора приостанавливается, пока вопрос не задан, что означает, что Emacs может утечь память, если пользователь слишком долго ждет, прежде чем ответить на вопрос.
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/Maintaining-Undo.html