startup.el真的用过吗?

时间:2014-04-16 08:21:00

标签: emacs config

我在Windows上,根据this startup.el在emacs启动时使用。但是,当我在此文件中设置代码(在我的情况下为C:\Users\frountch\Progs\emacs24\share\emacs\24.3.50\lisp\startup.el时,删除.elc文件后),它不会被执行。

例如,我更改了defun normal-top-level

(defun normal-top-level ()
  "Emacs calls this function when it first starts up.
It sets `command-line-processed', processes the command-line,
reads the initialization files, etc.
It is the default value of the variable `top-level'."

  (if command-line-processed
      (message "Back to top level.")

(devar myload (load-path))
(devar myload2 nil)
(defun normal-top-level ()
  "fuuuuuuu"
  (setq myload2 (load-path))
  (if command-line-processed
      (message "Back to top level.")

之后,myloadmyload2未定义。

更糟糕的是,如果我删除startup.elstartup.elc,仍然可以启动emacs!

startup.el真的用过吗?我怎么检查呢?

如果我定义

(defun normal-top-level ()
"fuuuuu"
  (message "fuuu"
  )
  )
startup.el中的

startup.elc仍被删除),当我C-h f时,帮助窗口仍会显示

  

normal-top-level是`startup.el'。

中编译的Lisp函数      

(正顶级)

     

Emacs首次启动时会调用此函数。它设定   command-line-processed', processes the command-line, reads the initialization files, etc. It is the default value of the variable 顶层'

但是当我点击'startup.el'.时,它会打开我的defun(与fuuu)!?

这是Win $特定问题吗?启动真的在二进制文件中吗?

版本是24.3.50.1

1 个答案:

答案 0 :(得分:3)

startup.el未在标准Emacs二进制文件中使用。请注意,Startup Summary不建议这样做。它没有说源库startup.el实际上是在启动时加载的。它只是声明在startup.el中定义的函数在启动时被调用。

startup.el是在编译期间“转储”到Emacs二进制文件中的基本核心库之一,以减少启动时间并提高性能。因此,编译的Emacs二进制文件不会加载源库startup.el,而是从Emacs二进制文件的数据部分读取其编译的字节代码。

然而,startup.el 中的代码是Emacs二进制文件的一部分,并在启动时进行评估。虽然您无法通过修改预编译的Emacs发行版中的startup.el来直接检查此问题,但您可以通过阅读Emacs的源代码或使用修补后的startup.el从源代码构建Emacs来轻松验证这一点。< / p>

这不是Windows特有的。在这方面,Emacs在所有支持的操作系统上表现相同。

请注意,startup.el不应由用户修改。使用~/.emacs.d/init.el配置和自定义您的Emacs。