Emacs - Компания: произошла ошибка в автозапуске Неверная функция
Я работаю в новой конфигурации GNU Emacs 24.3.1. Я хочу использовать emacs-eclim с компанией. Компания работает правильно, но если я открываю файл Java, он перестает работать правильно, выкрикивая это сообщение об ошибке:
Company: An error occurred in auto-begin
Invalid function: (java-mode javascript-mode js-mode ruby-mode php-mode c-mode c++-mode)
моя конфигурация Emacs:
(require 'iso-transl)
(require 'recentf)
(require 'recentf-ext)
(require 'eclim)
(require 'company-emacs-eclim)
(require 'eclimd)
и мои крючки:
(add-hook 'after-init-hook
(lambda ()
(iswitchb-mode)
(helm-mode 1)
(auto-indent-global-mode)
(toggle-diredp-find-file-reuse-dir 1)
(recentf-mode 1)
(global-flycheck-mode)
(auto-indent-global-mode)
(autopair-global-mode)
(projectile-global-mode)
(global-pretty-mode)
(global-eclim-mode)
(global-company-mode t)
(yas-global-mode 1)))
(add-hook 'java-mode-hook
(lambda ()
(company-emacs-eclim-setup)
(help-at-pt-set-timer)
))
Это пакеты, которые я установил через менеджер пакетов Emacs:
режим туза-прыжка, режим авто-отступа, автопара, компания, тире, dired+, emacs-eclim, epl, f, flycheck, fringe-helper, helm, helm-company, helm-flycheck, helm-projectile-all, hexrgb, java-snippets, javadoc-lookup, multi-term, множественные курсоры, pkg-info, powerline, симпатичный режим, метательный снаряд, RecentF-Ext, s, возвышенные темы, visual-regexp, visual-regexp-стероиды, и ясниппет.
Вот отладочная информация от Emacs:
Debugger entered--Lisp error: (invalid-function (java-mode javascript-mode js-mode ruby-mode php-mode c-mode c++-mode))
(java-mode javascript-mode js-mode ruby-mode php-mode c-mode c++-mode)(128)
eclim-completion-start()
(let ((start (eclim-completion-start))) (if start (progn (buffer-substring-no-properties start (point)))))
(cond ((eql command (quote interactive)) (company-begin-backend (quote company-emacs-eclim))) ((eql command (quote prefix)) (let ((start (eclim-completion-start))) (if start (progn (buffer-substring-no-properties start (point)))))) ((eql command (quote candidates)) (company-emacs-eclim--candidates arg)) ((eql command (quote annotation)) (company-emacs-eclim--annotation arg)) ((eql command (quote meta)) (eclim--completion-documentation (concat arg (company-emacs-eclim--annotation arg)))) ((eql command (quote no-cache)) (equal arg "")) ((eql command (quote ignore-case)) t) ((eql command (quote sorted)) t) ((eql command (quote post-completion)) (let ((ann (company-emacs-eclim--annotation arg))) (if ann (progn (insert ann))) (eclim--completion-action))))
company-emacs-eclim(prefix)
#[0 "\n\203 [LONG STRING THAT CANNOT BE COPY]
company--begin-new()
company-begin()
#[0 "\300 \207" [company-begin] 1 "\n\n(fn)"]()
company-auto-begin()
company-manual-begin()
company-complete-common()
call-interactively(company-complete-common record nil)
command-execute(company-complete-common record)
execute-extended-command(nil "company-complete-common")
call-interactively(execute-extended-command nil nil)
2 ответа
Мой хрустальный шар говорит, что вы врезались в case
выражение без загрузки cl
заранее. Если проблема в файле, скомпилированном байтами, вам придется перекомпилировать файл, в противном случае добавьте
(require 'cl)
где-то в начале ~/.emacs
файл может помочь.
M-x toggle-debug-on-error
, а затем спровоцируйте ошибку. Это даст вам обратную трассировку, показывающую не только сообщение об ошибке, но и то, какое выражение оценивалось при возникновении ошибки.
В этом случае некоторая функция ожидала функцию в качестве одного из аргументов, и вместо функции ей был передан список, который вы видите: (java-mode javascript-mode js-mode ruby-mode php-mode c-mode c++-mode)
,
Затем вы можете заглянуть глубже в обратный след, чтобы увидеть, как функции был передан этот аргумент списка, и так далее. Вы можете щелкнуть имя функции в (левой части) обратной трассировки, чтобы увидеть ее определение Lisp.