Emacs Desktop-Speichermodus - Speichern Sie den Desktop nur, wenn der vorherige Desktop vollständig wiederhergestellt wurde

10

Ich habe folgendes in meinem .emacs:

(desktop-save-mode 1)
(setq desktop-restore-eager 10)
(setq desktop-save t)

Oft habe ich viele Puffer geöffnet (100 oder so), dann hilft das wirklich - da Emacs Puffer nur lädt, wenn ich nicht mit etwas anderem beschäftigt bin.

Jetzt passiert manchmal Folgendes: Ich schließe Emacs, bevor ich meinen Laptop herunterfahren möchte. Dann wird mir klar - ich muss schnell eine weitere Datei bearbeiten -, also öffne ich Emacs erneut, führe die Bearbeitung durch und schließe sie dann. Wenn dies innerhalb kurzer Zeit geschieht, desktop-save-modekonnten nicht alle zuvor gespeicherten Puffer wiederhergestellt werden. In diesem Fall werden beim erneuten Schließen von Emacs nur die wiederhergestellten Puffer gespeichert und der Status vor dem ersten Herunterfahren geht verloren.

Gibt es eine Möglichkeit, das desktop-saveeinzige Ereignis zu erreichen, wenn der zuvor gespeicherte Desktop vollständig wiederhergestellt wurde?

Christian Herenz
quelle

Antworten:

3

Es gibt einen Haken, den Sie verwenden können : desktop-after-read-hook. Fügen Sie eine Funktion hinzu, um eine Variable festzulegen, nachdem der Desktop-Status wiederhergestellt wurde. Überprüfen Sie mit defadvicearound desktop-save, ob die Variable festgelegt ist, bevor Sie den Status speichern.

Ich bin auf Emacs 25.3.1 und dies ist der Code, den ich verwendet habe:

(defvar *my-desktop-save* nil
  "Should I save the desktop when Emacs is shutting down?")

(add-hook 'desktop-after-read-hook
          (lambda () (setq *my-desktop-save* t)))

(advice-add 'desktop-save :around
            (lambda (fn &rest args)
              (if (bound-and-true-p *my-desktop-save*)
                  (apply fn args))))

Fügen Sie es Ihrem hinzu .emacsund starten Sie es neu.

Faried Nawaz
quelle
Hallo danke, das sollte ja den Trick machen. Meine Emacs Lisp-Fähigkeiten sind jedoch etwas eingeschränkt. Könnten Sie vielleicht Ihre Antwort erweitern, um einen Lisp-Ausschnitt aufzunehmen, von dem ich anfangen könnte zu experimentieren ...
Christian Herenz
1
Ich habe meine Antwort bearbeitet, um den Code für Ihre .emacs hinzuzufügen.
Faried Nawaz