feat(corfu): update smart tab completion
This commit updates the smart tab functionality so that: 1. The only functionality checked is for the modules that are enabled. 2. The priority of the TAB behavior is tunable by the user. This also updates the TAB behavior for the Corfu module to be `indent-for-tab-command` instead of `completion-at-point` so that users can use the TAB key to indent their code and navigating Org tables. We also address #7372 by checking overriding-terminal-local-map, as that is used by Embark.
This commit is contained in:
parent
73f19acb66
commit
41f37ca31b
5 changed files with 140 additions and 59 deletions
|
@ -464,41 +464,68 @@ Continues comments if executed from a commented line. Consults
|
|||
[remap corfu-insert-separator] #'+corfu-smart-sep-toggle-escape
|
||||
"C-S-s" #'+corfu-move-to-minibuffer
|
||||
"C-p" #'corfu-previous
|
||||
"C-n" #'corfu-next
|
||||
"S-TAB" #'corfu-previous
|
||||
[backtab] #'corfu-previous
|
||||
"TAB" #'corfu-next
|
||||
[tab] #'corfu-next))
|
||||
"C-n" #'corfu-next))
|
||||
(let ((cmds-del
|
||||
`(menu-item "Reset completion" corfu-reset
|
||||
:filter ,(lambda (cmd)
|
||||
(when (and (>= corfu--index 0)
|
||||
(eq corfu-preview-current 'insert))
|
||||
cmd))))
|
||||
(cmds-ret
|
||||
`(menu-item "Insert completion DWIM" corfu-insert
|
||||
:filter ,(lambda (cmd)
|
||||
(interactive)
|
||||
(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))))))
|
||||
(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)))))
|
||||
(cmds-tab
|
||||
`(menu-item "Select next candidate or expand/traverse snippet" corfu-next
|
||||
:filter (lambda (cmd)
|
||||
(cond ,@(when (modulep! :editor snippets)
|
||||
'(((and +corfu-want-tab-prefer-navigating-snippets
|
||||
(+yas-active-p))
|
||||
#'yas-next-field-or-maybe-expand)
|
||||
((and +corfu-want-tab-prefer-expand-snippets
|
||||
(yas-maybe-expand-abbrev-key-filter 'yas-expand))
|
||||
#'yas-expand)))
|
||||
,@(when (modulep! :lang org)
|
||||
'(((and +corfu-want-tab-prefer-navigating-org-tables
|
||||
(org-at-table-p))
|
||||
#'org-table-next-field)))
|
||||
(t cmd)))) )
|
||||
(cmds-s-tab
|
||||
`(menu-item "Select previous candidate or expand/traverse snippet"
|
||||
corfu-previous
|
||||
:filter (lambda (cmd)
|
||||
(cond ,@(when (modulep! :editor snippets)
|
||||
'(((and +corfu-want-tab-prefer-navigating-snippets
|
||||
(+yas-active-p))
|
||||
#'yas-prev-field)))
|
||||
,@(when (modulep! :lang org)
|
||||
'(((and +corfu-want-tab-prefer-navigating-org-tables
|
||||
(org-at-table-p))
|
||||
#'org-table-previous-field)))
|
||||
(t cmd))))))
|
||||
(map! :when (modulep! :completion corfu)
|
||||
:map corfu-map
|
||||
[backspace] cmds-del
|
||||
"DEL" cmds-del
|
||||
:gi [return] cmds-ret
|
||||
:gi "RET" cmds-ret))
|
||||
:gi "RET" cmds-ret
|
||||
"S-TAB" cmds-s-tab
|
||||
[backtab] cmds-s-tab
|
||||
:gi "TAB" cmds-tab
|
||||
:gi [tab] cmds-tab))
|
||||
|
||||
;; Smarter C-a/C-e for both Emacs and Evil. C-a will jump to indentation.
|
||||
;; Pressing it again will send you to the true bol. Same goes for C-e, except
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue