Tryb emacsa na pulpicie - zapisz pulpit tylko wtedy, gdy poprzedni pulpit został w pełni przywrócony

11

Mam w swoim .emacs:

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

Często mam otwartych wiele buforów (około 100), to naprawdę pomaga - ponieważ emacs ładuje bufory tylko wtedy, gdy nie jest zajęty czymś innym.

Czasami zdarza się, że: Zamykam emacsa, zanim chcę wyłączyć laptopa. Potem zdaję sobie sprawę - muszę szybko edytować jeszcze jeden plik - więc ponownie otwieram emacsa, wykonuję edycję, a następnie go zamykam. Jeśli stanie się to w krótkim czasie, desktop-save-modenie będzie w stanie przywrócić wszystkich wcześniej zapisanych buforów. W takim przypadku, kiedy teraz ponownie zamknę emacsa, tylko bufory, które zostały przywrócone, są zapisywane, a stan przed początkowym zamknięciem zostaje utracony.

Czy istnieje sposób, aby to się desktop-savestało, jeśli wcześniej zapisany pulpit został całkowicie przywrócony?

Christian Herenz
źródło

Odpowiedzi:

3

Jest hak można użyć: desktop-after-read-hook. Dodaj funkcję, aby ustawić zmienną po przywróceniu stanu pulpitu. Używając defadvicewokół desktop-save, sprawdź, czy zmienna jest ustawiona przed zapisaniem stanu.

Korzystam z Emacsa 25.3.1 i użyłem tego kodu:

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

Dodaj go do swojego .emacsi uruchom ponownie.

Faried Nawaz
źródło
Cześć dzięki, to naprawdę powinno załatwić sprawę. Jednak moje umiejętności emacs Lisp są nieco ograniczone. Mógłbyś może poszerzyć swoją odpowiedź na to fragment lisp z której mogę zacząć eksperymentować ....
Christian Herenz
1
Zmodyfikowałem swoją odpowiedź, aby dodać kod do .emacs.
Faried Nawaz