feat(corfu): both option for RET behavior

Adds a new value of `+corfu-want-ret-to-confirm` to cover the case where
the user wants to select the candidate as well as perform the normal
behavior of RET.

Also, the logic for RET behavior has been refactored for clarity, and
the variable's documentation has been clarified a little.
This commit is contained in:
45mg 2024-03-23 19:06:23 +05:30 committed by 45mm
parent bbadabda51
commit dd18fa16be
2 changed files with 18 additions and 11 deletions

View file

@ -4,9 +4,9 @@
"Configure how the user expects RET to behave.
Possible values are:
- t (default): Insert candidate if one is selected, pass-through otherwise;
- `minibuffer': Insert candidate if one is selected, pass-through otherwise,
and immediatelly exit if in the minibuffer;
- nil: Pass-through without inserting.")
- nil: Pass-through without inserting;
- `both': Insert candidate if one is selected, then pass-through;
- `minibuffer': Behaves like `both` in the minibuffer and `t` otherwise.")
(defvar +corfu-buffer-scanning-size-limit (* 1 1024 1024) ; 1 MB
"Size limit for a buffer to be scanned by `cape-dabbrev'.")

View file

@ -482,16 +482,23 @@ Continues comments if executed from a commented line. Consults
(cond ((null +corfu-want-ret-to-confirm)
(corfu-quit)
nil)
((eq +corfu-want-ret-to-confirm 'minibuffer)
((eq +corfu-want-ret-to-confirm t)
(if (>= corfu--index 0)
cmd
nil))
((eq +corfu-want-ret-to-confirm 'both)
(funcall-interactively cmd)
nil)
((and (or (not (minibufferp nil t))
(eq +corfu-want-ret-to-confirm t))
(>= corfu--index 0))
cmd)
((or (not (minibufferp nil t))
(eq +corfu-want-ret-to-confirm t))
nil)
((eq +corfu-want-ret-to-confirm 'minibuffer)
(if (minibufferp nil t)
;; 'both' behavior
(progn
(funcall-interactively cmd)
nil)
;; 't' behavior
(if (>= corfu--index 0)
cmd
nil)))
(t cmd))))))
(map! :when (modulep! :completion corfu)
:map corfu-map