diff options
| author | Ryan C. Thompson | 2017-07-26 11:09:42 -0700 |
|---|---|---|
| committer | Noam Postavsky | 2017-11-07 21:25:55 -0500 |
| commit | 255ba01148f69f452937e67feb7af5d4c1466fed (patch) | |
| tree | c89e0c1430d085a30222dcc758165c4ce6e66225 | |
| parent | 949b70a7d80c79b2593a7d88f6543e29dc63ed18 (diff) | |
| download | emacs-255ba01148f69f452937e67feb7af5d4c1466fed.tar.gz emacs-255ba01148f69f452937e67feb7af5d4c1466fed.zip | |
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.
| -rw-r--r-- | lisp/minibuffer.el | 2 | ||||
| -rw-r--r-- | test/lisp/minibuffer-tests.el | 32 |
2 files changed, 33 insertions, 1 deletions
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." | |||
| 392 | (and (funcall pred1 x) (funcall pred2 x))))) | 392 | (and (funcall pred1 x) (funcall pred2 x))))) |
| 393 | ;; If completion failed and we're not applying pred1 strictly, try | 393 | ;; If completion failed and we're not applying pred1 strictly, try |
| 394 | ;; again without pred1. | 394 | ;; again without pred1. |
| 395 | (and (not strict) pred1 pred2 | 395 | (and (not strict) pred1 |
| 396 | (complete-with-action action table string pred2)))))) | 396 | (complete-with-action action table string pred2)))))) |
| 397 | 397 | ||
| 398 | (defun completion-table-in-turn (&rest tables) | 398 | (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 @@ | |||
| 42 | (should (equal (buffer-string) | 42 | (should (equal (buffer-string) |
| 43 | "test: ")))))) | 43 | "test: ")))))) |
| 44 | 44 | ||
| 45 | (ert-deftest completion-table-with-predicate-test () | ||
| 46 | (let ((full-collection | ||
| 47 | '("apple" ; Has A. | ||
| 48 | "beet" ; Has B. | ||
| 49 | "banana" ; Has A & B. | ||
| 50 | "cherry" ; Has neither. | ||
| 51 | )) | ||
| 52 | (no-A (lambda (x) (not (string-match-p "a" x)))) | ||
| 53 | (no-B (lambda (x) (not (string-match-p "b" x))))) | ||
| 54 | (should | ||
| 55 | (member "cherry" | ||
| 56 | (completion-table-with-predicate | ||
| 57 | full-collection no-A t "" no-B t))) | ||
| 58 | (should-not | ||
| 59 | (member "banana" | ||
| 60 | (completion-table-with-predicate | ||
| 61 | full-collection no-A t "" no-B t))) | ||
| 62 | ;; "apple" should still match when strict is nil. | ||
| 63 | (should (eq t (try-completion | ||
| 64 | "apple" | ||
| 65 | (apply-partially | ||
| 66 | 'completion-table-with-predicate | ||
| 67 | full-collection no-A nil) | ||
| 68 | no-B))) | ||
| 69 | ;; "apple" should still match when strict is nil and pred2 is nil | ||
| 70 | ;; (Bug#27841). | ||
| 71 | (should (eq t (try-completion | ||
| 72 | "apple" | ||
| 73 | (apply-partially | ||
| 74 | 'completion-table-with-predicate | ||
| 75 | full-collection no-A nil)))))) | ||
| 76 | |||
| 45 | (provide 'completion-tests) | 77 | (provide 'completion-tests) |
| 46 | ;;; completion-tests.el ends here | 78 | ;;; completion-tests.el ends here |