Режим Emacs-desktop-save-save - зберігайте робочий стіл лише тоді, коли попередній робочий стіл був повністю відновлений


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.
Faried Nawaz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.