Al ejecutar el comando undo-tree-undo/redo
sucesivamente, las cosas se deshacen / rehacen según la rama activa actual. Aunque el usuario recibe un mensaje de punto de bifurcación en el camino, las bifurcaciones anteriores se ignoran a menos que un usuario seleccione manualmente una bifurcación diferente.
Entiendo que puedo abrir el visualizador y seleccionar una rama diferente, sin embargo, sería muy útil mantener presionada la tecla Deshacer / Rehacer y ver que todo suceda en el orden exactamente opuesto. Idealmente, esto debería funcionar independientemente de si el visualizer
búfer está abierto, es decir, calcular mediante programación el orden de principio a fin y de principio a fin.
P : Esta es esencialmente una solicitud de función que se extiende undo-tree
para permitir deshacer / rehacer sucesivamente lineal, independientemente de si el búfer del visualizador está abierto. [Nuevas funciones y métodos abreviados de teclado alternativos para esta nueva característica son ciertamente aceptables.]
fuente
undo-tree
parece que es parte del concepto que puede cambiar libremente entrebuffer-undo-tree
ybuffer-undo-list
alternandoundo-tree-mode
. Según entiendo su pregunta, el manejo original debuffer-undo-list
hace lo que quiere. Por lo tanto, sugiere que se apague temporalmenteundo-tree-mode
para su propósito. Lamentablemente, el cambio entrebuffer-undo-tree
ybuffer-undo-list
parece ser defectuoso (al menos para mí). Entonces, tal vez, el camino a seguir sería solo un informe de error para el mantenedor deundo-tree
. Pero, tal vez mi suposición sobre el concepto original es incorrecta.undo-tree-mode
manera que el cambio entrebuffer-undo-tree
ybuffer-undo-list
funcione sin problemas. ¿Ha considerado emitir un informe de error en `toby-undo-tree @ dr-qubit.org`?undo-tree
mientras uso la nuevalinear
función; y me gustaría que la nuevalinear
función funcione sin que el búfer del visualizador sea necesariamente visible. En general, implemento mis propias mejoras / modificaciones a Emacs, tanto sus bibliotecas de terceros integradas como las opcionales. Cuando me atoro o veo algo súper complejo como laundo
función, pido ayuda. Una solicitud de función al responsable no podría perjudicar, pero preferiría manejarla aquí.undo-tree.el
código hoy, vi que hay una función de marca de tiempo de nodo. No estoy seguro de si cada nodo tiene una marca de tiempo válida y si esos sobrevivirán a la próxima sesión de Emacs (al restaurar el historial), pero parece que podría ser un atajo para resolver esta nueva solicitud de función, es decir, ordenar y seleccionar el anterior o el siguiente en el tiempo. Todavía no he visto cómo se ve el diseño de la tierra en un punto de ramificación, pero ... esos son mis pensamientos preliminares. . . .undo-list-rebuild-from-tree
. Uno debelet
vincular la variablebuffer-undo-list
y dejar queundo-list-rebuild-from-tree
haga su trabajo. Luego copie ese valor en otra variable local, digamosmy-undo-list
, y deje ellet
formulario para el enlacebuffer-undo-list
. La variablemy-undo-list
dicta la ruta lineal a través deundo-tree
. Al echarle un vistazoundo-list-rebuild-from-tree
, verá que esta función también utiliza marcas de tiempo. Anteriormente consideré usar marcas de tiempo. Pero tuve la impresión de que cambian con demasiada frecuencia.Respuestas:
La siguiente es una implementación prototipo de una aproximación de lo que desea. Explota el hecho de que se agregan nuevas ramas en el árbol de deshacer en el lado izquierdo del nodo actual.
La secuencia de teclas C-M-_está vinculada a la
undo-tree-walk
que recorre la parte superior derecha del árbol de deshacer comenzando en el nodo actual.El comportamiento difiere de lo que desea si la rama activa de algún subárbol en el lado derecho del nodo actual no es la rama más a la izquierda en ese subárbol.
Puede obtener dicho estado mediante secuencias de deshacer / rehacer no trivales.
Simplemente pruébelo usted mismo para ver si eso es suficiente para su aplicación.
Tenga en cuenta que agregué
undo-tree-visualize
al final deundo-tree-walk
para mostrar las consecuencias de caminar con el árbol de deshacerundo-tree-walk
. Siéntase libre de modificar el código a su gusto.Tenga en cuenta también que tuve que elegir esta aproximación más simple de una solución para su problema debido a restricciones de tiempo.
fuente
undo-tree-walk
superar algunos errores iniciales, tal vez porque no tengo este modo globalmente activo.(when (eq buffer-undo-list t) (user-error "No undo information.")) (undo-list-transfer-to-tree)
Eso silenció mis errores iniciales en un nuevo búfer al intentar esta respuesta. Mi siguiente observación fue queundo-tree-walk
llega al punto de bifurcación y luego cambia a la bifurcación a la derecha, pero solo baja una muesca / nódulo de la bifurcación antes de volver a subir la bifurcación al tronco. Mi configuración preferida crea una muesca / nódulo para cada pulsación de tecla.undo-list-transfer-to-tree
como propusiste . Antes de eso, pruebo siundo-tree-mode
está activo, de lo contrarioundo-list-transfer-to-tree
puede ser fatal.Un agradecimiento especial a @Tobias por escribir una función para localizar la marca de tiempo siguiente / anterior en el historial de deshacer / rehacer: /emacs//a/32415/2287 ; y, también para escribir una serie de funciones para copiar el árbol de deshacer: /emacs//a/32230/2287 .
Como algunos lectores ya saben, MELPA acepta los tenedores solo en circunstancias extremas. La creación de un complemento probablemente sea factible, pero no parece práctico dada la cantidad de cambios que ha realizado @lawlist, que incluye, entre otros, agregar elementos a los vectores de estructura de datos subyacentes y cambiar los nombres de varios funciones / variables que no se ajustaban a la
undo-tree-...
convención de nomenclatura de prefijos, etc. @lawlist ya se ha comunicado con el autor original (Dr. Cubitt) para ofrecer esta nueva característica, así como varias correcciones de errores y mejoras.Si alguien está interesado, no dude en darle un giro a esta nueva función. El comentario contiene un ejemplo de formulario de envío de informe de errores a partir del
emacs -q
caso de que alguien tenga problemas.Código fuente: https://github.com/lawlist/undo_tree
Comentario:
fuente