;;; completion/company/config.el -*- lexical-binding: t; -*- (def-setting! :company-backend (modes &rest backends) "Prepends BACKENDS to `company-backends' in major MODES. MODES should be one major-mode symbol or a list of them." `(progn ,@(cl-loop for mode in (doom-enlist (doom-unquote modes)) for def-name = (intern (format "doom--init-company-%s" mode)) collect `(defun ,def-name () (when (and (eq major-mode ',mode) ,(not (eq backends '(nil)))) (require 'company) (make-variable-buffer-local 'company-backends) (dolist (backend (list ,@(reverse backends))) (cl-pushnew backend company-backends :test #'equal)))) collect `(add-hook! ,mode #',def-name)))) ;; ;; Packages ;; (def-package! company :commands (company-mode global-company-mode company-complete company-complete-common company-manual-begin company-grab-line) :config (setq company-idle-delay nil company-tooltip-limit 14 company-dabbrev-downcase nil company-dabbrev-ignore-case nil company-dabbrev-code-other-buffers t company-tooltip-align-annotations t company-require-match 'never company-global-modes '(not eshell-mode comint-mode erc-mode message-mode help-mode gud-mode) company-frontends '(company-pseudo-tooltip-frontend company-echo-metadata-frontend) company-backends '(company-capf company-dabbrev company-ispell company-yasnippet) company-transformers '(company-sort-by-occurrence)) (global-company-mode +1)) (when (featurep! +auto) (require 'company) (setq company-idle-delay 0.2)) (def-package! company-statistics :after company :config (setq company-statistics-file (concat doom-cache-dir "company-stats-cache.el")) (quiet! (company-statistics-mode +1))) ;; Looks ugly on OSX without emacs-mac build (def-package! company-quickhelp :after company :config (setq company-quickhelp-delay nil) (company-quickhelp-mode +1)) (def-package! company-dict :commands company-dict :config (defun +company|enable-project-dicts (mode &rest _) "Enable per-project dictionaries." (if (symbol-value mode) (cl-pushnew mode company-dict-minor-mode-list :test #'eq) (setq company-dict-minor-mode-list (delq mode company-dict-minor-mode-list)))) (add-hook 'doom-project-hook #'+company|enable-project-dicts)) ;; ;; Included with company.el ;; (autoload 'company-capf "company-capf") (autoload 'company-dabbrev "company-dabbrev") (autoload 'company-dabbrev-code "company-dabbrev-code") (autoload 'company-elisp "company-elisp") (autoload 'company-etags "company-etags") (autoload 'company-files "company-files") (autoload 'company-gtags "company-gtags") (autoload 'company-ispell "company-ispell") (autoload 'company-yasnippet "company-yasnippet")