Emacs chế độ lưu máy tính để bàn - chỉ lưu máy tính để bàn khi máy tính trước đó được khôi phục hoàn toàn


10

Tôi có những điều sau đây .emacs:

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

Thường thì tôi có rất nhiều bộ đệm mở (100 hoặc hơn), sau đó điều này thực sự có ích - vì emacs chỉ tải bộ đệm khi không bận rộn với việc khác.

Bây giờ, đôi khi điều sau đây xảy ra: Tôi đóng emacs trước khi tôi muốn tắt máy tính xách tay của mình. Sau đó, tôi nhận ra - tôi cần nhanh chóng chỉnh sửa một tệp nữa - vì vậy tôi mở lại emacs, thực hiện chỉnh sửa và sau đó đóng nó. Nếu điều này xảy ra trong một khoảng thời gian ngắn, thì desktop-save-modekhông thể khôi phục tất cả các bộ đệm đã lưu trước đó. Trong trường hợp này, khi tôi đóng emacs một lần nữa, chỉ các bộ đệm được khôi phục mới được lưu và trạng thái trước khi tắt máy ban đầu.

Có cách nào để thực hiện điều desktop-saveduy nhất xảy ra không, nếu máy tính để bàn đã lưu trước đó đã được khôi phục hoàn toàn?

Câu trả lời:


3

Có một cái móc bạn có thể sử dụng : desktop-after-read-hook. Thêm một chức năng để đặt một biến sau khi trạng thái máy tính để bàn được khôi phục. Sử dụng defadvicexung quanh desktop-save, kiểm tra xem biến được đặt trước khi lưu trạng thái.

Tôi đang sử dụng Emacs 25.3.1 và đây là mã tôi đã sử dụng:

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

Thêm nó vào của bạn .emacs, và khởi động lại nó.


Hi cảm ơn, điều này thực sự nên làm các mẹo. Tuy nhiên, kỹ năng Lisp của tôi có chút hạn chế. Bạn có thể mở rộng câu trả lời của mình để bao gồm một đoạn trích hay không mà tôi có thể bắt đầu thử nghiệm ....
Christian Herenz

1
Tôi đã chỉnh sửa câu trả lời của mình để thêm mã cho .emacs của bạn.
Faraw Nawaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.