Emacs desktop-save-mode: solo guarda el escritorio cuando el escritorio anterior se restauró por completo

10

Tengo lo siguiente en mi .emacs:

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

A menudo tengo muchos buffers abiertos (más o menos 100), entonces esto realmente ayuda, ya que emacs está cargando buffers solo cuando no está ocupado con otra cosa.

Ahora, a veces sucede lo siguiente: cierro emacs antes de querer apagar mi computadora portátil. Entonces me doy cuenta: necesito editar un archivo más rápidamente, así que abro emacs nuevamente, realizo la edición y luego la cierro. Si esto sucede dentro de un corto período de tiempo, desktop-save-modeno pudo restaurar todos los búferes guardados anteriormente. En este caso, cuando ahora cierro emacs nuevamente, solo se guardan los búferes que se restauraron y se pierde el estado anterior al apagado inicial.

¿Hay alguna manera de hacer que desktop-savesolo suceda, si el escritorio previamente guardado se ha restaurado por completo?

Christian Herenz
fuente

Respuestas:

3

Hay un gancho que puede utilizar: desktop-after-read-hook. Agregue una función para establecer una variable después de restaurar el estado del escritorio. Usando defadvicealrededor desktop-save, verifique si la variable está establecida antes de guardar el estado.

Estoy en Emacs 25.3.1, y este es el código que utilicé:

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

Agréguelo a su .emacsy reinícielo.

Faried Nawaz
fuente
Hola, gracias, esto debería hacer el truco. Sin embargo, mis habilidades con emacs Lisp son un poco limitadas. ¿Podría ampliar su respuesta para incluir un fragmento de lisp desde el que podría comenzar a experimentar ...
Christian
1
He editado mi respuesta para agregar el código para sus .emacs.
Faried Nawaz