From: Dmitry Gutov Date: Thu, 11 Apr 2024 00:57:09 +0000 (+0300) Subject: Generalize the file-name specific workaround in minibuffer-completion-help X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=fdbdeb355033e910e6e6e55ea4715cec2dc9e776;p=emacs.git Generalize the file-name specific workaround in minibuffer-completion-help * lisp/minibuffer.el (completion-base-suffix): New function (bug#48356). (minibuffer-completion-help): Use it here. (minibuffer-completion-help): Cut off the double completion boundary when it occurs inside completion-list-insert-choice-function.. (cherry picked from commit 0288bc6c949e82f72790a60d067da31428ca433a) --- diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 0f484a3f8cc..a3c1056af36 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -92,6 +92,18 @@ the closest directory separators." (cons (or (cadr boundaries) 0) (or (cddr boundaries) (length suffix))))) +(defun completion-base-suffix (start end table predicate) + "Return the completion boundary suffix as substring. +START and END are the beginning and end of the entity being completed. +TABLE and PREDICATE are completion table and predicate." + (let ((suffix (buffer-substring (point) end))) + (substring + suffix + (cdr (completion-boundaries (buffer-substring start (point)) + table + predicate + suffix))))) + (defun completion-metadata (string table pred) "Return the metadata of elements to complete at the end of STRING. This metadata is an alist. Currently understood keys are: @@ -2994,16 +3006,9 @@ completions list." (full-base (substring string 0 base-size)) (base-prefix (buffer-substring (minibuffer--completion-prompt-end) (+ start base-size))) - (base-suffix - (if (or (eq (alist-get 'category (cdr md)) 'file) - completion-in-region-mode-predicate) - (buffer-substring - (save-excursion - (if completion-in-region-mode-predicate - (point) - (or (search-forward "/" nil t) (point-max)))) - (point-max)) - "")) + (base-suffix (completion-base-suffix start end + minibuffer-completion-table + minibuffer-completion-predicate)) (style completion--matching-style) (exceptional-candidates (or (not completions-exclude-exceptional-candidates) @@ -3135,7 +3140,11 @@ completions list." (delete-minibuffer-contents) (insert start choice) ;; Keep point after completion before suffix - (save-excursion (insert end))) + (save-excursion (insert + (completion--merge-suffix + choice + (1- (length choice)) + end)))) (unless (or (zerop (length prefix)) (equal prefix (buffer-substring-no-properties