Emacs modalità desktop-save - salva il desktop solo quando il desktop precedente è stato completamente ripristinato


11

Ho il seguente nel mio .emacs:

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

Spesso ho molti buffer aperti (circa 100), quindi questo mi aiuta davvero - poiché emacs sta caricando i buffer solo quando non si è impegnati con qualcos'altro.

Ora, a volte succede quanto segue: chiudo emacs prima di voler spegnere il mio laptop. Poi mi rendo conto - devo modificare rapidamente un altro file - quindi apro di nuovo emacs, eseguo il montaggio e quindi lo chiudo. Se ciò accade entro un breve periodo di tempo, desktop-save-modenon è stato possibile ripristinare tutti i buffer precedentemente salvati. In questo caso, quando ora chiudo di nuovo emacs, vengono salvati solo i buffer ripristinati e lo stato prima della chiusura iniziale viene perso.

Esiste un modo per far sì desktop-saveche ciò accada solo se il desktop precedentemente salvato è stato completamente ripristinato?

Risposte:


3

C'è un gancio è possibile utilizzare: desktop-after-read-hook. Aggiungi una funzione per impostare una variabile dopo il ripristino dello stato del desktop. Usando defadvicearound desktop-save, controlla se la variabile è impostata prima di salvare lo stato.

Sono su Emacs 25.3.1 e questo è il codice che ho usato:

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

Aggiungilo al tuo .emacse riavvialo.


Ciao grazie, questo dovrebbe davvero fare il trucco. Tuttavia, le mie abilità di Emac Lisp sono un po 'limitate. Potresti forse espandere la tua risposta per includere un frammento di lisp da cui potrei iniziare a sperimentare ....
Christian Herenz,

1
Ho modificato la mia risposta per aggiungere il codice per il tuo .emacs.
Faried Nawaz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.