From: Ryan C. Thompson Date: Wed, 26 Jul 2017 18:09:42 +0000 (-0700) Subject: Fix handling of nil PRED2 arg for completion-table-with-predicate X-Git-Tag: emacs-26.0.91~355 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=255ba01148f69f452937e67feb7af5d4c1466fed;p=emacs.git 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. --- diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index f13f1fa7984..26861de87b0 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 c27b338f7f3..2d2ac85e3ff 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