Emacs desktop-save-mode - enregistre le bureau uniquement lorsque le bureau précédent a été entièrement restauré


11

J'ai les éléments suivants dans mon .emacs:

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

Souvent, j'ai beaucoup de tampons ouverts (100 environ), alors cela aide vraiment - car emacs ne charge les tampons que lorsqu'il n'est pas occupé avec autre chose.

Maintenant, il arrive parfois ce qui suit: je ferme emacs avant de vouloir éteindre mon ordinateur portable. Ensuite, je me rends compte - j'ai besoin d'éditer un fichier de plus rapidement - alors j'ouvre à nouveau emacs, j'effectue l'édition, puis je le ferme. Si cela se produit dans un court laps de temps, alors desktop-save-moden'a pas pu restaurer tous les tampons précédemment enregistrés. Dans ce cas, lorsque je ferme à nouveau emacs, seuls les tampons qui ont été restaurés sont enregistrés et l'état avant l'arrêt initial est perdu.

Existe-t-il un moyen de rendre le desktop-saveseul événement possible, si le bureau précédemment enregistré a été complètement restauré?

Réponses:


3

Il y a un crochet , vous pouvez utiliser: desktop-after-read-hook. Ajoutez une fonction pour définir une variable après la restauration de l'état du bureau. En utilisant defadvicearound desktop-save, vérifiez si la variable est définie avant d'enregistrer l'état.

Je suis sur Emacs 25.3.1, et voici le code que j'ai utilisé:

(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))))

Ajoutez-le à votre .emacset redémarrez-le.


Salut merci, cela devrait en effet faire l'affaire. Cependant, mes compétences emacs Lisp sont un peu limitées. Pourriez-vous peut-être étendre votre réponse pour inclure un extrait de lisp à partir duquel je pourrais commencer à expérimenter ....
Christian Herenz

1
J'ai modifié ma réponse pour ajouter le code de votre .emacs.
Faried Nawaz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.