From 466a8c57cba79789f350d465a9043a275af8bb62 Mon Sep 17 00:00:00 2001 From: Frederik Vanrenterghem Date: Tue, 22 Oct 2024 07:35:59 +0800 Subject: [PATCH 1/1] Use Corfu and Cape instead of Company for completion. --- emacs/.emacs.d/init.el | 65 ++++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 18 deletions(-) diff --git a/emacs/.emacs.d/init.el b/emacs/.emacs.d/init.el index bc2dd2b..256c9b4 100644 --- a/emacs/.emacs.d/init.el +++ b/emacs/.emacs.d/init.el @@ -54,25 +54,54 @@ vc-follow-symlinks t (setq inferior-julia-program-name "/usr/bin/julia") ;; enable autocomplete -(use-package company +(use-package corfu :ensure t - :demand t ;; Needed to ensure global company-mode works. - :commands company-mode - :bind(:map company-active-map - ("" . nil) - ("RET" . nil) - ("C-" . company-complete-selection) - ([tab] . company-complete-common) - ("TAB" . company-complete-common)) - :config - (setq ispell-complete-word-dict - (expand-file-name (concat user-emacs-directory "aspell_words.txt"))) - ;(defun my/text-mode-hook () - ; (setq-local company-backends -; '((company-dabbrev company-ispell :separate) - ; company-files))) - ; (add-hook 'text-mode-hook #'my/text-mode-hook) - (global-company-mode 1)) + ;; Optional customizations + :custom + (corfu-cycle t) ;; Enable cycling for `corfu-next/previous' + (corfu-auto t) ;; Enable auto completion + ;; (corfu-separator ?\s) ;; Orderless field separator + ;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary + ;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match + ;; (corfu-preview-current nil) ;; Disable current candidate preview + ;; (corfu-preselect 'prompt) ;; Preselect the prompt + ;; (corfu-on-exact-match nil) ;; Configure handling of exact matches + ;; (corfu-scroll-margin 5) ;; Use scroll margin + + ;; Enable Corfu only for certain modes. See also `global-corfu-modes'. + ;; :hook ((prog-mode . corfu-mode) + ;; (shell-mode . corfu-mode) + ;; (eshell-mode . corfu-mode)) + + ;; Recommended: Enable Corfu globally. This is recommended since Dabbrev can + ;; be used globally (M-/). See also the customization variable + ;; `global-corfu-modes' to exclude certain modes. + :init + (global-corfu-mode) + (corfu-history-mode)) + +(use-package cape + :ensure t + ;; Bind prefix keymap providing all Cape commands under a mnemonic key. + ;; Press C-c p ? to for help. + :bind ("C-c p" . cape-prefix-map) ;; Alternative keys: M-p, M-+, ... + ;; Alternatively bind Cape commands individually. + ;; :bind (("C-c p d" . cape-dabbrev) + ;; ("C-c p h" . cape-history) + ;; ("C-c p f" . cape-file) + ;; ...) + :init + ;; Add to the global default value of `completion-at-point-functions' which is + ;; used by `completion-at-point'. The order of the functions matters, the + ;; first function returning a result wins. Note that the list of buffer-local + ;; completion functions takes precedence over the global list. + (add-hook 'completion-at-point-functions #'cape-dict) ;; requires words package to be installed on Arch to provide /usr/share/dict/words + (add-hook 'completion-at-point-functions #'cape-dabbrev) + (add-hook 'completion-at-point-functions #'cape-file) + (add-hook 'completion-at-point-functions #'cape-elisp-block) + ;; (add-hook 'completion-at-point-functions #'cape-history) + ;; ... + ) (use-package org :ensure t -- 2.39.5