Emacs:在启动时重新打开上次会话的缓冲区?

时间:2009-04-29 19:09:27

标签: emacs

每天我启动emacs并打开前一天打开的完全相同的文件。有什么东西可以添加到init.el文件中,这样它会重新打开我上次退出emacs时使用的所有缓冲区吗?

6 个答案:

答案 0 :(得分:103)

您可以使用Emacs Desktop library

  

您可以手动保存桌面   命令M-x desktop-save。您可以   还可以自动保存   退出Emacs时桌面,和   自动恢复最后一次   Emacs启动时保存的桌面:使用   自定义缓冲区(请参阅Easy   定制)来设置   桌面保存模式为未来   会话,或在您的。中添加此行   〜/ .emacs文件:

 (desktop-save-mode 1)

答案 1 :(得分:10)

虽然我怀疑问题是寻找emacs“桌面”功能(参见上面的答案),但如果一组文件使用的文件集完全相同,那么Lewap的方法会很有用。事实上,如果一个人有不同的常用文件集,可以更进一步定义“个人资料”......快速示例:

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

如果您发现在工作时经常在不同的常用文件集之间来回切换,请考虑使用perspectives并使用所需的常用文件集填充每个透视图。

答案 2 :(得分:5)

用于存储/恢​​复缓冲区/标签(特别是elscreen标签):我使用elscreen,我管理存储/恢复桌面会话的方式和elscreen标签配置是我的以下代码。 emacs文件(使用的名称是不言自明的,如果每次emacs启动时都不应执行存储/恢复功能,只需注释掉“(##elscreen-store kill-emacs-hook)”和“(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)

答案 3 :(得分:2)

您可以对基本桌面功能进行有用的增强。特别方便(IMO)是在会话期间自动保存桌面的方法,否则如果您的系统崩溃,您将无法使用已启动该会话的桌面文件 - 如果您倾向于让Emacs保持运行,那将非常烦人一次几天。

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

wiki还提供了有关在会话之间持久保存数据的有用信息:

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

对于台式机,我认为Desktop Recover看起来特别有希望,但我还没有尝试过。

答案 4 :(得分:1)

您可以使用以下函数打开.emacs文件中的文件:

(find-file“/ home / me / path-to-file”)

答案 5 :(得分:-1)

(find-file-noselect "/my/file")会默默地打开它,即不提高缓冲区。只是说。

编辑此命令 互动;要测试它,你必须评估表达式,例如将光标定位在最后一个括号之后并点击C-x C-e

低估这是不酷;这个命令肯定有效,并且在问题的范围内。