diff options
| author | Eli Zaretskii | 2023-07-02 09:16:58 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2023-07-02 09:16:58 +0300 |
| commit | 37ed3d15f38339400eba67647c87fad85de3a384 (patch) | |
| tree | 765df1e0a93785c65e1f6b22b3f21e3049ac61f5 | |
| parent | 15ff87617772c2a2c3d8a3a1e2ed7f96e527ad9e (diff) | |
| download | emacs-37ed3d15f38339400eba67647c87fad85de3a384.tar.gz emacs-37ed3d15f38339400eba67647c87fad85de3a384.zip | |
Avoid errors in completion due to 'completion-regexp-list'
* 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)
| -rw-r--r-- | doc/lispref/minibuf.texi | 6 | ||||
| -rw-r--r-- | lisp/minibuffer.el | 3 | ||||
| -rw-r--r-- | src/minibuf.c | 7 |
3 files changed, 14 insertions, 2 deletions
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 | |||
| 1052 | consider a completion acceptable if it matches all regular expressions | 1052 | consider a completion acceptable if it matches all regular expressions |
| 1053 | in this list, with @code{case-fold-search} (@pxref{Searching and Case}) | 1053 | in this list, with @code{case-fold-search} (@pxref{Searching and Case}) |
| 1054 | bound to the value of @code{completion-ignore-case}. | 1054 | bound to the value of @code{completion-ignore-case}. |
| 1055 | |||
| 1056 | Do not set this variable to a non-@code{nil} value globally, as that | ||
| 1057 | is not safe and will probably cause errors in completion commands. | ||
| 1058 | This variable should be only let-bound to non-@code{nil} values around | ||
| 1059 | calls to basic completion functions: @code{try-completion}, | ||
| 1060 | @code{test-completion}, and @code{all-completions}. | ||
| 1055 | @end defvar | 1061 | @end defvar |
| 1056 | 1062 | ||
| 1057 | @defmac lazy-completion-table var fun | 1063 | @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." | |||
| 4027 | (setq ccs (nreverse ccs)) | 4027 | (setq ccs (nreverse ccs)) |
| 4028 | (let* ((prefix (try-completion fixed comps)) | 4028 | (let* ((prefix (try-completion fixed comps)) |
| 4029 | (unique (or (and (eq prefix t) (setq prefix fixed)) | 4029 | (unique (or (and (eq prefix t) (setq prefix fixed)) |
| 4030 | (eq t (try-completion prefix comps))))) | 4030 | (and (stringp prefix) |
| 4031 | (eq t (try-completion prefix comps)))))) | ||
| 4031 | (unless (or (eq elem 'prefix) | 4032 | (unless (or (eq elem 'prefix) |
| 4032 | (equal prefix "")) | 4033 | (equal prefix "")) |
| 4033 | (push prefix res)) | 4034 | (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 | |||
| 2471 | if it matches all regular expressions in this list, with | 2471 | if it matches all regular expressions in this list, with |
| 2472 | `case-fold-search' bound to the value of `completion-ignore-case'. | 2472 | `case-fold-search' bound to the value of `completion-ignore-case'. |
| 2473 | See Info node `(elisp)Basic Completion', for a description of these | 2473 | See Info node `(elisp)Basic Completion', for a description of these |
| 2474 | functions. */); | 2474 | functions. |
| 2475 | |||
| 2476 | Do not set this variable to a non-nil value globally, as that is not | ||
| 2477 | safe and will probably cause errors in completion commands. This | ||
| 2478 | variable should be only let-bound to non-nil values around calls to | ||
| 2479 | basic completion functions like `try-completion' and `all-completions'. */); | ||
| 2475 | Vcompletion_regexp_list = Qnil; | 2480 | Vcompletion_regexp_list = Qnil; |
| 2476 | 2481 | ||
| 2477 | DEFVAR_BOOL ("minibuffer-allow-text-properties", | 2482 | DEFVAR_BOOL ("minibuffer-allow-text-properties", |