我最近开始使用django-html-mumamo-mode,它是emacs中nXhtml的一部分,一切似乎都有效,只是当我开始在html页面中编写javascript代码时,我收到警告/错误
Can't find library /usr/share/emacs/23.2/lisp/progmodes/js.el
我签入了该文件夹,所有文件都有.elc
扩展名,包括js.elc
,这可能是emacs无法找到的原因。我可以更改某些内容以使emacs只加载.elc
文件吗?
修改:如果我运行M-x load-library js
或M-x load-library js.elc
Edit2 :我已确认load-suffixes
设置为("el" "elc")
,而js.elc位于progmodes
文件夹中,该文件夹位于{{ 1}}并且所有用户都具有该文件的读取权限。我正在使用emacs版本23.2.1,当我将load-path
设置为debug-on-error
时,我得到了一个回溯,看起来以下部分包含错误:
t
值得注意的是,第三行包含对正确文件的引用,但最终会尝试加载错误的文件。有没有人见过这种事情或者有任何想法如何解决它?
答案 0 :(得分:9)
如果你阅读"How Programs Do Loading上的Emacs手册中的部分,如果正常的库加载命令(例如 - “require”,“autoload”),则应加载js.elc文件 ,“load-file”等正在使用中。调试这个的一些事情:
编辑:好的,既然你已经添加了堆栈跟踪,就可以看出错误发生的原因。以下是“find-function-search-for-symbol”函数的关键行(这是发生错误的函数):
(when (string-match "\\.el\\(c\\)\\'" library)
(setq library (substring library 0 (match-beginning 1))))
;; Strip extension from .emacs.el to make sure symbol is searched in
;; .emacs too.
(when (string-match "\\.emacs\\(.el\\)" library)
(setq library (substring library 0 (match-beginning 1))))
(let* ((filename (find-library-name library))
在第2行中,该函数将库名设置为等于“* .elc”库名减去“c”(例如,它将其转换为“/usr/share/emacs/23.2/lisp/progmodes/ js.elc“to”/usr/share/emacs/23.2/lisp/progmodes/js.el“。然后,在上面代码的第7行中,它试图找到该源成员(并且因为它没有失败)进一步观察堆栈跟踪,关键是:
(if (get fun (quote mumamo-evaled)) nil (let* (... ... ... ...) (with-current-buffer buf ...) (put fun ... t)))
在nXhtml“mumamo-funcall-evaled”函数中调用。 nXhtml的作者显然没有考虑“.elc”文件可能存在,但“。el”不在同一目录中。看起来他曾经用nXhtml分发js.el但是因为它现在附带了最新的Emacs发行版而停止这样做了。因此,在他的环境中,他可能将“.el”文件放在与“.elc”文件相同的目录中,并且没有遇到过这个问题。所以,你应该做两件事:
做#1会在长期内解决问题,而做#2应该让你在短期内使用nXhtml。
答案 1 :(得分:1)
检查load-suffixes
C-h v load-suffixes
。您可能希望这类似(".elc" ".el")
。如果确保你的模式没有将它设置为奇怪的东西,或者动态绑定它。