Previously, a distinction was made only between "regular" style (assumed to be for people who prefer to cycle directionally and commit with RET) and +tng (assumed to be for people who prefer TAB and auto-commit). This made composing further variations harder on the user, as they would have to work around our bindings. Now we provide a flag per feature, and the user can compose to their liking. Some variable options were turned into flags and the global CAPF list was pruned, suggesting to use individual keys for those functions if required.
58 lines
2.7 KiB
EmacsLisp
58 lines
2.7 KiB
EmacsLisp
;;; completion/corfu/autoload.el -*- lexical-binding: t; -*-
|
|
|
|
;;;###autoload
|
|
(defun +corfu-move-to-minibuffer ()
|
|
"Move the current list of candidates to your choice of minibuffer completion UI."
|
|
(interactive)
|
|
(pcase completion-in-region--data
|
|
(`(,beg ,end ,table ,pred ,extras)
|
|
(let ((completion-extra-properties extras)
|
|
completion-cycle-threshold completion-cycling)
|
|
(cond ((and (modulep! :completion vertico)
|
|
(fboundp #'consult-completion-in-region))
|
|
(consult-completion-in-region beg end table pred))
|
|
((and (modulep! :completion ivy)
|
|
(fboundp #'ivy-completion-in-region))
|
|
(ivy-completion-in-region (marker-position beg) (marker-position end) table pred))
|
|
;; Helm is special and wants to _wrap_ `completion--in-region'
|
|
;; instead of replacing it in `completion-in-region-function'.
|
|
((and (modulep! :completion helm)
|
|
(fboundp #'helm--completion-in-region)
|
|
(advice-member-p #'helm--completion-in-region #'completion--in-region))
|
|
;; Important: `completion-in-region-function' is set to corfu at
|
|
;; this moment, so `completion-in-region' (single -) doesn't work.
|
|
(completion--in-region beg end table pred))
|
|
;; Ido doesn't implement `completion-in-region', and its
|
|
;; `completing-read' only accepts a plain list of strings as table,
|
|
;; so there's not much we can do with it.
|
|
(t (error "No minibuffer completion UI available for moving to!")))))))
|
|
|
|
;;;###autoload
|
|
(defun +corfu-smart-sep-toggle-escape ()
|
|
"Insert `corfu-separator' or toggle escape if it's already there."
|
|
(interactive)
|
|
(cond ((and (char-equal (char-before) corfu-separator)
|
|
(char-equal (char-before (1- (point))) ?\\))
|
|
(save-excursion (delete-char -2)))
|
|
((char-equal (char-before) corfu-separator)
|
|
(save-excursion (backward-char 1)
|
|
(insert-char ?\\)))
|
|
(t
|
|
;; Without this corfu quits immediately.
|
|
(setq this-command #'corfu-insert-separator)
|
|
(call-interactively #'corfu-insert-separator))))
|
|
|
|
;;;###autoload
|
|
(defun +corfu-in-doc-or-comment-p (_sym)
|
|
"Return non-nil if point is in a docstring or comment."
|
|
(or (nth 4 (syntax-ppss))
|
|
(when-let ((faces '(font-lock-comment-face
|
|
font-lock-doc-face
|
|
tree-sitter-hl-face:doc
|
|
tree-sitter-hl-face:comment))
|
|
(fs (get-text-property (point) 'face)))
|
|
(if (listp fs)
|
|
(cl-loop for f in fs
|
|
if (memq f faces)
|
|
return t)
|
|
(memq fs faces)))))
|