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é?

Christian Herenz
la source

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.

Faried Nawaz
la source
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