Emacs: mở lại bộ đệm từ phiên trước khi khởi động?


89

Mỗi ngày tôi khởi động emac và mở chính xác các tệp mà tôi đã mở ngày hôm trước. Có thứ gì tôi có thể thêm vào tệp init.el để nó sẽ mở lại tất cả các bộ đệm mà tôi đã sử dụng khi tôi thoát emacs lần cuối không?


Có vẻ như cách xử lý trên máy tính để bàn trong Emacs 21 và 22+ khác nhau. Chủ đề được mô tả trên trang này: emacswiki.org/emacs/DeskTop .
hji

Một thay đổi khác trong đường dẫn mặc định xử lý máy tính để bàn đến trong 24.3. github.com/jwiegley/emacs-release/blob/…
pestophagous

Câu trả lời:


116

Bạn có thể sử dụng thư viện Emacs Desktop :

Bạn có thể lưu màn hình theo cách thủ công bằng lệnh Mx desktop-save. Bạn cũng có thể bật tính năng tự động lưu màn hình khi thoát Emacs và tự động khôi phục màn hình đã lưu cuối cùng khi Emacs khởi động: sử dụng bộ đệm Tùy chỉnh (xem Tùy chỉnh dễ dàng) để đặt chế độ lưu trên màn hình thành t cho các phiên trong tương lai hoặc thêm dòng này trong tệp ~ / .emacs của bạn:

 (desktop-save-mode 1)

5
Câu trả lời chính xác. Tuy nhiên, tôi nhận thấy rằng Emacs sắp xếp lại thứ tự đệm giữa các phiên. Có cách nào để luôn có cùng một thứ tự bộ đệm không?
axel22

Nếu bất kỳ ai gặp sự cố khi làm việc này (như tôi đã làm), đây là một kỹ thuật để chẩn đoán sự cố: bật gỡ lỗi bằng cách M-:thực thi (setq debug-on-error t), sau đó gọi desktop-revertvà nó có thể bắt lỗi vi phạm trong trình gỡ lỗi. Đối với tôi, đó là cài đặt toàn cầu được cho là bộ đệm cục bộ khiến quá trình khôi phục khung không thành công. (Chỉ cần sử dụng emacs --debug-initcó thể nắm bắt vấn đề này quá, nhưng tôi đã sử dụng phương pháp cũ.)
robenkleene

10

Mặc dù tôi nghi ngờ câu hỏi đang tìm kiếm chức năng "máy tính để bàn" của emacs (xem câu trả lời ở trên), cách tiếp cận của Lewap có thể hữu ích nếu tập hợp tệp mà người ta sử dụng thực sự là cùng một bộ tệp. Trên thực tế, người ta có thể tiến thêm một bước nữa và xác định 'hồ sơ' nếu người ta có các tập hợp tệp thường xuyên được sử dụng khác nhau ... Ví dụ Quickie:

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

Nếu bạn nhận thấy rằng bạn thường xuyên chuyển đổi qua lại giữa các nhóm tệp được sử dụng thường xuyên khác nhau khi làm việc, hãy cân nhắc sử dụng các phối cảnh và điền vào từng phối cảnh với nhóm tệp được sử dụng thường xuyên mong muốn.


6

Để lưu trữ / khôi phục bộ đệm / tab (cụ thể là tab elscreen): Tôi sử dụng elscreen và cách tôi quản lý việc lưu trữ / khôi phục phiên máy tính để bàn và cấu hình tab elscreen là đoạn mã sau trong tệp .emacs của tôi (các tên được sử dụng tự giải thích và nếu các chức năng lưu trữ / khôi phục không được thực thi mỗi khi emacs khởi động, chỉ cần ghi chú các dòng với "(push # 'elscreen-store kill-emacs-hook)" và "(elscreen-restore)"):

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

Đối với bất kỳ ai đi tuyến đường này, chỉ cần một điểm nhỏ mà bạn có thể thay thế emacs-configuration-directorybằng user-emacs-directorynhững gì Emacs đã cung cấp.
Joe

2

Có những cải tiến hữu ích mà bạn có thể thực hiện đối với tính năng cơ bản của máy tính để bàn. Đặc biệt tiện dụng (IMO) là các phương pháp tự động lưu màn hình trong suốt phiên làm việc, vì nếu không, nếu hệ thống của bạn gặp sự cố, bạn sẽ bị mắc kẹt với tệp máy tính để bàn mà bạn đã bắt đầu phiên đó - khá khó chịu nếu bạn có xu hướng để Emac chạy nhiều ngày tại một thời điểm.

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

Wiki cũng có thông tin hữu ích về dữ liệu liên tục giữa các phiên nói chung:

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

Đối với máy tính để bàn cụ thể, tôi nghĩ rằng Desktop Recover trông đặc biệt hứa hẹn, tuy nhiên tôi vẫn chưa dùng thử.


-2

(find-file-noselect "/my/file")sẽ mở nó một cách im lặng, tức là w / o nâng bộ đệm. Chỉ nói.

CHỈNH SỬA Lệnh này không tương tác ; Để kiểm tra nó, bạn phải đánh giá biểu thức, ví dụ bằng cách đặt con trỏ sau dấu ngoặc đơn cuối cùng và nhấn Cx Ce

Từ chối điều này không phảimát mẻ ; lệnh này chắc chắn hoạt động và nằm trong phạm vi của câu hỏi.


2
Tôi không phản đối, nhưng có lẽ câu trả lời của bạn đã bị phản đối vì nó không giải quyết vấn đề làm thế nào để mở cụ thể các bộ đệm đã được mở trong phiên Emacs trước đó.
Ryan C. Thompson

1
bỏ phiếu từ chối vì nó không liên quan gì đến Q.
RichieHH 27/09/18
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.