The :company
keyword allows adding
company backends triggered
by hooks. Only the basename of the hook is required. The following are equivalent:
(use-package company-jedi
:company python-mode)
(use-package company-jedi
:company (python-mode . company-jedi))
(use-package company-jedi
:commands company-jedi
:init
(defun use-package-company-add-company-jedi ()
(unless (member 'company-jedi company-backends)
(add-to-list 'company-backends 'company-jedi)))
(add-hook 'python-mode-hook #'use-package-company-add-company-jedi))
Or when use-package-company-with-yas
is set to a non-nil value,
(use-package company-jedi
:commands company-jedi
:init
(defun use-package-company-add-company-jedi ()
(let ((backend '(company-jedi :with company-yasnippet)))
(unless (member backend company-backends)
(add-to-list 'company-backends backend))))
(add-hook 'python-mode-hook #'use-package-company-add-company-jedi))
With multiple hooks, the following are also equivalent:
(use-package company-jedi
:company (python-mode other-mode)
(use-package company-jedi
:company ((python-mode other-mode) . company-jedi))
(use-package company-jedi
:company ((python-mode . company-jedi)
(other-mode . company-jedi)))
(use-package company-jedi
:commands company-jedi
:init
(defun use-package-company-add-company-jedi ()
(unless (member 'company-jedi company-backends)
(add-to-list 'company-backends 'company-jedi)))
(add-hook 'python-mode-hook #'use-package-company-add-company-jedi))
(add-hook 'other-mode-hook #'use-package-company-add-company-jedi))
The use of :company
causes the functions being hooked to implicitly be read
as :commands
, meaning interactive autoload
definitions will be established for the
module, if not already defined as functions. In this case, :defer t
is implied.