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