This contains fixes suggested by Henrik as feedback from the initial PR, including updating and correcting the Eshell module README, and few tweaks to the module configuration, and properly pinning eshell-did-you-mean.
135 lines
7 KiB
EmacsLisp
135 lines
7 KiB
EmacsLisp
;;; completion/company/config.el -*- lexical-binding: t; -*-
|
|
|
|
(use-package! company
|
|
:commands company-complete-common company-manual-begin company-grab-line
|
|
:after-call pre-command-hook after-find-file
|
|
:init
|
|
(setq company-idle-delay 0.25
|
|
company-minimum-prefix-length 2
|
|
company-tooltip-limit 14
|
|
company-tooltip-align-annotations t
|
|
company-require-match 'never
|
|
company-global-modes
|
|
'(not erc-mode message-mode help-mode gud-mode)
|
|
company-backends '(company-capf)
|
|
company-frontends '(company-pseudo-tooltip-frontend
|
|
company-echo-metadata-frontend))
|
|
:config
|
|
(when (featurep! :editor evil)
|
|
(add-hook 'company-mode-hook #'evil-normalize-keymaps)
|
|
(unless (featurep! +childframe)
|
|
;; Don't persist company popups when switching back to normal mode.
|
|
;; `company-box' aborts on mode switch so it doesn't need this.
|
|
(add-hook 'evil-normal-state-entry-hook #'company-abort))
|
|
;; Allow users to switch between backends on the fly. E.g. C-x C-s followed
|
|
;; by C-x C-n, will switch from `company-yasnippet' to
|
|
;; `company-dabbrev-code'.
|
|
(defadvice! +company--abort-previous-a (&rest _)
|
|
:before #'company-begin-backend
|
|
(company-abort)))
|
|
|
|
(add-hook 'after-change-major-mode-hook #'+company-init-backends-h 'append)
|
|
(global-company-mode +1))
|
|
|
|
|
|
(use-package! company-tng
|
|
:when (featurep! +tng)
|
|
:after-call post-self-insert-hook
|
|
:config
|
|
(add-to-list 'company-frontends 'company-tng-frontend)
|
|
(define-key! company-active-map
|
|
"RET" nil
|
|
[return] nil
|
|
"TAB" #'company-select-next
|
|
[tab] #'company-select-next
|
|
[backtab] #'company-select-previous))
|
|
|
|
|
|
;;
|
|
;; Packages
|
|
|
|
(after! company-files
|
|
(add-to-list 'company-files--regexps "file:\\(\\(?:\\.\\{1,2\\}/\\|~/\\|/\\)[^\]\n]*\\)"))
|
|
|
|
|
|
(use-package! company-prescient
|
|
:hook (company-mode . company-prescient-mode)
|
|
:config
|
|
;; NOTE prescient config duplicated with `ivy'
|
|
(setq prescient-save-file (concat doom-cache-dir "prescient-save.el"))
|
|
(prescient-persist-mode +1))
|
|
|
|
|
|
(use-package! company-box
|
|
:when (featurep! +childframe)
|
|
:hook (company-mode . company-box-mode)
|
|
:config
|
|
(setq company-box-show-single-candidate t
|
|
company-box-backends-colors nil
|
|
company-box-max-candidates 50
|
|
company-box-icons-alist 'company-box-icons-all-the-icons
|
|
company-box-icons-functions
|
|
(cons #'+company-box-icons--elisp-fn
|
|
(delq 'company-box-icons--elisp
|
|
company-box-icons-functions))
|
|
company-box-icons-all-the-icons
|
|
(let ((all-the-icons-scale-factor 0.8))
|
|
`((Unknown . ,(all-the-icons-material "find_in_page" :face 'all-the-icons-purple))
|
|
(Text . ,(all-the-icons-material "text_fields" :face 'all-the-icons-green))
|
|
(Method . ,(all-the-icons-material "functions" :face 'all-the-icons-red))
|
|
(Function . ,(all-the-icons-material "functions" :face 'all-the-icons-red))
|
|
(Constructor . ,(all-the-icons-material "functions" :face 'all-the-icons-red))
|
|
(Field . ,(all-the-icons-material "functions" :face 'all-the-icons-red))
|
|
(Variable . ,(all-the-icons-material "adjust" :face 'all-the-icons-blue))
|
|
(Class . ,(all-the-icons-material "class" :face 'all-the-icons-red))
|
|
(Interface . ,(all-the-icons-material "settings_input_component" :face 'all-the-icons-red))
|
|
(Module . ,(all-the-icons-material "view_module" :face 'all-the-icons-red))
|
|
(Property . ,(all-the-icons-material "settings" :face 'all-the-icons-red))
|
|
(Unit . ,(all-the-icons-material "straighten" :face 'all-the-icons-red))
|
|
(Value . ,(all-the-icons-material "filter_1" :face 'all-the-icons-red))
|
|
(Enum . ,(all-the-icons-material "plus_one" :face 'all-the-icons-red))
|
|
(Keyword . ,(all-the-icons-material "filter_center_focus" :face 'all-the-icons-red))
|
|
(Snippet . ,(all-the-icons-material "short_text" :face 'all-the-icons-red))
|
|
(Color . ,(all-the-icons-material "color_lens" :face 'all-the-icons-red))
|
|
(File . ,(all-the-icons-material "insert_drive_file" :face 'all-the-icons-red))
|
|
(Reference . ,(all-the-icons-material "collections_bookmark" :face 'all-the-icons-red))
|
|
(Folder . ,(all-the-icons-material "folder" :face 'all-the-icons-red))
|
|
(EnumMember . ,(all-the-icons-material "people" :face 'all-the-icons-red))
|
|
(Constant . ,(all-the-icons-material "pause_circle_filled" :face 'all-the-icons-red))
|
|
(Struct . ,(all-the-icons-material "streetview" :face 'all-the-icons-red))
|
|
(Event . ,(all-the-icons-material "event" :face 'all-the-icons-red))
|
|
(Operator . ,(all-the-icons-material "control_point" :face 'all-the-icons-red))
|
|
(TypeParameter . ,(all-the-icons-material "class" :face 'all-the-icons-red))
|
|
(Template . ,(all-the-icons-material "short_text" :face 'all-the-icons-green))
|
|
(ElispFunction . ,(all-the-icons-material "functions" :face 'all-the-icons-red))
|
|
(ElispVariable . ,(all-the-icons-material "check_circle" :face 'all-the-icons-blue))
|
|
(ElispFeature . ,(all-the-icons-material "stars" :face 'all-the-icons-orange))
|
|
(ElispFace . ,(all-the-icons-material "format_paint" :face 'all-the-icons-pink)))))
|
|
|
|
(defun +company-box-icons--elisp-fn (candidate)
|
|
(when (derived-mode-p 'emacs-lisp-mode)
|
|
(let ((sym (intern candidate)))
|
|
(cond ((fboundp sym) 'ElispFunction)
|
|
((boundp sym) 'ElispVariable)
|
|
((featurep sym) 'ElispFeature)
|
|
((facep sym) 'ElispFace)))))
|
|
|
|
(defadvice! +company-remove-scrollbar-a (orig-fn &rest args)
|
|
"This disables the company-box scrollbar, because:
|
|
https://github.com/sebastiencs/company-box/issues/44"
|
|
:around #'company-box--update-scrollbar
|
|
(cl-letf (((symbol-function #'display-buffer-in-side-window)
|
|
(symbol-function #'ignore)))
|
|
(apply orig-fn args))))
|
|
|
|
|
|
(use-package! company-dict
|
|
:defer t
|
|
:config
|
|
(setq company-dict-dir (expand-file-name "dicts" doom-private-dir))
|
|
(add-hook! 'doom-project-hook
|
|
(defun +company-enable-project-dicts-h (mode &rest _)
|
|
"Enable per-project dictionaries."
|
|
(if (symbol-value mode)
|
|
(add-to-list 'company-dict-minor-mode-list mode nil #'eq)
|
|
(setq company-dict-minor-mode-list (delq mode company-dict-minor-mode-list))))))
|