From: Eli Zaretskii Date: Sun, 2 Jul 2023 06:16:58 +0000 (+0300) Subject: Avoid errors in completion due to 'completion-regexp-list' X-Git-Tag: emacs-29.1-rc1~75 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=37ed3d15f38;p=emacs.git Avoid errors in completion due to 'completion-regexp-list' * doc/lispref/minibuf.texi (Basic Completion): * src/minibuf.c (syms_of_minibuf) : Document that global non-nil settings of 'completion-regexp-list' are not safe. * lisp/minibuffer.el (completion-pcm--merge-completions): Avoid errors in 'try-completion' when PREFIX is nil. (Bug#64351) --- diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index 52eea3b9535..7fbdd9eb6e2 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -1052,6 +1052,12 @@ This is a list of regular expressions. The completion functions only consider a completion acceptable if it matches all regular expressions in this list, with @code{case-fold-search} (@pxref{Searching and Case}) bound to the value of @code{completion-ignore-case}. + +Do not set this variable to a non-@code{nil} value globally, as that +is not safe and will probably cause errors in completion commands. +This variable should be only let-bound to non-@code{nil} values around +calls to basic completion functions: @code{try-completion}, +@code{test-completion}, and @code{all-completions}. @end defvar @defmac lazy-completion-table var fun diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 4aa1ab3e890..3e30b68d5e9 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -4027,7 +4027,8 @@ the same set of elements." (setq ccs (nreverse ccs)) (let* ((prefix (try-completion fixed comps)) (unique (or (and (eq prefix t) (setq prefix fixed)) - (eq t (try-completion prefix comps))))) + (and (stringp prefix) + (eq t (try-completion prefix comps)))))) (unless (or (eq elem 'prefix) (equal prefix "")) (push prefix res)) diff --git a/src/minibuf.c b/src/minibuf.c index 6e54d8c3ba5..58adde1bf66 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -2471,7 +2471,12 @@ The basic completion functions only consider a completion acceptable if it matches all regular expressions in this list, with `case-fold-search' bound to the value of `completion-ignore-case'. See Info node `(elisp)Basic Completion', for a description of these -functions. */); +functions. + +Do not set this variable to a non-nil value globally, as that is not +safe and will probably cause errors in completion commands. This +variable should be only let-bound to non-nil values around calls to +basic completion functions like `try-completion' and `all-completions'. */); Vcompletion_regexp_list = Qnil; DEFVAR_BOOL ("minibuffer-allow-text-properties",