Emacs desktop-save-mode - hanya menyimpan desktop ketika desktop sebelumnya sepenuhnya pulih

10

Saya memiliki yang berikut ini di .emacs:

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

Seringkali saya memiliki banyak buffer terbuka (100 atau lebih), maka ini sangat membantu - karena emacs memuat buffer hanya ketika tidak sedang sibuk dengan sesuatu yang lain.

Sekarang, kadang-kadang hal berikut terjadi: Saya menutup emacs sebelum saya ingin mematikan laptop saya. Kemudian saya menyadari - saya perlu mengedit satu file lagi dengan cepat - jadi saya membuka emacs lagi, melakukan pengeditan, dan kemudian menutupnya. Jika ini terjadi dalam waktu singkat, maka desktop-save-modetidak dapat mengembalikan semua buffer yang disimpan sebelumnya. Dalam hal ini, ketika saya sekarang menutup emacs lagi, hanya buffer yang dipulihkan yang disimpan dan status sebelum shutdown awal hilang.

Apakah ada cara untuk mewujudkannya desktop-save, jika desktop yang sebelumnya disimpan telah sepenuhnya pulih?

Christian Herenz
sumber

Jawaban:

3

Ada hook Anda dapat menggunakan: desktop-after-read-hook. Tambahkan fungsi untuk mengatur variabel setelah keadaan desktop dipulihkan. Menggunakan defadvicesekitar desktop-save, periksa apakah variabel diatur sebelum menyimpan negara.

Saya menggunakan Emacs 25.3.1, dan ini adalah kode yang saya gunakan:

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

Tambahkan ke Anda .emacs, dan mulai kembali.

Faried Nawaz
sumber
Hai terima kasih, ini memang harus melakukan trik. Namun, keterampilan Lisac emacs saya agak terbatas. Bisakah Anda memperluas jawaban Anda dengan memasukkan potongan kecil yang darinya saya bisa mulai bereksperimen ....
Christian Herenz
1
Saya telah mengedit jawaban saya untuk menambahkan kode untuk .emacs Anda.
Faried Nawaz