我正在升级到emacs23。我发现我的emacs.el加载速度要慢得多。
这真是我自己的错......我在那里有很多东西。
所以我也尝试自动加载我的emacs.el当前“必需”的所有可能内容。
我有一个模块,可以公开12个入口点 - 我可以调用的交互式功能。
正确的方法是对autoload
进行12次调用,以确保无论我调用哪个函数都加载了模块?这种方法有什么问题吗?它会出现性能问题吗?
如果不是那方法,那又怎样?
答案 0 :(得分:22)
您真正想要的是自动为您生成自动加载,以便您的.emacs文件保持原始状态。大多数软件包已经包含;;;###autoload
行,如果没有,您可以轻松添加它们。
要对此进行管理,您可以将所有包放在一个目录中,比如~/emacs/lisp
,并且其中包含一个名为update-auto-loads.el
的文件,其中包含:
;; put this path into the load-path automatically
;;;###autoload
(progn
(setq load-path (cons (file-name-directory load-file-name) load-path)))
;;;###autoload
(defun update-autoloads-in-package-area (&optional file)
"Update autoloads for files in the diretory containing this file."
(interactive)
(let ((base (file-truename
(file-name-directory
(symbol-file 'update-autoloads-in-package-area 'defun)))))
(require 'autoload) ;ironic, i know
(let ((generated-autoload-file (concat base "loaddefs.el")))
(when (not (file-exists-p generated-autoload-file))
(with-current-buffer (find-file-noselect generated-autoload-file)
(insert ";;") ;; create the file with non-zero size to appease autoload
(save-buffer)))
(cd base)
(if file
(update-file-autoloads file)
(update-autoloads-from-directories base)))))
;;;###autoload
(defun update-autoloads-for-file-in-package-area (file)
(interactive "f")
(update-autoloads-in-package-area file))
如果您向'update-autoloads-in-package-area
添加kill-emacs-hook
,则每次退出Emacs时都会自动更新loaddefs.el
。
并且,要将它们组合在一起,请将其添加到.emacs
:
(load-file "~/emacs/lisp/loaddefs.el")
现在,当您下载新软件包时,只需将其保存在~/emacs/lisp
目录中,通过M-x update-autoloads-in-package-area
更新loaddef(或退出emacs),它将在您下次运行时可用Emacs的。您的.emacs
无需更改即可加载内容。
有关加速Emacs启动的其他替代方法,请参阅此问题:How can I make Emacs start-up faster?
答案 1 :(得分:4)
嗯,谁在乎它开始的缓慢程度?
通过emacs --daemon &
启动它,然后使用
emacsclient -c /some/file.ext
或emacsclient -nw
我分别为emx
和emt
创建了这两个别名。继续一次编辑会议是如此安全......
答案 2 :(得分:4)
理想情况下,您的load
文件中不应包含任何require
或.emacs
。
e.g。
(autoload 'slime-selector "slime" t)
您需要使用eval-after-load
来执行任何特定于库的配置,但结果是您不需要等待所有这些都在前面加载,或者导致错误的Emacs版本出错具有相同的功能。 (例如基于终端,或不同的平台等)
虽然现在这可能不会对您产生影响,但是将来您可能希望在使用Emacs的所有机器/环境中使用相同的配置,因此准备好配置是一件非常好的事情。< / p>
同时使用(start-server)
并将外部文件打开到Emacs using emacsclient
- 这样就可以避免重启Emacs。