如果修改了el 源文件,怎么编译让它生效呢?

大家好,我具体问题是这样的: 我安装了cdlatex 包,但是默认的数学公式环境比较少,我想加一个进去。我知道可以在.emacs.d中设置。但是我想直接在cdlatex.el源文件中修改,问题是我如何才能让这个修改生效呢?要怎么编译呢? 我的环境是:ununtu 16.06 + emacs 27.0.50+texlive2018 谢谢大家。

(auto-compile-on-save-mode)

1 个赞

M-x eval-buffer Emacs lisp 是运行在解释器上的,编译也只是编译到字节码。

1 个赞

直接修改源文件很容易会给将来造成麻烦:

  • 包更新了怎么办?
  • 包重新安装了怎么办?
  • 出现 Bug 了是谁的问题?

要在当前的 Emacs 中生效的话,执行相应的顶层代码块即可。使用类似下面这样的命令:

  • C-x C-e (eval-last-sexp)
  • C-M-x (eval-defun)
  • M-x eval-buffer

注意如果修改的是 defvar / defcustom 的值,得用 C-M-x (eval-defun),其它的没有效果。

要在将来的 Emacs 中生效的话,可能什么也不用做,改完源文件重启就完了;也有可能需要生成一份新的 ELC 文件,这样的话可用 M-x byte-compile-file。让 Emacs 生效并不要求一定得编译。

4 个赞

谢谢,不过好像找不到这个命令??

谢谢您,问题解决了。您前面讲的也很有道理。学到不少东西,多谢!!!

我没说清楚,装一个auto-compile的包,每次保存就会自己编译。生效需要eval,我没看清楚主要是为了生效。。。

1 个赞

可以自己 fork 一份,然后 quelpa 指定安装自己的 fork。包更新的话就 rebase 一下就好了。

1 个赞

M-x byte-compile-file

1 个赞

不要直接修改源代码文件,很多方式可以改变源代码的行为:

  1. 如果是变量,直接修改
  2. 如果是函数,用 advice

也不要轻易 fork 一个项目,除非:

  1. 做好了长期维护的准备
  2. 为了提交 pr,暂时 fork
  3. 你的 pr 不被上游接受,但是你又非常需要这些功能,只能自己维护了。 (但如果只是少量更改,我也建议放弃维护 fork,把改动放到配置文件里,这样就可以比较轻松获得上游更新)
7 个赞