Switch to corfu over company
This commit is contained in:
parent
97df2a30a6
commit
38af445c33
81
config.org
81
config.org
|
@ -810,7 +810,7 @@ I'm a big fan of the Vertico ecosystem, as it's lightweight and easy to use. Let
|
|||
#+begin_src emacs-lisp
|
||||
:completion
|
||||
(vertico +icons)
|
||||
(company +childframe)
|
||||
(corfu +icons +orderless)
|
||||
#+end_src
|
||||
|
||||
** Checkers
|
||||
|
@ -1441,81 +1441,16 @@ Our ~package!~ declarations go in ~packages.el~, which must not be byte-compiled
|
|||
|
||||
Everything else goes in ~config.el~, which is managed by [[*=confpkg=][confpkg]] as outlined earlier.
|
||||
|
||||
** Company
|
||||
** Corfu
|
||||
|
||||
#+call: confpkg("Pkg: company")
|
||||
|
||||
*** Bindings
|
||||
|
||||
When Company is active, its keybindings overshadow the default ones, meaning keys like =RET= no longer work. To prevent this from happening, let's rebind ~company-complete-selection~ to =TAB= (less useful in the middle of typing), and only allow =RET= to be used if Company has been explicitly interacted with.
|
||||
#+call: confpkg("Pkg: corfu")
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(let ((item
|
||||
`(menu-item nil company-complete-selection
|
||||
:filter ,(lambda (cmd)
|
||||
(when (company-explicit-action-p)
|
||||
cmd)))))
|
||||
(map! :after company
|
||||
:map company-active-map
|
||||
"RET" item
|
||||
"<return>" item
|
||||
"TAB" #'company-complete-selection
|
||||
"<tab>" #'company-complete-selection
|
||||
"S-TAB" #'company-complete-common))
|
||||
#+end_src
|
||||
|
||||
*** Spell Correction
|
||||
|
||||
#+call: confpkg("Pkg: company-spell")
|
||||
|
||||
I've been having problems with ~company-ispell~, mainly due to Ispell requiring a text-based dictionary (unlike Aspell, which uses a binary dictionary). So let's switch to ~company-spell~:
|
||||
|
||||
#+begin_src emacs-lisp :tangle packages.el
|
||||
(package! company-spell)
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(after! company-spell
|
||||
(map! :map evil-insert-state-map
|
||||
"C-x s" #'company-spell))
|
||||
#+end_src
|
||||
|
||||
We should make sure that ~company-spell~ uses Ispell's personal dictionary too:
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(after! (company-spell ispell)
|
||||
(setq company-spell-args
|
||||
(concat company-spell-args " -p " ispell-personal-dictionary)))
|
||||
#+end_src
|
||||
|
||||
*** Icons
|
||||
|
||||
The ~company-box~ front-end adds support for icons, but there aren't many providers for them, especially in text. We'll add two new icon providers:
|
||||
|
||||
- ~~/company-box-icons--text~, which directly targets the output of ~company-spell~
|
||||
- ~~/company-box-icons--spell~, which is a fallback for all text completions
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
;; Mark candidates from `company-spell' using a text property
|
||||
(defadvice! ~/company-spell-text-property (words)
|
||||
:filter-return #'company-spell-lookup-words
|
||||
(dolist (word words)
|
||||
(put-text-property 0 1 'spell-completion-item t word))
|
||||
words)
|
||||
|
||||
(defun ~/company-box-icons--spell (candidate)
|
||||
(when (get-text-property 0 'spell-completion-item candidate)
|
||||
'Text))
|
||||
|
||||
(defun ~/company-box-icons--text (candidate)
|
||||
(when (derived-mode-p 'text-mode) 'Text))
|
||||
|
||||
(after! company-box
|
||||
(pushnew! company-box-icons-functions #'~/company-box-icons--text)
|
||||
;; `~/company-box-icons--text' is a fallback, so it has to go at the end of
|
||||
;; the list
|
||||
(setq company-box-icons-functions
|
||||
(append company-box-icons-functions '(~/company-box-icons--text))))
|
||||
(after! corfu
|
||||
;; I don't really use TAB very often, so prefer other actions
|
||||
(setq +corfu-want-tab-prefer-navigating-snippets t
|
||||
+corfu-want-tab-prefer-expand-snippets t
|
||||
+corfu-want-tab-prefer-navigating-org-tables t))
|
||||
#+end_src
|
||||
|
||||
** Eldoc
|
||||
|
|
Loading…
Reference in a new issue