2009-04-29 38 views
66

Mỗi ngày tôi bắt đầu các emacs và mở cùng một tệp chính xác mà tôi đã mở một ngày trước đó. Có cái gì tôi có thể thêm vào tập tin init.el vì vậy nó sẽ mở lại tất cả các bộ đệm tôi đã sử dụng khi tôi cuối cùng bỏ emacs?Emacs: mở lại bộ đệm từ phiên cuối cùng khi khởi động?

+0

Dường như xử lý trên máy tính để bàn khác với Emacs 21 và 22+. Chủ đề được mô tả trên trang này: http://www.emacswiki.org/emacs/DeskTop. – hji

Trả lời

92

Bạn có thể sử dụng Emacs Desktop library:

Bạn có thể lưu các máy tính để bàn bằng tay với lệnh M-x desktop-tiết kiệm. Bạn có thể cũng cho phép tiết kiệm tự động của máy tính để bàn khi bạn thoát khỏi Emacs, và phục hồi tự động cuối cùng desktop lưu khi Emacs bắt đầu: sử dụng bộ đệm Customization (xem dễ dàng Customization) để thiết lập máy tính để bàn tiết kiệm-mode để t cho phiên trong tương lai, hoặc thêm dòng này trong ~/emacs tập tin của bạn:

(desktop-save-mode 1) 
+3

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

+1

Emacs .. Tôi thích nó. :-) – Jack

2

bạn có thể mở tập tin trong tập tin emacs của bạn bằng cách sử dụng các chức năng sau:

(tìm tập tin "/ home/me/path-to-file")

+1

Theo giải pháp của bạn, người hỏi nên gõ vào dấu chấm của mình tên tệp được mở gần đây mỗi lần. Không thực sự hứa hẹn. –

+1

Anh ấy thực tế viết những điều sau đây "... mở cùng một tệp chính xác mà tôi đã mở một ngày trước ...". Nếu anh ta mở cùng một tệp thì các mục nhập đó sẽ không thay đổi nhiều. Bạn không đồng ý – paweloque

+2

@Lewap: OP là một phụ nữ. Cô ấy không phải anh ta. Cẩn thận với các giả định. – Telemachus

10

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

(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 thấy rằng bạn thường xuyên chuyển đổi qua lại giữa các bộ khác nhau của các tệp được sử dụng thường xuyên khi bạn làm việc, hãy xem xét sử dụng perspectives và điền vào từng quan điểm với tập hợp các tệp được sử dụng thường xuyên mong muốn.

2

Có những cải tiến hữu ích mà bạn có thể thực hiện cho tính năng cơ bản của máy tính để bàn. Đặc biệt tiện dụng (IMO) là phương pháp tự động lưu máy tính để bàn trong phiên, nếu không, nếu hệ thống của bạn gặp sự cố, bạn sẽ bị kẹt với tệp trên 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 giữ cho Emac chạy nhiều ngày tại một thời điểm.

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

Các wiki cũng có thông tin hữu ích về sự bền bỉ dữ liệu 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 nhìn đặc biệt hứa hẹn, tuy nhiên tôi đã chưa đã thử nó.

0

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

EDIT Lệnh này là 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 định vị con trỏ sau dấu ngoặc đơn cuối cùng và nhấn C-x C-e

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

+1

Tôi đã không downvote, nhưng có lẽ câu trả lời của bạn đã được downvoted 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 đó. –

5

Để lưu trữ/khôi phục bộ đệm/tab (cụ thể tab màn hình): Tôi sử dụng elscreen và cách tôi quản lý lưu trữ/khôi phục phiên máy tính và cấu hình tab elscreen là mã sau trong tệp .emacs của tôi tên được sử dụng là 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 hiện mỗi khi các emac bắt đầu chỉ nhận xét các dòng bằng "(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) 
Các vấn đề liên quan