首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >emacs23 / elisp:如何正确地自动加载这个库?

emacs23 / elisp:如何正确地自动加载这个库?
EN

Stack Overflow用户
提问于 2010-11-15 21:50:42
回答 3查看 2.7K关注 0票数 16

我正在升级到emacs23。我发现我的emacs.el加载要慢得多。

这是我的错真的..。我里面有很多东西。

因此,我也试图自动设置所有可能的东西,这是目前我的emacs.el所“需要的”。

我有一个模块,公开12个入口点-交互功能,我可以调用。

是否正确的方法是对autoload进行12次调用,以确保模块被加载,而不管我调用哪个函数?这种方法有什么问题吗?会否出现性能问题?

如果不是那种方法,那又怎样?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-15 23:13:50

您真正想要的是自动生成自动加载程序,这样您的.emacs文件就会保持原始状态。大多数包中已经包含了;;;###autoload行,如果没有,您可以轻松地添加它们。

要管理这一点,您可以将所有包放在一个目录中,比如~/emacs/lisp,其中有一个名为update-auto-loads.el的文件,其中包含:

代码语言:javascript
复制
;; 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

代码语言:javascript
复制
(load-file "~/emacs/lisp/loaddefs.el")

现在,当您下载一个新包时,只需将它保存在~/emacs/lisp目录中,通过M-x update-autoloads-in-package-area (或退出emacs)更新加载防御,下次运行Emacs时它就可用了。不再对.emacs进行更改来加载内容。

有关加速Emacs启动的其他替代方案,请参阅此问题:How can I make Emacs start-up faster?

票数 22
EN

Stack Overflow用户

发布于 2010-11-15 21:55:33

好吧,谁在乎它开始得有多慢?

通过emacs --daemon &启动它,然后使用

  • emacsclient -c /some/file.ext,or
  • emacsclient -nw

我分别为这两个名称创建了别名,如emxemt。继续一次编辑是非常明智的..。

票数 4
EN

Stack Overflow用户

发布于 2010-11-15 21:58:13

理想情况下,您不应该在您的load文件中有任何.emacsrequire

你应该是using autoload instead...

例如:

代码语言:javascript
复制
(autoload 'slime-selector "slime" t)

您将需要使用eval-after-load进行任何特定于库的配置,但结果是您不需要等待所有这些预先加载,或者在不具有相同功能的Emacs版本上造成错误。(例如,基于终端的,或不同的平台等)

虽然这现在可能不会影响到您,但将来您可能希望在所有使用Emacs的机器/环境中使用相同的配置,所以让您的配置准备就绪是一件非常好的事情。

还可以使用(start-server)并将外部文件打开到Emacs using emacsclient中,这样就避免了重新启动Emacs。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4189159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档