branch: externals/corfu commit 6081a68db6f74a493431d647942fc294964910aa Author: Daniel Mendler <m...@daniel-mendler.de> Commit: Daniel Mendler <m...@daniel-mendler.de>
Require the compat library --- corfu.el | 56 +++++++++++++++++++++---------------------- extensions/corfu-indexed.el | 2 +- extensions/corfu-popupinfo.el | 20 +++++++--------- 3 files changed, 37 insertions(+), 41 deletions(-) diff --git a/corfu.el b/corfu.el index 4a3579ef7f..f4f8000353 100644 --- a/corfu.el +++ b/corfu.el @@ -6,7 +6,7 @@ ;; Maintainer: Daniel Mendler <m...@daniel-mendler.de> ;; Created: 2021 ;; Version: 0.34 -;; Package-Requires: ((emacs "27.1")) +;; Package-Requires: ((emacs "27.1") (compat "29.1.1.0")) ;; Homepage: https://github.com/minad/corfu ;; This file is part of GNU Emacs. @@ -33,6 +33,7 @@ ;;; Code: +(require 'compat) (require 'seq) (eval-when-compile (require 'cl-lib) @@ -213,31 +214,29 @@ The completion backend can override this with '((t :inherit shadow :strike-through t)) "Face used for deprecated candidates.") -(defvar corfu-map - (let ((map (make-sparse-keymap))) - (define-key map [remap beginning-of-buffer] #'corfu-first) - (define-key map [remap end-of-buffer] #'corfu-last) - (define-key map [remap scroll-down-command] #'corfu-scroll-down) - (define-key map [remap scroll-up-command] #'corfu-scroll-up) - (define-key map [remap next-line] #'corfu-next) - (define-key map [remap previous-line] #'corfu-previous) - (define-key map [remap completion-at-point] #'corfu-complete) - (define-key map [down] #'corfu-next) - (define-key map [up] #'corfu-previous) - (define-key map [remap keyboard-escape-quit] #'corfu-reset) - ;; XXX [tab] is bound because of org-mode - ;; The binding should be removed from org-mode-map. - (define-key map [tab] #'corfu-complete) - (define-key map "\M-n" #'corfu-next) - (define-key map "\M-p" #'corfu-previous) - (define-key map "\C-g" #'corfu-quit) - (define-key map "\r" #'corfu-insert) - (define-key map "\t" #'corfu-complete) - (define-key map "\M-g" 'corfu-info-location) - (define-key map "\M-h" 'corfu-info-documentation) - (define-key map "\M- " #'corfu-insert-separator) - map) - "Corfu keymap used when popup is shown.") +(defvar-keymap corfu-map + :doc "Corfu keymap used when popup is shown." + "<remap> <beginning-of-buffer>" #'corfu-first + "<remap> <end-of-buffer>" #'corfu-last + "<remap> <scroll-down-command>" #'corfu-scroll-down + "<remap> <scroll-up-command>" #'corfu-scroll-up + "<remap> <next-line>" #'corfu-next + "<remap> <previous-line>" #'corfu-previous + "<remap> <completion-at-point>" #'corfu-complete + "<remap> <keyboard-escape-quit>" #'corfu-reset + "<down>" #'corfu-next + "<up>" #'corfu-previous + ;; XXX [tab] is bound because of org-mode + ;; The binding should be removed from org-mode-map. + "<tab>" #'corfu-complete + "M-n" #'corfu-next + "M-p" #'corfu-previous + "C-g" #'corfu-quit + "RET" #'corfu-insert + "TAB" #'corfu-complete + "M-g" 'corfu-info-location + "M-h" 'corfu-info-documentation + "M-SPC" #'corfu-insert-separator) (defvar corfu--auto-timer nil "Auto completion timer.") @@ -887,8 +886,7 @@ See `corfu-separator' for more details." (<= beg pt end) (save-excursion (goto-char beg) - (let ((inhibit-field-text-motion t)) - (<= (line-beginning-position) pt (line-end-position)))) + (<= (pos-bol) pt (pos-eol))) (or ;; We keep Corfu alive if a `overriding-terminal-local-map' is ;; installed, e.g., the `universal-argument-map'. It would be good to @@ -1082,7 +1080,7 @@ Quit if no candidate is selected." (exit (plist-get completion-extra-properties :exit-function)) (threshold (completion--cycle-threshold metadata)) (completion-in-region-mode-predicate - (or completion-in-region-mode-predicate (lambda () t)))) + (or completion-in-region-mode-predicate #'always))) (pcase (completion-try-completion str table pred pt metadata) ('nil (corfu--message "No match") nil) ('t (goto-char end) diff --git a/extensions/corfu-indexed.el b/extensions/corfu-indexed.el index 7de296b751..c090a9707a 100644 --- a/extensions/corfu-indexed.el +++ b/extensions/corfu-indexed.el @@ -60,7 +60,7 @@ "Advice for `corfu--affixate' which prefixes the CANDS with an index." (setq cands (cdr cands)) (let* ((space #(" " 0 1 (face (:height 0.5 :inherit corfu-indexed)))) - (width (if (> (+ corfu-indexed-start (length cands)) 10) 2 1)) + (width (if (length> cands (- 10 corfu-indexed-start)) 2 1)) (fmt (concat space (propertize (format "%%%ds" width) 'face 'corfu-indexed) diff --git a/extensions/corfu-popupinfo.el b/extensions/corfu-popupinfo.el index 48e1294572..60cb0b5361 100644 --- a/extensions/corfu-popupinfo.el +++ b/extensions/corfu-popupinfo.el @@ -112,17 +112,15 @@ popup can be requested manually via `corfu-popupinfo-toggle', (const force-vertical))) :group 'corfu) -(defvar corfu-popupinfo-map - (let ((map (make-sparse-keymap))) - (define-key map "\M-d" #'corfu-popupinfo-documentation) - (define-key map "\M-l" #'corfu-popupinfo-location) - (define-key map "\M-t" #'corfu-popupinfo-toggle) - (define-key map [remap scroll-other-window] #'corfu-popupinfo-scroll-up) - (define-key map [remap scroll-other-window-down] #'corfu-popupinfo-scroll-down) - (define-key map [remap end-of-buffer-other-window] #'corfu-popupinfo-end) - (define-key map [remap beginning-of-buffer-other-window] #'corfu-popupinfo-beginning) - map) - "Additional keymap activated in popupinfo mode.") +(defvar-keymap corfu-popupinfo-map + :doc "Additional keymap activated in popupinfo mode." + "M-d" #'corfu-popupinfo-documentation + "M-l" #'corfu-popupinfo-location + "M-t" #'corfu-popupinfo-toggle + "<remap> <scroll-other-window>" #'corfu-popupinfo-scroll-up + "<remap> <scroll-other-window-down>" #'corfu-popupinfo-scroll-down + "<remap> <end-of-buffer-other-window>" #'corfu-popupinfo-end + "<remap> <beginning-of-buffer-other-window>" #'corfu-popupinfo-beginning) (defvar corfu-popupinfo--buffer-parameters '((truncate-partial-width-windows . nil)