LINUX.ORG.RU

.emacs: company-mode и company-clang

 ,


0

2

Не могу понять, как правильно готовить `company-mode`. Включаю минорный company-mode для prog-mode вот так...

(add-hook 'prog-mode-hook
          (lambda ()
            (company-mode 1)))

Хочу включить бекэнд company-clang для c-mode.

Почему так работает:

(add-hook 'c-mode-hook
          (lambda ()
            (set (make-local-variable 'company-backends) '(company-clang))))

а так не работает:

(add-hook 'c-mode-hook
          (lambda ()
            (add-to-list 'company-backends 'company-clang)))

И еще. Как сделать, чтобы общие бекэнды включались для всех prog-mode (типа company-yasnippet), а специфичные только для буфферов c-mode, python-mode и т.д., и чтобы специфичные были приоритетнее общих?



Последнее исправление: trupanka (всего исправлений: 1)

чтобы специфичные были приоритетнее общих?

Никак, хуки содержат просто список всех функций, которые будут по порядку вызваны в нужном буфере. Для специфичных c-mode, python-mode и т.д. нужно делать remove-hook для хуков, что мешают.

iVS ★★★★★
()
Ответ на: комментарий от feofan

Да похоже company-clang какой-то «особенный». Включается у меня только так.

(add-hook 'c-mode-hook
          (lambda ()
            (set (make-local-variable 'company-backends) '(company-clang))))
А мне это не нравится, потому что перезаписываются бекэнды, которые я указал для `prog-mode`.

Хотя другие бекэнды включаются нормально и вот так:

(add-hook 'python-mode-hook
          (lambda ()
            (add-to-list 'company-backends 'company-jedi)))

trupanka
() автор топика
Ответ на: комментарий от feofan

`company-complete` вызываю (забинденный на TAB) и все работает, а если просто add-to-list делать на c-mode-hook, то фигвам.

trupanka
() автор топика
Ответ на: комментарий от trupanka

Да ладно. Только для c-mode такое, пропишу просто все бекэнды в локальную переменную 'company-backends. Дело даже не в company-clang, company-semantic тоже не работает с add-to-list в c-mode-hook.

trupanka
() автор топика
Ответ на: комментарий от trupanka

Там автоополнение от того же clang. Только оно кеширует всё, поэтому работает быстрее, чем company-clang. Плюс добавляет информацию о типах, чего в company-clang нет.

feofan ★★★★★
()
Последнее исправление: feofan (всего исправлений: 1)
Ответ на: комментарий от feofan

О, спсб. Теперь все работает, как хочу. company-irony c add-to-list добавилось без проблем.

trupanka
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.