diff --git a/modules/completion/corfu/README.org b/modules/completion/corfu/README.org index 46f85b855..c138512b5 100644 --- a/modules/completion/corfu/README.org +++ b/modules/completion/corfu/README.org @@ -193,9 +193,13 @@ A few variables may be set to change behavior of this module: - [[var:corfu-preview-current]] :: Configures current candidate preview. - [[var:+corfu-want-ret-to-confirm]] :: - Enables commiting with [[RET]] when the popup is visible. Default is ~t~, may be set to - ~'minibuffer~ if you want to commit both the completion and the minibuffer when - active. When ~nil~, it is always passed-through. + Controls the behavior of [[kbd:][RET]] when the popup is visible - whether it confirms + the selected candidate, and whether [[kbd:][RET]] is passed through (ie. the normal + behavior of [[kbd:][RET]] is performed). The default value of ~t~ enables confirmation + and disables pass-through. Other variations are ~nil~ for pass-through and no + confirmation and ~both~ for confirmation followed by pass-through. Finally, + the value of ~minibuffer~ will both confirm and pass-through (like ~both~) + when in the minibuffer, and only confirm (like ~t~) otherwise. - [[var:+corfu-buffer-scanning-size-limit]] :: Sets the maximum buffer size to be scanned by ~cape-dabbrev~. Defaults to 1 MB. Set this if you are having performance problems using the CAPF. diff --git a/modules/completion/corfu/config.el b/modules/completion/corfu/config.el index 611c3bc82..11cf01504 100644 --- a/modules/completion/corfu/config.el +++ b/modules/completion/corfu/config.el @@ -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'.") diff --git a/modules/config/default/config.el b/modules/config/default/config.el index ff742cc94..850ef4f45 100644 --- a/modules/config/default/config.el +++ b/modules/config/default/config.el @@ -466,28 +466,21 @@ Continues comments if executed from a commented line." (let ((cmds-del `(menu-item "Reset completion" corfu-reset :filter ,(lambda (cmd) - (cond - ((and (>= corfu--index 0) - (eq corfu-preview-current 'insert)) - cmd))))) + (when (and (>= corfu--index 0) + (eq corfu-preview-current 'insert)) + cmd)))) (cmds-ret `(menu-item "Insert completion DWIM" corfu-insert :filter ,(lambda (cmd) - (cond - ((null +corfu-want-ret-to-confirm) - (corfu-quit) - nil) - ((eq +corfu-want-ret-to-confirm 'minibuffer) - (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) - (t cmd))))) + (pcase +corfu-want-ret-to-confirm + ('nil (corfu-quit) nil) + ('t (if (>= corfu--index 0) cmd)) + ('both (funcall-interactively cmd) nil) + ('minibuffer + (if (minibufferp nil t) + (ignore (funcall-interactively cmd)) ; 'both' behavior + (if (>= corfu--index 0) cmd))) ; 't' behavior + (_ cmd))))) (cmds-tab `(menu-item "Select next candidate or expand/traverse snippet" corfu-next :filter (lambda (cmd) @@ -505,7 +498,7 @@ Continues comments if executed from a commented line." (featurep 'org) (org-at-table-p)) #'org-table-next-field))) - (t cmd)))) ) + (t cmd))))) (cmds-s-tab `(menu-item "Select previous candidate or expand/traverse snippet" corfu-previous