Möglich, den Rückgängig-Baum im bösen Modus nicht zu verwenden?

12

Von Zeit zu Zeit stoße ich auf Fehler im Rückgängig-Baum, bei denen ich nicht wiederholen kann, mit dem folgenden bekannten Fehler , einem weiteren Bericht und einem reddit-Thread .

primitive-undo: Unrecognized entry in undo list undo-tree-canary

Dies ist sehr schlecht und kann zu Arbeitsverlust führen, wenn Sie nicht die neueste Version der Datei gespeichert haben.


Ist es möglich, das lineare Rückgängigmachen von Emacs im bösen Modus zu verwenden, da ich die Funktion zum Verzweigen von rückgängig gemachten Bäumen nie verwende?


Hinweis: Ich habe versucht, die Einstellung (global-undo-tree-mode -1)direkt (evil-mode 1)vorzunehmen, nach der der Rückgängig-Baum deaktiviert wird, aber das Wiederherstellen (Strg-R) funktioniert danach nicht mehr.

ideasman42
quelle
2
Emacs hat keinen Befehl 'Wiederherstellen' (Sie unterbrechen stattdessen die Rückgängig-Sequenz und machen dann die vorhergehende Folge von Rückgängig-Befehlen rückgängig). Es hört sich so an, als ob das, was Sie getan haben, richtig funktioniert hat.
Phils
1
Wenn Ihr Ziel darin besteht, den Baum rückgängig zu machen, setzen Sie sich bitte mit dem Autor in Verbindung und schreiben Sie ihm eine E-Mail. Sich über emacs-devel zu beschweren, wird die Dinge nicht reparieren. Wenn Ihr Ziel darin besteht, Evil die Verwendung von Vanilla Undo zu ermöglichen, öffnen Sie ein Ticket in seinem Bug-Tracker. Beachten Sie jedoch, dass das Rückgängigmachen von Vanille nur das Rückgängigmachen ist. Es gibt überhaupt kein Wiederherstellen, sondern nur das Rückgängigmachen des Rückgängigmachens. Daher wird der Rückgängig-Baum überhaupt verwendet.
Wasamasa
1
Mein Ziel ist es, rückgängig zu machen / zu wiederholen. Ich bin nicht so aufgeregt, wie. Da ich nicht die Verwendung Baum Ich dachte Funktionalität von Undo-Baum könnte es am einfachsten sein Emacs zu verwenden , built-in rückgängig zu machen. Trotzdem habe ich den Fehler dem Undo-Tree-Autor gemeldet.
ideasman42
Ich habe genau das gleiche Problem, es passiert ungefähr einmal täglich und ist sehr frustrierend
Cjohansson

Antworten:

7

Der Autor von undo-tree.elToby Cubitt ist derzeit zu beschäftigt, um diesen speziellen Fehler zu beheben. Wenn er in Zukunft Zeit hat, kann er sich weiter mit dem Thema befassen. Der Autor hat angegeben, dass er Schwierigkeiten hat, den Fehler zuverlässig zu reproduzieren, und kürzlich nicht in der Lage war, ihn über den Hauptzweig zu reproduzieren. Dies tritt nur bei Verwendung von Rückgängig / Wiederherstellen in der Region auf. Der Autor schlägt vor, in der Zwischenzeit nur die Funktion zum Rückgängigmachen / Wiederherstellen in der Region zu deaktivieren.

Ich würde jedem emacs -qempfehlen , der motiviert ist, einen zuverlässigen Weg zu finden, um das Problem zu reproduzieren, indem er sowohl die aktuelle stabile Version von Emacs (z. B. 25.2.1) als auch die neueste Version des Hauptzweigs verwendet und dann Senden Sie diese Rezepte an die Teilnehmer (Stefan, Toby, Barry und Keith) an die Bug-Tracking-Nummer 16377 mit Durchschlägen.

Die Hauptverfolgungsnummer ist 16377, und es gibt eine verwandte Verfolgungsnummer 16523:

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=16377

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=16523

Hier ist die Problemumgehung, mit der die undo/redo-in-regionFunktion deaktiviert wird :

(setq undo-tree-enable-undo-in-region nil)
Gesetzesliste
quelle
1
Diese Problemumgehung funktioniert nicht - ich habe es versucht und werde manchmal immer noch defekt.
ideasman42
@ ideasman42 - Soweit ich weiß, Toby Cubitt ist derzeit nicht bewusst , dass der Fehler kann auftreten , wenn undo-tree-enable-undo-in-regionist nil; und ich habe auch nie gesehen, dass es außerhalb der Verwendung von Undo-in-Region auftritt. Wenn Sie in der Lage sind, ein Rezept zur Reproduktion des Fehlers zu erstellen, melden Sie es bitte dem Emacs-Team - eine Kopie an Dr. Cubitt wäre ebenfalls hilfreich, und wenn es nicht zu viel Mühe gibt, würde ich das sicher begrüßen Rezept, wenn Sie in der Lage sind, ein zuverlässiges zu finden. Entschuldigung, dass Sie Probleme haben ...
Lawlist
Ich habe einen Fehlerbericht ohne Antwort verschickt (vor einigen Monaten). Projekte wie dieses, auf die viele Menschen angewiesen sind, sollten wirklich einen öffentlichen Bug-Tracker haben.
ideasman42
16377 und 16523 sind in der Tat öffentliche Emacs-Bug-Tracking-Nummern und undo-treesind offiziell Teil der elpaRepositories. Sie können den Standard-Emacs-Fehlerbericht verwenden. Das Endergebnis kann jedoch dasselbe sein - dh darauf warten, dass Dr. Cubitt etwas Freizeit in seinem vollen Terminkalender findet ... Irgendwann kann ein anderer Undo-Guru vorbeikommen und bei der Pflege des Pakets behilflich sein. Ich habe viel Zeit damit verbracht, eine benutzerdefinierte Gabel des Rückgängig-Baums zu erstellen, die auf halblineare Weise rückgängig gemacht / wiederhergestellt werden kann, und ich habe immer noch nur ein grundlegendes Verständnis dafür, wie alles funktioniert ...
Lawlist
1

Anscheinend können Sie evil-pkg.el in ~ / .emacs.d / elpa / evil-xxxxxxx / dir bearbeiten und den Undo-Tree als Voraussetzung löschen:

(define-package "evil" "20140109.605" "Extensible Vi layer for Emacs." '((goto-chg "1.6")))

Quelle

DaftWooly
quelle
Das wird rückgängig machen / wiederholen, was OP nicht will.
Wasamasa
1
Der Autor des Blogs, den ich verlinkt habe, sagte, es erlaube ihm, das Vanilla-Rückgängigmachen von Emacs zu verwenden. Dies scheint das zu sein, was OP wollte, als er "Baum rückgängig machen deaktivieren" sagte.
DaftWooly
1
Dies sollte wirklich ein letzter Ausweg sein, da diese Anpassung beim nächsten Aktualisieren von Paketen überschrieben wird. Es ist besser, einen Weg zu finden, um das gewünschte Verhalten zu erzielen, indem Sie Ihre Init-Datei konfigurieren.
zck
Ich stimme zu, leider scheint es der einzige Weg zu sein, den Rückgängig-Baum im Bösen zu deaktivieren.
DaftWooly
Funktioniert bei mir nicht Ich habe die Anforderung auskommentiert und das undo-treePaket aus dem Weg geräumt, damit es nicht geladen wird. Jetzt schlägt die Verwendung von "Wiederherstellen" mit fehl Wrong type argument: commandp, redo.
Hi-Angel
1

Bearbeiten, dies ist jetzt ein Paket, das zum Rückgängigmachen / Wiederherstellen im bösen Modus - Rückgängig-Fu - verwendet werden kann .


Hinzufügen einer Antwort auf die eigene Frage, da ich seit einiger Zeit das Böse ohne Rückgängig-Baum verwende.

Dies funktioniert überraschend gut zum Rückgängigmachen / Wiederherstellen, wodurch Emacs rückgängig gemacht werden, ohne dass etwas Schweres wie undo-treeoder redo+.

(global-undo-tree-mode -1)

(defun simple-redo ()
  (interactive)
  (let
    (
      (last-command
        (cond
          ;; Break undo chain, avoid having to press Ctrl-G.
          ((string= last-command 'simple-undo) 'ignore)
          ;; Emacs undo uses this to detect successive undo calls.
          ((string= last-command 'simple-redo) 'undo)
          (t last-command))))
    (condition-case err
      (progn
        (undo) t)
      (user-error
        (message "%s" (error-message-string err)))))
  (setq this-command 'simple-redo))

(defun simple-undo ()
  (interactive)
  (let
    (
      (last-command
        (cond
          ;; Emacs undo uses this to detect successive undo calls.
          ((string= last-command 'simple-undo) 'undo)
          ((string= last-command 'simple-redo) 'undo)
          (t last-command))))
    (condition-case err
      (progn
        (undo-only) t)
      (user-error
        (message "%s" (error-message-string err)))))
  (setq this-command 'simple-undo))
ideasman42
quelle