comandos - Cómo Emacs determina una unidad de trabajo para deshacer.
emacs ubuntu (1)
La lógica para establecer los límites de deshacer está principalmente en self-insert-command
que se implementa en cmds.c
Tendrás que leer el código de la historia completa, pero básicamente:
- Siempre que solo estés escribiendo caracteres, hay un límite de deshacer cada 20 caracteres que escribes.
- Pero si emite un comando de edición diferente (mata una palabra, por ejemplo), esto hace que se agregue un límite de deshacer de inmediato, restableciendo el recuento de caracteres.
- Ciertas inserciones "peludas" (según lo determinado por
internal_self_insert
) causan que se agregue inmediatamente un límite de deshacer, y que se restablezca el recuento de caracteres. Al leer el código, parece que estos son: (1) enoverwrite-mode
, sioverwrite-mode
un carácter con uno que tiene un ancho diferente, por ejemplo, escribiendo sobre una pestaña; (2) si el carácter que insertó causó que una abreviatura se expandiera; (3) si el carácter que escribió causó que elauto-fill-mode
insertara una sangría. - Además, cualquier comando de edición que decida que sería una buena idea tener un límite de deshacer puede solicitarlo llamando
undo-boundary
. Esto no hace que el recuento de caracteres se restablezca.
Cuando ingresa el comando C- / , Emacs deshace parte de sus cambios recientes en un búfer. Cuando ingresas C- / nuevamente, se deshace otra parte del trabajo.
He leído la entrada del manual de Emacs en Deshacer, pero es vaga acerca de cómo funciona exactamente. El manual dice "Los comandos de inserción de caracteres consecutivos generalmente se agrupan en un solo registro de deshacer", pero no explica cómo decide el número de comandos de inserción de caracteres que constituyen un grupo. El número de caracteres que pone en un grupo parece aleatorio.
¿Alguien puede explicar el algoritmo que usa Emacs para agrupar caracteres en registros de deshacer?