]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid errors in completion due to 'completion-regexp-list'
authorEli Zaretskii <eliz@gnu.org>
Sun, 2 Jul 2023 06:16:58 +0000 (09:16 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sun, 2 Jul 2023 06:16:58 +0000 (09:16 +0300)
* doc/lispref/minibuf.texi (Basic Completion):
* src/minibuf.c (syms_of_minibuf) <completion-regexp-list>:
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)

doc/lispref/minibuf.texi
lisp/minibuffer.el
src/minibuf.c

index 52eea3b95354015f43d22f4a0d9f9c6861100a8b..7fbdd9eb6e2d7f075f67b0627b0d9672f9c41f7e 100644 (file)
@@ -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
index 4aa1ab3e8904152690c54be9ff4ef41d71398d81..3e30b68d5e9df8255f935f6bb9da7acd6cd90178 100644 (file)
@@ -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))
index 6e54d8c3ba509ac58e8afdee9e422dd038908730..58adde1bf668ed892b5de1d36f9e3a719e6a76b4 100644 (file)
@@ -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",