New user option 'completion-preview-ignore-case'

Completion Preview mode implicitly assumed that
'completion-ignore-case' is nil, and while it can also work
with 'completion-ignore-case' non-nil, the results are a bit
different than what you get with 'completion-at-point'.  Add
an option that controls case sensitivity explicitly and
specifically for Completion Preview mode, and clarify the
behavior when case differences are ignored.  (Bug#73234)

* lisp/completion-preview.el
(completion-preview-ignore-case): New user option.
This commit is contained in:
Eshel Yaron 2024-09-17 20:26:23 +02:00
parent 7d365a2d72
commit f1794a17b6
No known key found for this signature in database
GPG key ID: EF3EE9CA35D78618

View file

@ -173,6 +173,24 @@ If this is nil, display the completion preview without delay."
(const :tag "No delay" nil))
:version "30.1")
(defcustom completion-preview-ignore-case nil
"Whether Completion Preview mode ignores case differences.
By default this option is nil, which says that case is significant, so a
completion candidate \"FooBar\" matches prefix \"Foo\", but not \"foo\".
If you set it to non-nil, then Completion Preview mode also suggests
completions that differ in case from the prefix that you type; for
example, it may suggest completing \"foo\" with the suffix \"Bar\" when
there's an available completion candidate \"FooBar\". Note that in this
case, when you insert the completion (with `completion-preview-insert'),
Completion Preview mode does not update the completed prefix according
to the capitalization of the completion candidate, instead it simply
ignores such case differences, so the resulting string is \"fooBar\".
See also `completion-ignore-case'."
:type 'boolean
:version "31.1")
(defvar completion-preview-sort-function #'minibuffer--sort-by-length-alpha
"Sort function to use for choosing a completion candidate to preview.")
@ -345,6 +363,7 @@ candidates or if there are multiple matching completions and
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(let* ((pred (plist-get props :predicate))
(string (buffer-substring beg end))
(completion-ignore-case completion-preview-ignore-case)
(md (completion-metadata string table pred))
(sort-fn (or (completion-metadata-get md 'cycle-sort-function)
(completion-metadata-get md 'display-sort-function)