Если вы прочитали раздел руководства Emacs по "Как программы загружаются , файл js.elc должен быть загружен, если обычные команды загрузки библиотеки (например, -" требуют " "," autoload "," load-file "и т. д.). Некоторые действия для отладки:
- Имеет ли ваш ИД пользователя разрешения системы безопасности для доступа к файлу js.el в этом месте?
- Если вы наберете M-x emacs-version , какую версию Emacs вы используете?
- Команда «load-library» ищет файлы lisp в «пути загрузки». Когда вы проверяете содержимое вашего пути загрузки, находится ли в нем указанный каталог?
- Установите для переменной «debug-on-error» значение «t» и повторите попытку записи кода javascript на html-странице - при возникновении ошибки проверьте исходную строку, где произошла ошибка, и, если это не очевидно из что является причиной проблемы, опубликуйте обновление вашего вопроса с несколькими строками источника, где произошла ошибка, а также трассировкой стека, созданной Emacs.
РЕДАКТИРОВАТЬ: Хорошо, теперь, когда вы добавили трассировку стека, можно увидеть, почему происходит ошибка. Вот ключевые строки из функции «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» не находится в том же каталоге. Похоже, он раньше распространял js.el с помощью nXhtml, но прекратил это делать, поскольку теперь он поставляется с последними дистрибутивами Emacs. Таким образом, в его среде он, вероятно, имеет файлы «.el» в том же каталоге, что и файлы «.elc», и не сталкивался с этой проблемой. Так что, вероятно, вам следует сделать 2 вещи:
- Уведомить автора библиотеки nXhtml, чтобы он мог исправить ошибку в своем коде.
- Скопируйте необходимые исходные файлы ".el" в "/usr/share/emacs/23.2/lisp/progmodes/", чтобы вы не получили ошибку. В качестве альтернативы, вы можете переустановить js.el (и, возможно, некоторые другие модули) в другой каталог и поместить этот каталог перед "/usr/share/emacs/23.2/lisp/progmodes/" в вашем "пути загрузки" ,
Выполнение # 1 решит проблему в долгосрочной перспективе, а выполнение # 2 должно позволить вам использовать nXhtml в краткосрочной перспективе.