Подтвердить что ты не робот

Как Emacs определяет единицу работы для отмены

Когда вы вводите команду C-/, Emacs отбрасывает часть ваших последних изменений в буфер. Когда вы снова введете C-/, он отменяет еще один кусок работы.

Я прочитал руководство пользователя Emacs в Undo, но он неясен в отношении того, как он работает. В руководстве говорится: "Последовательные команды вставки символов обычно группируются вместе в одну отменную запись", но она не объясняет, как она определяет количество команд ввода символов, которые составляют группу. Количество символов, помещаемых в группу, кажется случайным.

Может кто-нибудь объяснить алгоритм, который Emacs использует для группировки символов в отменить записи?

4b9b3361

Ответ 1

Логика установки границ отмены в основном находится в self-insert-command, которая реализована в cmds.c. Вам нужно будет прочитать код для полной истории, но в основном:

  • Пока вы просто вводите символы, есть граница отмены каждые 20 символов, которые вы вводите.
  • Но если вы выдаете другую команду редактирования (например, вы убиваете слово), это приводит к немедленному добавлению границы отмены, сбрасывая количество символов.
  • Определенные "волосатые" вставки (как определено internal_self_insert) вызывают немедленную добавление границы отмены, а число символов должно быть reset. Читая код, он выглядит так: (1) в overwrite-mode, если вы перезаписываете символ с тем, который имеет другую ширину, например. набрав над вкладкой; (2) если введенный вами персонаж вызвал расширение аббревиатуры; (3), если введенный вами символ заставил auto-fill-mode вставить отступ.
  • Кроме того, любая команда редактирования, которая решает, было бы хорошей идеей, чтобы граница отмены могла запросить ее, вызвав undo-boundary. Это не приводит к тому, что число символов будет reset.