diff options
Diffstat (limited to '')
-rw-r--r-- | config/init-completion.el | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/config/init-completion.el b/config/init-completion.el new file mode 100644 index 0000000..5a3f785 --- /dev/null +++ b/config/init-completion.el @@ -0,0 +1,129 @@ +;;; init-completion.el --- Configure completion -*- lexical-binding: t -*- +;; Author: Franck Cuny <franck@fcuny.net> + +;;; Commentary: + +;; Configure completions + +;;; Code: + +(use-package consult + :ensure t + :bind (("C-c m" . consult-mode-command) + ("M-g o" . consult-org-heading) + ("C-x b" . consult-buffer) + ("C-x r b" . consult-bookmark) + ("C-x p b" . consult-project-buffer) + ("C-c i" . consult-imenu) + ("M-g e" . consult-compile-error) + ("M-g g" . consult-goto-line) + ("M-g M-g" . consult-goto-line) + ("M-g m" . consult-mark) + ("M-g k" . consult-global-mark))) + +(use-package corfu + :ensure t + :demand t + :bind (("M-/" . completion-at-point) + :map corfu-map + ("C-n" . corfu-next) + ("C-p" . corfu-previous) + ("<return>" . corfu-insert) + ("M-d" . corfu-info-documentation) + ("M-l" . corfu-info-location) + ("M-." . corfu-move-to-minibuffer)) + :custom + ;; Works with `indent-for-tab-command'. Make sure tab doesn't indent when you + ;; want to perform completion + (tab-always-indent 'complete) + (completion-cycle-threshold t) ; Always show candidates in menu + + (corfu-auto t) + (corfu-auto-prefix 2) + (corfu-auto-delay 0.25) + + (corfu-min-width 80) + (corfu-max-width corfu-min-width) ; Always have the same width + (corfu-cycle t) + + ;; `nil' means to ignore `corfu-separator' behavior, that is, use the older + ;; `corfu-quit-at-boundary' = nil behavior. Set this to separator if using + ;; `corfu-auto' = `t' workflow (in that case, make sure you also set up + ;; `corfu-separator' and a keybind for `corfu-insert-separator', which my + ;; configuration already has pre-prepared). Necessary for manual corfu usage with + ;; orderless, otherwise first component is ignored, unless `corfu-separator' + ;; is inserted. + (corfu-quit-at-boundary nil) + (corfu-separator ?\s) ; Use space + (corfu-quit-no-match 'separator) ; Don't quit if there is `corfu-separator' inserted + (corfu-preview-current 'insert) ; Preview first candidate. Insert on input if only one + (corfu-preselect-first t) ; Preselect first candidate? + + ;; Other + (corfu-echo-documentation nil) ; Already use corfu-popupinfo + + :init + ;; see https://github.com/minad/corfu#completing-in-the-eshell-or-shell + (add-hook 'eshell-mode-hook + (lambda () + (setq-local corfu-auto nil) + (corfu-mode))) + :config + (global-corfu-mode)) + +(use-package corfu-popupinfo + :after corfu + :hook (corfu-mode . corfu-popupinfo-mode) + :bind (:map corfu-map + ("M-n" . corfu-popupinfo-scroll-up) + ("M-p" . corfu-popupinfo-scroll-down) + ([remap corfu-show-documentation] . corfu-popupinfo-toggle)) + :custom + (corfu-popupinfo-delay 0.5) + (corfu-popupinfo-max-width 70) + (corfu-popupinfo-max-height 20) + ;; Also here to be extra-safe that this is set when `corfu-popupinfo' is + ;; loaded. I do not want documentation shown in both the echo area and in + ;; the `corfu-popupinfo' popup. + (corfu-echo-documentation nil)) + +(use-package cape + :demand t + :ensure t + :bind (("C-c . p" . completion-at-point) + ("C-c . h" . cape-history) + ("C-c . f" . cape-file) + ("C-c . a" . cape-abbrev) + ("C-c . l" . cape-line) + ("C-c . w" . cape-dict) + ("C-c . r" . cape-rfc1345)) + :init + ;; Add `completion-at-point-functions', used by `completion-at-point'. + (add-to-list 'completion-at-point-functions #'cape-file) + (add-to-list 'completion-at-point-functions #'cape-abbrev)) + +(use-package marginalia + :ensure t + ;; Either bind `marginalia-cycle' globally or only in the minibuffer + :bind (:map minibuffer-local-map + ("M-A" . marginalia-cycle)) + :init + ;; Must be in the :init section of use-package such that the mode gets + ;; enabled right away. Note that this forces loading the package. + (marginalia-mode)) + +(use-package orderless + :demand t + :ensure t + :custom + (completion-styles '(orderless basic)) + (completion-category-defaults nil)) + +(use-package vertico + :ensure t + :config + (vertico-mode)) + +(provide 'init-completion) + +;;; init-completion.el ends here |