Contents
在下一次打开 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 删除之后就没有这 个情况了。看来这个扩展还需要继续发展呢。