]> git.eshelyaron.com Git - emacs.git/commitdiff
Return t from completion-emacs22-try-completion only for completions
authorSpencer Baugh <sbaugh@janestreet.com>
Thu, 16 Nov 2023 16:34:08 +0000 (11:34 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 17 Nov 2023 17:34:23 +0000 (12:34 -0500)
The emacs22 completion style ignores the text after point when
computing completions.  However, it still needs to take into account
the entire string it's given, to avoid returning incorrect values.

Previously, completion-emacs22-try-completion would return t if the
text before point was an exact completion.  But this is effectively
saying that the entire input string was an exact completion, which may
not be correct.  This would cause completing-read with REQUIRE-MATCH=t
to return a non-completion.

Now, completion-emacs22-try-completion only returns t if the entire
input string is an exact completion.

* lisp/minibuffer.el (completion-emacs22-try-completion): Return t
only if the entire input string is an exact completion.  (Bug#67210)

lisp/minibuffer.el

index 9ca3ecdf5428b6606a220d12762e99cd53e37c6c..7af7a35967467e938358b782657cd81ff3f6f338 100644 (file)
@@ -3531,8 +3531,13 @@ Like `internal-complete-buffer', but removes BUFFER from the completion list."
 (defun completion-emacs22-try-completion (string table pred point)
   (let ((suffix (substring string point))
         (completion (try-completion (substring string 0 point) table pred)))
-    (if (not (stringp completion))
-        completion
+    (cond
+     ((eq completion t)
+      (if (equal "" suffix)
+          t
+        (cons string point)))
+     ((not (stringp completion)) completion)
+     (t
       ;; Merge a trailing / in completion with a / after point.
       ;; We used to only do it for word completion, but it seems to make
       ;; sense for all completions.
@@ -3546,7 +3551,7 @@ Like `internal-complete-buffer', but removes BUFFER from the completion list."
                (eq ?/ (aref suffix 0)))
           ;; This leaves point after the / .
           (setq suffix (substring suffix 1)))
-      (cons (concat completion suffix) (length completion)))))
+      (cons (concat completion suffix) (length completion))))))
 
 (defun completion-emacs22-all-completions (string table pred point)
   (let ((beforepoint (substring string 0 point)))