是startup.el真的用过了



我在windows上,根据这个startup.el用于emacs的启动。但是当我在这个文件中设置代码时(在我的情况下是C:UsersfrountchProgsemacs24shareemacs24.3.50lispstartup.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.elstartup.elc仍然被删除)中,当I C-h f时,帮助窗口仍然显示

正常的顶层是"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

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

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

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

这不是Windows特有的。在这方面,Emacs在所有支持的操作系统上的行为都是一样的。

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

相关内容

  • 没有找到相关文章

最新更新