emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-26 255ba01: Fix handling of nil PRED2 arg for comple


From: Noam Postavsky
Subject: [Emacs-diffs] emacs-26 255ba01: Fix handling of nil PRED2 arg for completion-table-with-predicate
Date: Tue, 7 Nov 2017 21:28:35 -0500 (EST)

branch: emacs-26
commit 255ba01148f69f452937e67feb7af5d4c1466fed
Author: Ryan C. Thompson <address@hidden>
Commit: Noam Postavsky <address@hidden>

    Fix handling of nil PRED2 arg for completion-table-with-predicate
    
    * lisp/minibuffer.el (completion-table-with-predicate): Don't act as
    if strict is non-nil when pred2 is nil (Bug#27841).
    * test/lisp/minibuffer-tests.el
    (completion-table-with-predicate-test): Add a test for Bug#27841.
---
 lisp/minibuffer.el            |  2 +-
 test/lisp/minibuffer-tests.el | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index f13f1fa..26861de 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -392,7 +392,7 @@ obeys predicates."
                                   (and (funcall pred1 x) (funcall pred2 x)))))
         ;; If completion failed and we're not applying pred1 strictly, try
         ;; again without pred1.
-        (and (not strict) pred1 pred2
+        (and (not strict) pred1
              (complete-with-action action table string pred2))))))
 
 (defun completion-table-in-turn (&rest tables)
diff --git a/test/lisp/minibuffer-tests.el b/test/lisp/minibuffer-tests.el
index c27b338..2d2ac85 100644
--- a/test/lisp/minibuffer-tests.el
+++ b/test/lisp/minibuffer-tests.el
@@ -42,5 +42,37 @@
         (should (equal (buffer-string)
                        "test: "))))))
 
+(ert-deftest completion-table-with-predicate-test ()
+  (let ((full-collection
+         '("apple"                      ; Has A.
+           "beet"                       ; Has B.
+           "banana"                     ; Has A & B.
+           "cherry"                     ; Has neither.
+           ))
+        (no-A (lambda (x) (not (string-match-p "a" x))))
+        (no-B (lambda (x) (not (string-match-p "b" x)))))
+    (should
+     (member "cherry"
+             (completion-table-with-predicate
+              full-collection no-A t "" no-B t)))
+    (should-not
+     (member "banana"
+             (completion-table-with-predicate
+              full-collection no-A t "" no-B t)))
+    ;; "apple" should still match when strict is nil.
+    (should (eq t (try-completion
+                   "apple"
+                   (apply-partially
+                    'completion-table-with-predicate
+                    full-collection no-A nil)
+                   no-B)))
+    ;; "apple" should still match when strict is nil and pred2 is nil
+    ;; (Bug#27841).
+    (should (eq t (try-completion
+                   "apple"
+                   (apply-partially
+                    'completion-table-with-predicate
+                    full-collection no-A nil))))))
+
 (provide 'completion-tests)
 ;;; completion-tests.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]