summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames N. V. Cash <james.nvc@gmail.com>2022-05-05 21:15:51 +0300
committerJuri Linkov <juri@linkov.net>2022-05-05 21:15:51 +0300
commit7e9d364b663613fd907f92de31e996463ef7d03c (patch)
tree1607a5680bb8ffdb36c337d2871902b44f986cb5
parent459d5ff8ad72dab8831635e3d914389982041ad2 (diff)
downloademacs-7e9d364b663613fd907f92de31e996463ef7d03c.tar.gz
* lisp/emacs-lisp/crm.el: Set completion-list-insert-choice-function.
* lisp/emacs-lisp/crm.el (completing-read-multiple): Set buffer-local completion-list-insert-choice-function that handles string values of args. https://lists.gnu.org/archive/html/emacs-devel/2022-05/msg00017.html
-rw-r--r--lisp/emacs-lisp/crm.el17
1 files changed, 17 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/crm.el b/lisp/emacs-lisp/crm.el
index f3e1981732c..8a5c3d3730c 100644
--- a/lisp/emacs-lisp/crm.el
+++ b/lisp/emacs-lisp/crm.el
@@ -254,6 +254,23 @@ with empty strings removed."
'crm--choose-completion-string nil 'local)
(setq-local minibuffer-completion-table #'crm--collection-fn)
(setq-local minibuffer-completion-predicate predicate)
+ (setq-local completion-list-insert-choice-function
+ (lambda (start end choice)
+ (if (and (stringp start) (stringp end))
+ (let* ((beg (save-excursion
+ (goto-char (minibuffer-prompt-end))
+ (or (search-forward start nil t)
+ (search-forward-regexp crm-separator nil t)
+ (minibuffer-prompt-end))))
+ (end (save-excursion
+ (goto-char (point-max))
+ (or (search-backward end nil t)
+ (progn
+ (goto-char beg)
+ (search-forward-regexp crm-separator nil t))
+ (point-max)))))
+ (completion--replace beg end choice))
+ (completion--replace start end choice))))
;; see completing_read in src/minibuf.c
(setq-local minibuffer-completion-confirm
(unless (eq require-match t) require-match))