cireu
1
前因:[Feature Request]: Add recipe to start a minimal environment for convenience of bug-reporting and testing · Issue #592 · emacs-lsp/lsp-mode · GitHub
我在emacs的stackexchange看到的答案基本都是 这样 或这样 让你设置load-suffixes
。
但是这样有一个问题,Emacs内部package的el文件都是经过gz压缩的。如果直接把.elc
去掉就会导致他们无法加载,然后报出以下错误
insert-file-contents: Recursive load: "/usr/share/emacs/26.1/lisp/jka-compr.el.gz", "/usr/share/emacs/26.1/lisp/jka-compr.el.gz", "/usr/share/emacs/26.1/lisp/jka-compr.el.gz", "/usr/share/emacs/26.1/lisp/jka-compr.el.gz", "/usr/share/emacs/26.1/lisp/jka-compr.el.gz", "/usr/share/emacs/26.1/lisp/emacs-lisp/warnings.el.gz
那么问题来了,如何强制Emacs对于外部package强制加载el而不影响内部的包呢
本来就是的呀
我有一个外部的mixal-mode.el 内部也有一个mixal-mode.el.gz
他加载的是外部的
Add recipe to start a minimal environment for convenience of bug-reporting and testing
…
(let ((default-directory (file-name-as-directory package-dir)))
(push default-directory load-path)
(normal-top-level-add-subdirs-to-load-path))
这个想法不错;我更喜欢 Magit 的 M-x magit-emacs-Q-command
:
这个问题不应该解决。
ELC 文件更快,如果你的 ELC 文件过期了,就应该重新编译以更新 ELC 文件。Emacs 还有个 load-prefer-newer
,把它改成 t
Emacs 就会哪个更新就加载哪个,但我不推荐修改它——ELC 文件更快。
cireu
4
elc文件backtrace不可读,所以希望尽量加载el文件。
emacs内部package倒是无所谓
你的意思是可读性差一些吧?我没有多少跟 Backtrace 打交道的经验,不清楚这会是个问题。
如果你只需要加载一个文件的话,可以试试 load
的 NOSUFFIX
:
(load "foo.el" nil nil t)
cireu
6
会差不少,不过我一时间还没有什么有力的例子来证明。
我其实也是这么想的。不过lsp-mode的依赖比较重。yyoncho觉得一个个手动加载会比较蠢。
Magit这个也不错,不过我我发现用(setq no-byte-compile t)
可以让package.el
装包时不自动编译。
最后搞了这么一个东西。用package.el
手动下载lsp-mode全家桶到一个临时文件夹
然后启动测试。关Emacs直接全部删掉。
也有可能你们走得太远了、考虑的太多了,既然可读性差没有好的解决办法,那就不去解决,也不至于要避免 Byte Compiler。
印象中 Backtrace 遇到 Byte Compiled 的函数,如果看不清楚,我会跑到这个函数的源码,用 C-M-x (eval-defun
) 重新执行它一遍,然后重现 Bug,这样 Backtrace 就没有 Byte Compiled 的信息了。
不明白为啥要删除elc,这个本身就是为了效率而编译的,而且完全没有影响backtrace,除非全是lambda函数。