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

Emacs:在启动时重新打开上次会话中的缓冲区?,emacs,Emacs,每天我启动emacs并打开与前一天打开的文件完全相同的文件。是否可以将某些内容添加到init.el文件中,以便重新打开上次退出emacs时使用的所有缓冲区?您可以使用: 您可以使用手动保存桌面 命令M-x desktop save。你可以 还可以自动保存 退出Emacs时的桌面,以及 自动恢复最后一个 Emacs启动时保存的桌面:使用 自定义缓冲区(请参见“简单”) 自定义)设置 桌面保存模式为t,以备将来使用 会话,或将此行添加到 ~/.emacs文件: (desktop-save-mode

每天我启动emacs并打开与前一天打开的文件完全相同的文件。是否可以将某些内容添加到init.el文件中,以便重新打开上次退出emacs时使用的所有缓冲区?

您可以使用:

您可以使用手动保存桌面 命令M-x desktop save。你可以 还可以自动保存 退出Emacs时的桌面,以及 自动恢复最后一个 Emacs启动时保存的桌面:使用 自定义缓冲区(请参见“简单”) 自定义)设置 桌面保存模式为t,以备将来使用 会话,或将此行添加到 ~/.emacs文件:

 (desktop-save-mode 1)

尽管我怀疑问题是在寻找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.

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

你可以对基本桌面功能做出有用的改进。特别是handy(IMO)是在会话期间自动保存桌面的方法,否则,如果系统崩溃,您将无法使用启动会话时使用的桌面文件——如果您倾向于让Emacs一次运行很多天,这将非常恼人

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

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

(find file noselect)/my/file”)
将以静默方式打开它,即不提升缓冲区。只是说说而已

编辑此命令是交互式的;要测试它,您必须对表达式求值,例如,将光标定位在最后一个括号之后并点击C-xc-e


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

用于存储/恢复缓冲区/选项卡(特别是elscreen选项卡):我使用elscreen,我管理存储/恢复桌面会话和elscreen选项卡配置的方法是.emacs文件中的以下代码(使用的名称是不言自明的,如果不应在每次emacs启动时执行存储/还原功能,只需使用“(push#'elscreen-store kill emacs hook)”和“(elscreen restore)”注释掉行即可:


回答得很好。不过,我注意到Emacs在会话之间重新排列了缓冲区顺序。有没有办法始终保持相同的缓冲区顺序?如果有人在使其工作时遇到问题(就像我所做的那样),这里有一种技术可以诊断问题:通过执行
M-:
打开调试
(setq debug on error t)
,然后调用
desktop revert
,它可能会捕获调试器中的错误。对我来说,全局设置应该是缓冲区本地设置,导致帧恢复失败。(仅使用
emacs--debug init
也可能捕获问题,但我使用了前一种方法。)我没有投反对票,但也许你的答案被否决了,因为它没有解决如何专门打开在上一个Emacs会话中打开的缓冲区的问题。被否决了,因为它与原始Q无关。似乎在Emacs 21和22+中桌面处理是不同的。本页介绍了该主题:。另一个c桌面处理默认路径中的hange是24.3版本。对于任何走这条路线的人来说,这只是一个小问题,您可以将
emacs配置目录
替换为emacs已经提供的
用户emacs目录
(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)