Wenn der Befehl undo-tree-undo/redo
nacheinander ausgeführt wird, werden die Dinge basierend auf dem aktuell aktiven Zweig rückgängig gemacht / wiederholt. Obwohl der Benutzer unterwegs eine Verzweigungspunktnachricht erhält, werden die vorherigen Verzweigungen ignoriert, es sei denn, ein Benutzer wählt manuell eine andere Verzweigung aus.
Ich verstehe, dass ich den Visualizer öffnen und einen anderen Zweig auswählen kann. Es wäre jedoch sehr nützlich, einfach die Rückgängig- / Wiederherstellungs-Taste gedrückt zu halten und zu beobachten, wie alles in genau entgegengesetzter Reihenfolge abläuft. Im Idealfall sollte dies unabhängig davon funktionieren, ob der visualizer
Puffer geöffnet ist - dh programmgesteuert die Reihenfolge von Ende bis Anfang und von Anfang bis Ende berechnen.
F : Dies ist im Wesentlichen eine Funktionsanforderung, die erweitert werden muss undo-tree
, um ein lineares aufeinanderfolgendes Rückgängigmachen / Wiederherstellen zu ermöglichen, unabhängig davon, ob der Visualisierungspuffer geöffnet ist. [Neue Funktionen und alternative Tastaturkürzel für diese neue Funktion sind sicherlich akzeptabel.]
quelle
undo-tree
sieht so aus, als ob er Teil des Konzepts ist, dass Sie frei zwischenbuffer-undo-tree
undbuffer-undo-list
durch Umschalten wechseln könnenundo-tree-mode
. Soweit ich Ihre Frage verstehe, macht die ursprüngliche Behandlung vonbuffer-undo-list
, was Sie wollen. Es empfiehlt sich daher,undo-tree-mode
für Ihren Zweck vorübergehend abzuschalten . Schade, dass das Umschalten zwischenbuffer-undo-tree
und fehlerhaftbuffer-undo-list
zu sein scheint (zumindest für mich). Vielleicht wäre der Weg nur ein Fehlerbericht an den Betreuer vonundo-tree
. Aber vielleicht ist meine Vermutung über das ursprüngliche Konzept falsch.undo-tree-mode
, dass das Umschalten zwischenbuffer-undo-tree
undbuffer-undo-list
einwandfrei funktioniert. Haben Sie darüber nachgedacht, einen Fehlerbericht unter "toby-undo-tree @ dr-qubit.org" zu veröffentlichen?undo-tree
während ich die neuelinear
Funktion verwende. und ich möchte, dass die neuelinear
Funktion funktioniert, ohne dass der Visualizer-Puffer unbedingt sichtbar ist. Im Allgemeinen implementiere ich meine eigenen Verbesserungen / Modifikationen an Emacs, sowohl den integrierten als auch den optionalen Bibliotheken von Drittanbietern. Wenn ich nicht weiterkomme oder etwas sehr Komplexes wie dieundo
Funktion sehe, bitte ich um Hilfe. Eine Funktionsanfrage an den Betreuer konnte nicht schaden, aber ich würde es vorziehen, sie hier zu bearbeiten.undo-tree.el
heutigen Codes habe ich festgestellt , dass es eine Knotenzeitstempelfunktion gibt. Ich bin nicht sicher, ob jeder Knoten einen gültigen Zeitstempel hat und ob diese bis zur nächsten Emacs-Sitzung (beim Wiederherstellen des Verlaufs) überleben, aber das scheint eine Abkürzung zum Auflösen dieser neuen Funktionsanforderung zu sein - dh Sortieren und Auswählen die vorherige oder nächste in der Zeit. Ich habe noch nicht gesehen, wie das Layout des Landes an einem Verzweigungspunkt aussieht, aber ... das sind meine vorläufigen Gedanken. . . .undo-list-rebuild-from-tree
. Man solltelet
die Variable bindenbuffer-undo-list
undundo-list-rebuild-from-tree
ihre Arbeit machen lassen. Kopieren Sie anschließend diesen Wert beispielsweise in eine andere lokale Variablemy-undo-list
und lassen Sie daslet
Formular zum Bindenbuffer-undo-list
. Die Variable bestimmtmy-undo-list
den linearen Pfad durch dieundo-tree
. Ein Blick darauf zeigtundo-list-rebuild-from-tree
, dass diese Funktion auch Zeitstempel verwendet. Ich habe früher überlegt, Zeitstempel zu verwenden. Aber ich hatte den Eindruck, dass sich diese zu oft ändern.Antworten:
Das Folgende ist ein Prototyp einer Implementierung einer Annäherung an das, was Sie wollen. Es nutzt die Tatsache aus, dass neue Zweige im Rückgängig-Baum auf der linken Seite des aktuellen Knotens hinzugefügt werden.
Die Tastenfolge C-M-_ist gebunden, an
undo-tree-walk
die der rechte obere Teil des Rückgängig-Baums ab dem aktuellen Knoten verläuft.Das Verhalten unterscheidet sich von dem, was Sie möchten, wenn der aktive Zweig eines Unterbaums auf der rechten Seite des aktuellen Knotens nicht der am weitesten links stehende Zweig in diesem Unterbaum ist.
Sie können in einen solchen Zustand gelangen, indem Sie nicht-trivalente Undo / Redo-Sequenzen ausführen.
Probieren Sie es einfach selbst aus, um zu sehen, ob dies für Ihre Anwendung ausreicht.
Beachten Sie, dass ich
undo-tree-visualize
am Ende von hinzugefügt habeundo-tree-walk
, um die Konsequenzen des Gehens mit dem Rückgängig-Baum anzuzeigenundo-tree-walk
. Fühlen Sie sich frei, den Code nach Ihren Wünschen zu ändern.Beachten Sie auch, dass ich aus zeitlichen Gründen diese einfachste Annäherung an eine Lösung für Ihr Problem wählen musste.
quelle
undo-tree-walk
, um einige anfängliche Fehler zu überwinden, möglicherweise weil ich diesen Modus nicht global aktiv habe.(when (eq buffer-undo-list t) (user-error "No undo information.")) (undo-list-transfer-to-tree)
Dadurch wurden meine anfänglichen Fehler in einem neuen Puffer zum Schweigen gebracht, während diese Antwort ausprobiert wurde. Meine nächste Beobachtung war, dass sieundo-tree-walk
den Verzweigungspunkt erreicht und dann zum Zweig rechts wechselt, aber nur eine Kerbe / Knoten den Zweig hinuntergeht, bevor sie den Zweig wieder zum Stamm hinaufgeht. Mein bevorzugtes Setup erstellt für jeden Tastendruck eine Kerbe / einen Knoten.undo-list-transfer-to-tree
wie Sie vorgeschlagen haben. Vorher teste ich, obundo-tree-mode
sonst aktiv seinundo-list-transfer-to-tree
kann tödlich sein.Besonderer Dank geht an @Tobias für das Schreiben einer Funktion zum Auffinden des nächsten / vorherigen Zeitstempels im Rückgängig / Wiederherstellen-Verlauf: /emacs//a/32415/2287 ; und zum Schreiben einer Reihe von Funktionen zum Kopieren des Rückgängig-Baums: /emacs//a/32230/2287 .
Wie einige Leser vielleicht bereits wissen, werden Gabeln von MELPA nur unter extremen Umständen akzeptiert. Das Erstellen eines Add-Ons ist wahrscheinlich machbar, erscheint jedoch angesichts der Anzahl der von @lawlist vorgenommenen Änderungen nicht praktikabel - einschließlich, aber nicht beschränkt auf das Hinzufügen von Elementen zu den zugrunde liegenden Datenstrukturvektoren und das Ändern der Namen mehrerer Funktionen / Variablen, die nicht der
undo-tree-...
Präfix-Namenskonvention usw. entsprachen. @lawlist hat sich bereits an den ursprünglichen Autor (Dr. Cubitt) gewandt, um diese neue Funktion sowie verschiedene Fehlerkorrekturen und Verbesserungen anzubieten.Wenn jemand interessiert ist, können Sie dieser neuen Funktion gerne einen Strudel geben. Der Kommentar enthält ein Beispielformular für die Übermittlung von Fehlerberichten ab
emacs -q
dem Fall, dass jemand Probleme hat.Quellcode: https://github.com/lawlist/undo_tree
Kommentar:
quelle