emacs23/elisp:如何正确自动加载此库?

emacs23/elisp:如何正确自动加载此库?,emacs,autoload,Emacs,Autoload,我正在升级到emacs23。我发现emacs.el的加载速度要慢得多 这是我自己的错真的。。。我有很多东西在里面 因此,我也在尝试自动加载emacs.el当前“需要”的所有内容 我有一个模块,公开了12个入口点——我可以调用的交互功能 正确的方法是调用12次自动加载,以确保无论我调用哪个函数都加载模块?这种方法有什么问题吗?它会带来性能问题吗 如果不是这样,那又怎样 好吧,谁在乎它开始有多慢 通过emacs--daemon&启动它,然后使用 emacsclient-c/some/file.ex

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

这是我自己的错真的。。。我有很多东西在里面

因此,我也在尝试自动加载emacs.el当前“需要”的所有内容

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

正确的方法是调用12次
自动加载
,以确保无论我调用哪个函数都加载模块?这种方法有什么问题吗?它会带来性能问题吗


如果不是这样,那又怎样

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

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

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

我为这两个项目分别创建了别名
emx
emt
。继续编辑一次会话是非常明智的…

理想情况下,您的
.emacs
文件中不应该有任何
加载
要求

你应该

e、 g

您需要使用
eval after load
来执行任何特定于库的配置,但结果是,您不需要等待所有这些都提前加载,也不需要在没有相同功能的Emacs版本上导致错误。(例如,基于终端或不同平台等)

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


还可以使用
(启动服务器)
将外部文件打开到-中,以避免重新启动Emacs。

您真正想要的是自动生成自动加载,以便.Emacs文件保持原始状态。大多数软件包都有
###自动加载其中的
行,如果没有,您可以轻松添加它们

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

;;将此路径自动放入加载路径
;;;###自动加载
(项目
(setq加载路径(cons(文件名目录加载文件名)加载路径)))
;;;###自动加载
(在程序包区域中取消更新自动加载(&可选文件)
“为包含此文件的目录中的文件更新自动加载。”
(互动)
(让((基本)(文件名)
(文件名目录)
(符号文件“更新包区域中的自动加载”defun()()))
(需要“自动加载”);我知道这很讽刺
(let((生成的自动加载文件(concat base“loaddefs.el”))
(何时(不是(file-exists-p生成的自动加载文件))
(使用当前缓冲区(查找文件noselect生成的自动加载文件)
(插入“;”;;创建大小不为零的文件以缓解自动加载
(保存缓冲区)
(光盘库)
(如果文件
(更新文件自动加载文件)
(从目录库(()()))更新自动加载)
;;;###自动加载
(为包区域(文件)中的文件定义更新自动加载)
(交互式“f”)
(更新包区域文件中的自动加载))
如果将
'update-autoloads-in-package-area
添加到
kill emacs hook
,则每次退出emacs时,
loaddefs.el
都会自动更新

并且,为了将所有这些联系在一起,请将其添加到您的
.emacs

(加载文件“~/emacs/lisp/loaddefs.el”)
现在,当您下载一个新包时,只需将其保存在
~/emacs/lisp
目录中,通过
M-x update autoloads in package area
(或退出emacs)更新loaddefs,它将在您下次运行emacs时可用。不再对
.emacs
进行任何更改以加载内容


有关加速Emacs启动的其他替代方法,请参见此问题:

手动将
自动加载添加到.Emacs中很讨厌,您必须不断更新您的.Emacs,当包更改接口时,您必须毫无理由地修复您的.Emacs。@SamB您是什么意思,这个网页(答案)语法颜色是否正确?或者代码在Emacs中被错误地突出显示(表明可能存在语法错误)?或者…@Trey:这一页。不幸的是,有一种方法可以指定代码所使用的语言,但它至少可能被困在一个“`@SamB Gotcha,是的,lisp的颜色太棒了,但我想我已经习惯了。嗯,你知道,如果它可以用于多个目录,那就更好了。然后我可以将它用于我的
graildistelisp
graillocalelisp
dirs。(并不是说我在Emacs配置文件中有任何内容,我现在正在尝试使用它,但是如果我有,我可能会想自动加载它…@SamB如果需要,您可以泛化该例程,只需在外部
let
语句周围添加一个循环,并对其进行设置,以便将
base
设置为各个目录。另外,听起来你想让它进入一个普通的
loaddefs.el
文件,这意味着要把它从整个循环中拉出来(并找出你想要它的位置)。如果
-a
选项启动
emacs--daemon
,如果它还没有运行的话,总是一个好主意,
emacs--help
for me不显示
-a
选项。它应该做什么?如果emacs服务器不运行,它将自动启动。请参阅EmacClient--help.Ack,谢谢。在这方面,斯洛莫霍当然是正确的。我倾向于先启动
emacs--daemon
,但这对我来说不是什么问题。另外,如果守护进程死亡,很高兴知道这一点。使用
-a
您可以悄悄地开始一个新的。
(autoload 'slime-selector "slime" t)