Emacs desktop-save-mode - сохранять рабочий стол только после полного восстановления предыдущего рабочего стола


11

У меня есть следующее в моем .emacs:

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

Часто у меня открыто много буферов (около 100), тогда это действительно помогает - поскольку emacs загружает буферы только тогда, когда они не заняты чем-то другим.

Теперь иногда происходит следующее: я закрываю emacs, прежде чем хочу выключить свой ноутбук. Затем я понимаю - мне нужно быстро отредактировать еще один файл - поэтому я снова открываю emacs, выполняю редактирование и затем закрываю его. Если это произошло в течение короткого промежутка времени, то desktop-save-modeне удалось восстановить все ранее сохраненные буферы. В этом случае, когда я снова закрываю emacs, сохраняются только восстановленные буферы, а состояние до первоначального отключения теряется.

Есть ли способ сделать desktop-saveединственное событие, если ранее сохраненный рабочий стол был полностью восстановлен?

Ответы:


3

Там есть крюк вы можете использовать: desktop-after-read-hook. Добавьте функцию для установки переменной после восстановления состояния рабочего стола. Используя defadviceоколо desktop-save, проверьте, установлена ​​ли переменная перед сохранением состояния.

Я нахожусь на Emacs 25.3.1, и это код, который я использовал:

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

Добавьте его к себе .emacsи перезапустите.


Привет спасибо, это действительно должно сработать. Тем не менее, мои навыки в Emacs Lisp немного ограничены. Не могли бы вы расширить свой ответ, включив в него фрагмент
кода,

1
Я отредактировал свой ответ, чтобы добавить код для вашего .emacs.
Фарид Наваз
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.