保存和恢复工作环境

在下一次打开 Emacs 的时候如果能够恢复上一次退出的时候打开的文件以及相关 的 local variables 、 输入历史以及 kill-ring 之类的东西是一个很不错的想 法。 下面几个包就是用来解决这个问题的。

用 desktop.el 保存桌面环境

desktop.el 是 Emacs 自带的包。他用来保存 Emacs 的``桌面环境'' — buffers 、以及 buffer 的文件名、 major modes 和位置等等,下一次 Emacs 启动的时候就会加载他们。

可以用 M-x desktop-save 来手动保存。或者在 ~/.emacs 里面加入:

以实现自动保存。每当 Emacs 启动的时候,它在当前目录查找一个已经保存的桌 面,所以你可以在不同的目录保存不同的桌面,启动的时候的``当前目录''就是 Emacs 加载桌面文件的目录。也可以用 M-x desktop-change-dir 保存当前桌面, 然后加载另外一个目录下的桌面文件。 M-x desktop-revert 可以推回到先前加 载的那个桌面。

可以在 Emacs 启动的时候使用 --no-desktop 选项禁止加载桌面。

默认情况下,所有的 buffers 都被一次加载起来。当有很多文件要加载的时候 可能会非常慢,不过你可以指定 desktop-restore-eager 变量来规定立即加载 的文件的最大数目,而剩下的文件会在 Emacs 空闲的时候慢慢加载。

如果你觉得当前桌面里面的东西太多了,可以用 M-x desktop-clear 来把桌面 清空一下。如果你想保留某些 buffer ,可以设定你 desktop-clear-preserve-buffers-regexp 变量来控制保留哪些 buffer ,这是 一个正则表达式,如果 buffer 的名字匹配了这个正则表达式,那么他将会被保 留下来。不过一个更好的办法是使用 ibuffer 来把不想要的 buffer 关掉再保 存桌面。

用 session.el 来保存相关变量

使用简介

session.el 可以保存很多东西,例如输入历史(像搜索、打开文件等的输入)、 register 的内容、 buffer 的 local variables 以及 kill-ring 和最近修改 的文件列表等。非常有用。

session.el 不是 Emacs 自带的,可以在 SourceForge 上找到最新版本。

把里面的 session.el 解压出来放到加载路径之后。在 ~/.emacs 里面加入:

就可以使用 session.el 提供的功能了。很多东西都被恢复过来,几乎就像从来 没有关闭过 Emacs 一样。而且它还在菜单栏里面添加了打开最近修改的文件的菜 单项。

注意事项

如果同时在使用 org-mode ,那么有可能造成退出的时候发生死循环而无法 退出 的情况,这是因为 org-mode 里面的 org-mark-ring 是一个循环结构,目前可 以通过在 session 设置不对他进行保存来解决这个问题:

但是这并不是一个解决办法,因为哪个包里面有循环变量这个是不能完全预料到 的,最根本的解决办法还是要从 session.el 本身下手。今天我就遇到了两个问 题,一个好像是由于 org-mode 里面的另外一个循环变量引起的,还有就是 AucTeX 有关的,也不知道是 AucTeX 的原因还是 session.el 的原因,导致 Emacs 一打开 TeX 文件立即断错误退出,我把 ~/.session 删除之后就没有这 个情况了。看来这个扩展还需要继续发展呢。