Компания Backend в GNU Emacs

В Emacs я установил пакет MELPA company-irony-c-header. Затем я сделал некоторые исследования в Интернете и, видимо, для того, чтобы настроить пакет, что я понял, чтобы "активировать" его, мне пришлось добавить это:

(defun company-my-backend (command &optional arg &rest ignored)
  (interactive (list 'interactive))
  (case command
    (interactive (company-begin-backend 'company-my-backend))
    (prefix (when (looking-back "foo\\>") (match-string 0)))
    (candidates (when (equal arg "foo") (list "foobar" "foobaz" "foobarbaz")))
    (meta (format "This value is named %s" arg))))

во что-то, называемое back-end "(с foo для любого моего имени файла). Я абсолютно не знаю, что такое back-end, или как его использовать. Любая помощь будет принята с благодарностью.

Ответ 1

A/Из официальный документ,

Компания - это основа для создания текста для Emacs. Название означает "все что-нибудь". Он использует подключаемые back-end и front-end к извлекать и отображать кандидатов на завершение.

Это означает, что "back-end" - это источники информации (парсер, база данных...), используемая компанией для предложения завершения.

В качестве примера, для работы C/С++ я использую отличный RTags. Добавление этого back-end для компании выполняется благодаря:

(push 'company-rtags company-backends)

B/Теперь для вашей проблемы минимальный рабочий пример рабочих групп c-заголовков:

(package-initialize)

(require 'company)
(require 'company-c-headers)

(add-to-list 'company-backends 'company-c-headers)

;; system dirs (for include <...>)
(add-to-list 'company-c-headers-path-system "/usr/include/c++/6")
;; (add-to-list 'company-c-headers-path-system "ANOTHER_SYSTEM_DIR")
;; -> use "gcc -E -Wp,-v -" to get the complete list

;; You can also define (for include "...")
;;(add-to-list 'company-c-headers-path-user "/home/YOUR_PROJECT")

(add-hook 'c++-mode-hook 'company-mode)
(add-hook 'c-mode-hook 'company-mode)

Сохраните этот файл test_init.el и запустите emacs с помощью

emacs -q --load "testing_init.el" your_prog.cpp

Теперь, если вы наберете

 #include<...

в файле your_prog.cpp компания должна запустить автоматическое завершение после третьего введенного char.

Существует множество хороших учебных пособий для настройки Emacs как редактора С++. Если подумать этот является хорошей отправной точкой.