Emacs desktop-save-mode - salve a área de trabalho somente quando a área de trabalho anterior foi totalmente restaurada

11

Eu tenho o seguinte no meu .emacs:

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

Muitas vezes, tenho muitos buffers abertos (mais ou menos 100), então isso realmente ajuda - já que o emacs está carregando buffers apenas quando não está ocupado com outra coisa.

Agora, às vezes acontece o seguinte: Fecho o emacs antes de desligar o laptop. Então percebo - preciso editar mais um arquivo rapidamente - para abrir o emacs novamente, executar a edição e depois fechá-lo. Se isso acontecer dentro de um curto período de tempo, desktop-save-modenão foi possível restaurar todos os buffers salvos anteriormente. Nesse caso, quando agora fecho o emacs novamente, apenas os buffers restaurados são salvos e o estado antes do desligamento inicial ser perdido.

Existe uma maneira de fazer o desktop-saveúnico acontecer, se a área de trabalho salva anteriormente tiver sido completamente restaurada?

Christian Herenz
fonte

Respostas:

3

Há um gancho que você pode usar: desktop-after-read-hook. Adicione uma função para definir uma variável após a restauração do estado da área de trabalho. Usando defadvicearound desktop-save, verifique se a variável está definida antes de salvar o estado.

Estou no Emacs 25.3.1, e este é o código que usei:

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

Adicione-o ao seu .emacse reinicie-o.

Faried Nawaz
fonte
Oi obrigado, isso realmente deve fazer o truque. No entanto, minhas habilidades no emacs Lisp são um pouco limitadas. Talvez você possa expandir a sua resposta para incluir um trecho lisp a partir do qual eu poderia começar a experimentar ....
Christian Herenz
11
Editei minha resposta para adicionar o código para o seu .emacs.
perfil completo de Faraw Nawaz