一 desktop.el
场景恢复,基本功能之一就是打开那些上一次你曾经打开过的文。这个功能也是最常用的。desktop.el插件能为Emacs实现该功能:
desktop.el 下载地址:
http://repo.or.cz/w/emacs.git/blob/HEAD:/lisp/desktop.el
desktop.el 相关的说明:
http://www.emacswiki.org/emacs/DeskTop
实质上我们无需额外安装这个插件,因为新版的Emacs已经自带了这个插件。其官方配置方式在上面第二个URL所链接的页面有说明。简单来说,官方的配置方式就是:
在“.emacs”文件中加入:(desktop-save-mode 1) 即可。
我在使用这个简单官方配置时,发现了两个问题
1 无论我在那里打开Emacs,她总是会打开上一次最后显示在编辑界面的那个文件。尽管我当前目录在另一个不同的工程中。
2 每次关闭Emacs时,她都提示是否要保存桌面信息。我想让她智能化的自动保存。
于是,我在.emacs文件中修改了(desktop-save-mode 1)这个设置,改成如下这样:
(when (file-exists-p "./.emacs.desktop")
(desktop-change-dir "./")
(desktop-release-lock "./")
(desktop-save-mode 1))
“.eamcs.desktop”就是桌面信息文件。这个设置的功能就是:检查当前目录是否有桌面信息文件。如果有则把当前目录设置为桌面目录( 默认是"~"); desktop-change-dir是用来设置桌面路径的;desktop-release-lock是用来解开互斥锁的,因为desktop.el原来的设计是全局性的(即多个工程共用信息文件,所以要有一个输入互斥)。desktop-save-mode可以用来设置自动保存desktop信息。
因desktop-change-dir本身有读入桌面信息文件的功能,因为该函数最后调用了desktop-read。下面是desktop-change-dir的完整代码:
;; ----------------------------------------------------------------------------
;;;###autoload
(defun desktop-change-dir (dirname)
"Change to desktop saved in DIRNAME.
Kill the desktop as specified by variables `desktop-save-mode' and
`desktop-save', then clear the desktop and load the desktop file in
directory DIRNAME."
(interactive "DChange to directory: ")
(setq dirname (file-name-as-directory (expand-file-name dirname desktop-dirname)))
(desktop-kill)
(desktop-clear)
(desktop-read dirname))
(desktop-release-lock "./")的实质作用是删除当前目录的".emacs.desktop.lock"文件.因desktop.el的互斥信息实质放在一个名为".emacs.desktop.lock"的文件中。
使用上面这个设置方法时,第一次生成desktop信息,是要自己手动完成的。用 M-x desktop-save-mode 然后指定目录即可。
好,暂时写到这里。希望本文能确实帮上忙。