2024-09-20 12:18:47 +03:00
|
|
|
(use-package corfu
|
|
|
|
:custom
|
|
|
|
(corfu-cycle t) ;; Enable cycling for `corfu-next/previous'
|
|
|
|
(corfu-auto t) ;; Enable auto completion
|
|
|
|
;; (corfu-separator ?\s) ;; Orderless field separator
|
2024-10-12 21:19:24 +03:00
|
|
|
(corfu-quit-at-boundary nil) ;; Never quit at completion boundary
|
2024-09-20 12:18:47 +03:00
|
|
|
;; (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
|
|
|
|
;; (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))
|
|
|
|
;; Use Company backends as Capfs.
|
|
|
|
(setq-local completion-at-point-functions
|
|
|
|
(mapcar #'cape-company-to-capf
|
|
|
|
(list #'company-files #'company-keywords #'company-dabbrev)))
|
|
|
|
|
|
|
|
;; 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))
|
|
|
|
|
|
|
|
;; Add extensions
|
|
|
|
(use-package cape
|
|
|
|
: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-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)
|
|
|
|
;; ...
|
|
|
|
)
|
|
|
|
|
|
|
|
;; Example configuration for Consult
|
|
|
|
(use-package consult
|
|
|
|
;; Replace bindings. Lazily loaded by `use-package'.
|
|
|
|
|
|
|
|
;; Enable automatic preview at point in the *Completions* buffer. This is
|
|
|
|
;; relevant when you use the default completion UI.
|
|
|
|
:hook (completion-list-mode . consult-preview-at-point-mode)
|
|
|
|
|
|
|
|
;; The :init configuration is always executed (Not lazy)
|
|
|
|
:init
|
|
|
|
|
|
|
|
;; Optionally configure the register formatting. This improves the register
|
|
|
|
;; preview for `consult-register', `consult-register-load',
|
|
|
|
;; `consult-register-store' and the Emacs built-ins.
|
|
|
|
(setq register-preview-delay 0.5
|
|
|
|
register-preview-function #'consult-register-format)
|
|
|
|
|
|
|
|
;; Optionally tweak the register preview window.
|
|
|
|
;; This adds thin lines, sorting and hides the mode line of the window.
|
|
|
|
(advice-add #'register-preview :override #'consult-register-window)
|
|
|
|
|
|
|
|
;; Use Consult to select xref locations with preview
|
|
|
|
(setq xref-show-xrefs-function #'consult-xref
|
|
|
|
xref-show-definitions-function #'consult-xref)
|
|
|
|
|
|
|
|
;; Configure other variables and modes in the :config section,
|
|
|
|
;; after lazily loading the package.
|
|
|
|
:config
|
|
|
|
|
|
|
|
;; Optionally configure preview. The default value
|
|
|
|
;; is 'any, such that any key triggers the preview.
|
|
|
|
;; (setq consult-preview-key 'any)
|
|
|
|
;; (setq consult-preview-key "M-.")
|
|
|
|
;; (setq consult-preview-key '("S-<down>" "S-<up>"))
|
|
|
|
;; For some commands and buffer sources it is useful to configure the
|
|
|
|
;; :preview-key on a per-command basis using the `consult-customize' macro.
|
|
|
|
(consult-customize
|
|
|
|
consult-theme :preview-key '(:debounce 0.2 any)
|
|
|
|
consult-ripgrep consult-git-grep consult-grep
|
|
|
|
consult-bookmark consult-recent-file consult-xref
|
|
|
|
consult--source-bookmark consult--source-file-register
|
|
|
|
consult--source-recent-file consult--source-project-recent-file
|
|
|
|
;; :preview-key "M-."
|
|
|
|
:preview-key '(:debounce 0.4 any))
|
|
|
|
|
|
|
|
;; Optionally configure the narrowing key.
|
|
|
|
;; Both < and C-+ work reasonably well.
|
|
|
|
(setq consult-narrow-key "<") ;; "C-+"
|
|
|
|
|
|
|
|
;; Optionally make narrowing help available in the minibuffer.
|
|
|
|
;; You may want to use `embark-prefix-help-command' or which-key instead.
|
|
|
|
;; (keymap-set consult-narrow-map (concat consult-narrow-key " ?") #'consult-narrow-help)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
(use-package consult-lsp
|
|
|
|
:ensure t)
|
|
|
|
|
|
|
|
;; Enable vertico
|
|
|
|
(use-package vertico
|
|
|
|
:custom
|
|
|
|
;; (vertico-scroll-margin 0) ;; Different scroll margin
|
|
|
|
(vertico-count 10) ;; Show more candidates
|
|
|
|
(vertico-resize t) ;; Grow and shrink the Vertico minibuffer
|
|
|
|
(vertico-cycle t) ;; Enable cycling for `vertico-next/previous'
|
|
|
|
;; Option 2: Replace `vertico-insert' to enable TAB prefix expansion.
|
|
|
|
;; (keymap-set vertico-map "TAB" #'minibuffer-complete)
|
|
|
|
:init
|
|
|
|
(vertico-mode))
|
|
|
|
|
|
|
|
(use-package vertico-multiform
|
|
|
|
:straight nil
|
|
|
|
:after vertico
|
|
|
|
:ensure nil
|
|
|
|
:custom
|
|
|
|
(setq vertico-multiform-commands
|
|
|
|
'((consult-line buffer)
|
|
|
|
(consult-imenu reverse buffer)
|
|
|
|
(execute-extended-command flat)))
|
|
|
|
|
|
|
|
(setq vertico-multiform-categories
|
|
|
|
'((file buffer grid)
|
|
|
|
(imenu (:not indexed mouse))
|
|
|
|
(symbol (vertico-sort-function . vertico-sort-alpha))))
|
|
|
|
:init
|
|
|
|
(vertico-multiform-mode)
|
|
|
|
)
|
|
|
|
|
|
|
|
(use-package vertico-posframe
|
|
|
|
:after vertico-multiform
|
|
|
|
:ensure nil
|
|
|
|
:config
|
|
|
|
(setq vertico-posframe-poshandler #'posframe-poshandler-frame-top-center)
|
|
|
|
;; (vertico-posframe-border-width . 10)
|
|
|
|
;; NOTE: This is useful when emacs is used in both in X and
|
|
|
|
;; terminal, for posframe do not work well in terminal, so
|
|
|
|
;; vertico-buffer-mode will be used as fallback at the
|
|
|
|
;; moment.
|
|
|
|
;; (vertico-posframe-fallback-mode . vertico-buffer-mode)
|
|
|
|
:init
|
|
|
|
;; (require 'vertico-posframe)
|
|
|
|
(vertico-posframe-mode 1)
|
|
|
|
)
|
|
|
|
|
|
|
|
;; Persist history over Emacs restarts. Vertico sorts by history position.
|
|
|
|
(use-package savehist
|
|
|
|
:init
|
|
|
|
(savehist-mode))
|
|
|
|
|
|
|
|
;; A few more useful configurations...
|
|
|
|
(use-package emacs
|
|
|
|
:custom
|
|
|
|
;; Support opening new minibuffers from inside existing minibuffers.
|
|
|
|
(enable-recursive-minibuffers t)
|
|
|
|
;; Hide commands in M-x which do not work in the current mode. Vertico
|
|
|
|
;; commands are hidden in normal buffers. This setting is useful beyond
|
|
|
|
;; Vertico.
|
|
|
|
(read-extended-command-predicate #'command-completion-default-include-p)
|
|
|
|
|
|
|
|
;; TAB cycle if there are only few candidates
|
|
|
|
;; (completion-cycle-threshold 3)
|
|
|
|
|
|
|
|
;; Enable indentation+completion using the TAB key.
|
|
|
|
;; `completion-at-point' is often bound to M-TAB.
|
2024-10-12 21:19:24 +03:00
|
|
|
;; (tab-always-indent 'complete)
|
2024-09-20 12:18:47 +03:00
|
|
|
|
|
|
|
;; Emacs 30 and newer: Disable Ispell completion function. As an alternative,
|
|
|
|
;; try `cape-dict'.
|
|
|
|
(text-mode-ispell-word-completion nil)
|
|
|
|
|
|
|
|
;; Hide commands in M-x which do not apply to the current mode. Corfu
|
|
|
|
;; commands are hidden, since they are not used via M-x. This setting is
|
|
|
|
;; useful beyond Corfu.
|
|
|
|
(read-extended-command-predicate #'command-completion-default-include-p)
|
|
|
|
:init
|
|
|
|
;; Add prompt indicator to `completing-read-multiple'.
|
|
|
|
;; We display [CRM<separator>], e.g., [CRM,] if the separator is a comma.
|
|
|
|
(defun crm-indicator (args)
|
|
|
|
(cons (format "[CRM%s] %s"
|
|
|
|
(replace-regexp-in-string
|
|
|
|
"\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" ""
|
|
|
|
crm-separator)
|
|
|
|
(car args))
|
|
|
|
(cdr args)))
|
|
|
|
(advice-add #'completing-read-multiple :filter-args #'crm-indicator)
|
|
|
|
|
|
|
|
;; Do not allow the cursor in the minibuffer prompt
|
|
|
|
(setq minibuffer-prompt-properties
|
|
|
|
'(read-only t cursor-intangible t face minibuffer-prompt))
|
|
|
|
(add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)
|
|
|
|
)
|
|
|
|
|
2024-10-12 21:19:24 +03:00
|
|
|
(use-package hotfuzz)
|
2024-09-20 12:18:47 +03:00
|
|
|
|
|
|
|
;; Optionally use the `orderless' completion style.
|
|
|
|
(use-package orderless
|
|
|
|
:custom
|
|
|
|
;; Configure a custom style dispatcher (see the Consult wiki)
|
|
|
|
;; (orderless-style-dispatchers '(+orderless-consult-dispatch orderless-affix-dispatch))
|
|
|
|
;; (orderless-component-separator #'orderless-escapable-split-on-space)
|
|
|
|
(completion-styles '(hotfuzz orderless partial-completion basic))
|
|
|
|
(completion-category-defaults nil)
|
|
|
|
(completion-category-overrides nil))
|
|
|
|
|
|
|
|
(use-package marginalia
|
|
|
|
:config
|
|
|
|
(marginalia-mode 1))
|
|
|
|
|
2024-10-12 21:19:24 +03:00
|
|
|
|
|
|
|
;; Consult users will also want the embark-consult package.
|
|
|
|
(use-package embark-consult
|
|
|
|
:hook
|
|
|
|
(embark-collect-mode . consult-preview-at-point-mode))
|
|
|
|
|
2024-09-20 12:18:47 +03:00
|
|
|
(use-package embark
|
|
|
|
:init
|
|
|
|
;; Optionally replace the key help with a completing-read interface
|
|
|
|
(setq prefix-help-command #'embark-prefix-help-command)
|
|
|
|
|
|
|
|
;; Show the Embark target at point via Eldoc. You may adjust the
|
|
|
|
;; Eldoc strategy, if you want to see the documentation from
|
|
|
|
;; multiple providers. Beware that using this can be a little
|
|
|
|
;; jarring since the message shown in the minibuffer can be more
|
|
|
|
;; than one line, causing the modeline to move up and down:
|
|
|
|
|
|
|
|
;; (add-hook 'eldoc-documentation-functions #'embark-eldoc-first-target)
|
|
|
|
;; (setq eldoc-documentation-strategy #'eldoc-documentation-compose-eagerly)
|
|
|
|
|
|
|
|
:config
|
|
|
|
;; Hide the mode line of the Embark live/completions buffers
|
|
|
|
(add-to-list 'display-buffer-alist
|
|
|
|
'("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*"
|
|
|
|
nil
|
|
|
|
(window-parameters (mode-line-format . none)))))
|
|
|
|
|
|
|
|
;; Consult users will also want the embark-consult package.
|