Emacs: Başlangıçta son oturumdaki arabellekleri yeniden aç?


91

Her gün emacs'i başlatıyorum ve önceki gün açtığım dosyaların aynısını açıyorum. İnit.el dosyasına ekleyebileceğim bir şey var mı, böylece emacs'ten en son çıktığımda kullandığım tüm arabellekleri yeniden açacak mı?


Emacs 21 ve 22+ 'de masaüstü kullanımının farklı olduğu görülüyor. Konu bu sayfada açıklanmıştır: emacswiki.org/emacs/DeskTop .
hji

Masaüstü işleme varsayılan yolundaki bir başka değişiklik 24.3'te geldi. github.com/jwiegley/emacs-release/blob/…
pestophagous

Yanıtlar:


118

Emacs Desktop kitaplığını kullanabilirsiniz :

Mx desktop-save komutuyla masaüstünü manuel olarak kaydedebilirsiniz. Ayrıca, Emacs'tan çıktığınızda masaüstünün otomatik olarak kaydedilmesini ve Emacs başladığında son kaydedilen masaüstünün otomatik olarak geri yüklenmesini etkinleştirebilirsiniz: masaüstü kaydetme modunu gelecekteki oturumlar için ● olarak ayarlamak için Özelleştirme tamponunu kullanın (bkz. Kolay Özelleştirme) veya ~ / .emacs dosyanızdaki bu satır:

 (desktop-save-mode 1)

5
Mükemmel cevap. Ancak, Emacs'in oturumlar arasında tampon sırasını yeniden düzenlediğini fark ettim. Her zaman aynı tampon sırasına sahip olmanın bir yolu var mı?
axel22

Herhangi biri bunu çalıştırmakta sorun yaşıyorsa (benim yaptığım gibi), işte sorunu teşhis etmek için bir teknik: M-:çalıştırarak hata ayıklamayı açın (setq debug-on-error t), ardından arayın desktop-revertve hata ayıklayıcıda rahatsız edici hatayı yakalayabilir. Benim için bu, çerçeve geri yüklemesinin başarısız olmasına neden olan tampon yerel olması gereken küresel ayardı. (Sadece kullanmak emacs --debug-initda sorunu yakalayabilir, ancak eski yöntemi kullandım.)
robenkleene

10

Sorunun emacs "masaüstü" işlevini aradığından şüphelenmeme rağmen (yukarıdaki yanıta bakın), Lewap'ın yaklaşımı, birinin kullandığı dosya kümesi gerçekten aynı dosya kümesiyse yararlı olabilir. Aslında, biri düzenli olarak kullanılan farklı dosya kümelerine sahipse, bir adım daha ileri gidip 'profiller' tanımlanabilir ... Quickie örneği:

(let ((profile 
       (read-from-minibuffer "Choose a profile (acad,dist,lisp,comp,rpg): ")
       ))
  (cond
   ((string-match "acad" profile) 
    (dired "/home/thomp/acad")
    (dired "/home/thomp/acad/papers")
    )
   ((string-match "lisp" profile)
    (setup-slime)
    (lisp-miscellany)
    (open-lisp-dirs)
    )
   ((string-match "rpg" profile)
    (find-file "/home/thomp/comp/lisp/rp-geneval/README")
    (dired "/home/thomp/comp/lisp/rp-geneval/rp-geneval")
... etc.

Çalışırken düzenli olarak kullanılan farklı dosya kümeleri arasında düzenli olarak geçiş yaptığınızı fark ederseniz, perspektifleri kullanmayı ve her bir perspektifi, düzenli olarak kullanılan istenen dosya kümesiyle doldurmayı düşünün .


6

Arabellekleri / sekmeleri (özellikle elscreen sekmelerini) depolamak / geri yüklemek için: elscreen kullanıyorum ve masaüstü oturumunu depolamayı / geri yüklemeyi yönetme yöntemim ve elscreen sekmesi yapılandırması .emacs dosyamda aşağıdaki koddur (kullanılan adlar kendi kendini açıklayıcıdır ve saklama / geri yükleme işlevleri emacs her başladığında çalıştırılmayacaksa, satırları "(push # 'elscreen-store kill-emacs-hook)" ve "(elscreen-restore)") ile yorumlayın:

(defvar emacs-configuration-directory
    "~/.emacs.d/"
    "The directory where the emacs configuration files are stored.")

(defvar elscreen-tab-configuration-store-filename
    (concat emacs-configuration-directory ".elscreen")
    "The file where the elscreen tab configuration is stored.")

(defun elscreen-store ()
    "Store the elscreen tab configuration."
    (interactive)
    (if (desktop-save emacs-configuration-directory)
        (with-temp-file elscreen-tab-configuration-store-filename
            (insert (prin1-to-string (elscreen-get-screen-to-name-alist))))))
(push #'elscreen-store kill-emacs-hook)
(defun elscreen-restore ()
    "Restore the elscreen tab configuration."
    (interactive)
    (if (desktop-read)
        (let ((screens (reverse
                        (read
                         (with-temp-buffer
                          (insert-file-contents elscreen-tab-configuration-store-filename)
                          (buffer-string))))))
            (while screens
                (setq screen (car (car screens)))
                (setq buffers (split-string (cdr (car screens)) ":"))
                (if (eq screen 0)
                    (switch-to-buffer (car buffers))
                    (elscreen-find-and-goto-by-buffer (car buffers) t t))
                (while (cdr buffers)
                    (switch-to-buffer-other-window (car (cdr buffers)))
                    (setq buffers (cdr buffers)))
                (setq screens (cdr screens))))))
(elscreen-restore)

Bu rota olacak herkes için, sadece küçük bir nokta takabilmek emacs-configuration-directoryile user-emacs-directoryEmacs zaten sağlayan.
Joe

2

Temel masaüstü özelliğinde yapabileceğiniz yararlı geliştirmeler vardır. Özellikle kullanışlı (IMO), oturum sırasında masaüstünü otomatik kaydetme yöntemleridir, aksi takdirde sisteminiz çökerse, o oturumu başlattığınız masaüstü dosyasında sıkışıp kalacaksınız - Emacs'ı birçok kişi için çalışır durumda tutma eğilimindeyseniz oldukça can sıkıcı bir seferde günler.

http://www.emacswiki.org/emacs/DeskTop

Wiki ayrıca genel olarak oturumlar arasında kalıcı veriler hakkında yararlı bilgiler içerir:

http://www.emacswiki.org/emacs/SessionManagement

Özellikle masaüstü bilgisayarlar için, Desktop Recover'ın özellikle umut verici göründüğünü düşündüm , ancak henüz denemedim.


-2

(find-file-noselect "/my/file")onu sessizce açacak, yani tamponu yükseltmeden. Sadece söylüyorum.

EDIT Bu komut etkileşimli değildir ; Test etmek için, örneğin imleci son parantezden sonra konumlandırıp Cx Ce'ye basarak ifadeyi değerlendirmelisiniz.

Olumsuz oy kullanmak hiç hoş değil ; bu komut kesinlikle çalışır ve sorunun kapsamındadır.


2
Olumsuz oy vermedim, ancak belki de cevabınız, önceki Emacs oturumunda açık olan tamponların özellikle nasıl açılacağı konusuna değinmediği için reddedildi.
Ryan C. Thompson

1
orijinal Q ile hiçbir ilgisi olmadığı için
olumsuz oy verildi.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.