Lors de l'exécution undo-tree-undo/redo
successive de la commande , les choses sont annulées / refaites en fonction de la branche active actuelle. Bien que l'utilisateur reçoive un message de point de branche en cours de route, les branches précédentes sont ignorées, sauf si un utilisateur sélectionne manuellement une branche différente.
Je comprends que je peux ouvrir le visualiseur et sélectionner une branche différente, cependant, il serait très utile de maintenir enfoncée la touche annuler / rétablir et de regarder tout se passer dans l'ordre inverse exact. Idéalement, cela devrait fonctionner indépendamment du fait que le visualizer
tampon soit ouvert, c'est-à-dire calculer par programme l'ordre de la fin au début et du début à la fin.
Q : Il s'agit essentiellement d'une demande de fonctionnalité à étendre undo-tree
pour permettre des annulations / rétablissements successifs linéaires, que le tampon du visualiseur soit ouvert ou non. [Les nouvelles fonctions et les raccourcis clavier alternatifs pour cette nouvelle fonctionnalité sont certainement acceptables.]
la source
undo-tree
semble faire partie du concept selon lequel vous pouvez basculer librement entrebuffer-undo-tree
etbuffer-undo-list
en basculantundo-tree-mode
. Si je comprends bien votre question, le traitement d'originebuffer-undo-list
fait ce que vous voulez. Il se propose donc de s'éteindre temporairementundo-tree-mode
pour votre usage. Dommage que la commutation entrebuffer-undo-tree
etbuffer-undo-list
semble être buggée (au moins pour moi). Alors peut-être que le chemin à parcourir serait juste un rapport de bogue au responsable deundo-tree
. Mais, peut-être que ma supposition sur le concept original est fausse.undo-tree-mode
telle sorte que la commutation entrebuffer-undo-tree
etbuffer-undo-list
fonctionne parfaitement. Avez-vous envisagé d'émettre un rapport de bogue sur `toby-undo-tree @ dr-qubit.org`?undo-tree
tout en utilisant la nouvellelinear
fonctionnalité; et, je voudrais que la nouvellelinear
fonctionnalité fonctionne sans que le tampon du visualiseur soit nécessairement visible. En général, j'implémente mes propres améliorations / modifications à Emacs, à la fois ses bibliothèques tierces intégrées et facultatives. Lorsque je suis bloqué ou que je vois quelque chose de super complexe comme laundo
fonctionnalité, je demande de l'aide. Une demande de fonctionnalité au responsable ne pouvait pas faire de mal, mais je préférerais la traiter ici.undo-tree.el
code aujourd'hui, j'ai vu qu'il existe une fonction d'horodatage du nœud. Je ne sais pas si chaque nœud a un horodatage valide et si ceux-ci survivent à la prochaine session Emacs (lors de la restauration de l'historique), mais cela semble pouvoir être raccourci pour résoudre cette nouvelle demande de fonctionnalité - c'est-à-dire trier et sélectionner la précédente ou la suivante dans le temps. Je n'ai pas encore vu à quoi ressemble l'aménagement du terrain à un point de branchement, mais ... ce sont mes réflexions préliminaires. . . .undo-list-rebuild-from-tree
. Il fautlet
lier la variablebuffer-undo-list
et laisserundo-list-rebuild-from-tree
faire son travail. Copiez ensuite cette valeur dans une autre variable locale, par exemplemy-undo-list
, et laissez lalet
forme pour la liaisonbuffer-undo-list
. La variablemy-undo-list
dicte le chemin linéaire à travers leundo-tree
. En y regardant,undo-list-rebuild-from-tree
vous voyez que cette fonction utilise également des horodatages. Plus tôt, j'ai envisagé d'utiliser des horodatages. Mais j'avais l'impression que ceux-ci changent trop souvent.Réponses:
Ce qui suit est une implémentation prototype d'une approximation de ce que vous voulez. Il exploite le fait que de nouvelles branches dans l'arbre d'annulation sont ajoutées sur le côté gauche du nœud actuel.
La séquence de clés C-M-_est liée à
undo-tree-walk
laquelle parcourt la partie supérieure droite de l'arborescence d'annulation à partir du nœud actuel.Le comportement diffère de ce que vous voulez si la branche active d'un sous-arbre sur le côté droit du nœud actuel n'est pas la branche la plus à gauche dans ce sous-arbre.
Vous pouvez entrer dans un tel état par des séquences d'annulation / de rétablissement non valables.
Essayez-le par vous-même pour voir si cela est suffisant pour votre application.
Notez que j'ai ajouté
undo-tree-visualize
à la fin deundo-tree-walk
pour afficher les conséquences de la marche de l'annulation de l'arbre avecundo-tree-walk
. N'hésitez pas à modifier le code à votre guise.Notez également que j'ai dû choisir cette approximation la plus simple d'une solution à votre problème en raison de contraintes de temps.
la source
undo-tree-walk
pour surmonter certaines erreurs initiales, peut-être parce que je n'ai pas ce mode globalement actif.(when (eq buffer-undo-list t) (user-error "No undo information.")) (undo-list-transfer-to-tree)
Cela a fait taire mes erreurs initiales dans un nouveau tampon en essayant cette réponse. Ma prochaine observation a été queundo-tree-walk
le point de branchement atteint puis passe à la branche de droite, mais ne descend que la branche d' un cran / nodule avant de remonter la branche jusqu'au tronc. Ma configuration préférée crée une encoche / nodule pour chaque coup de clé.undo-list-transfer-to-tree
comme vous l'avez proposé. Avant cela, je teste siundo-tree-mode
est actif sinonundo-list-transfer-to-tree
peut être fatal.Un merci spécial à @Tobias pour avoir écrit une fonction pour localiser l'horodatage suivant / précédent dans l'historique d'annulation / de rétablissement: https://emacs.stackexchange.com/a/32415/2287 ; et, pour avoir également rédigé une série de fonctions pour copier l'arborescence d'annulation: https://emacs.stackexchange.com/a/32230/2287 .
Comme certains lecteurs le savent peut-être déjà, les fourches ne sont acceptées par MELPA que dans des circonstances extrêmes. La création d'un module complémentaire est probablement réalisable, mais ne semble pas pratique compte tenu de la quantité de modifications apportées par @lawlist - y compris, mais sans s'y limiter, l'ajout d'éléments aux vecteurs de structure de données sous-jacents et la modification des noms de plusieurs fonctions / variables qui n'étaient pas conformes à la
undo-tree-...
convention de nommage des préfixes, etc. @lawlist a déjà contacté l'auteur original (Dr. Cubitt) pour offrir cette nouvelle fonctionnalité, ainsi que diverses corrections de bugs et améliorations.Si quelqu'un est intéressé, n'hésitez pas à donner un coup de fouet à cette nouvelle fonctionnalité. Le commentaire contient un exemple de formulaire de soumission de rapport de bogue à partir
emacs -q
du cas où quelqu'un aurait des problèmes.Code source: https://github.com/lawlist/undo_tree
Commentaire:
la source