diff options
-rw-r--r-- | src/minibuf.c | 15 | ||||
-rw-r--r-- | test/src/minibuf-tests.el | 11 |
2 files changed, 21 insertions, 5 deletions
diff --git a/src/minibuf.c b/src/minibuf.c index f6cf47f1f28..1e87c5044af 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -1323,13 +1323,13 @@ is used to further constrain the set of candidates. */) else { compare = min (bestmatchsize, SCHARS (eltstring)); - tem = Fcompare_strings (bestmatch, zero, - make_fixnum (compare), - eltstring, zero, - make_fixnum (compare), + Lisp_Object lcompare = make_fixnum (compare); + tem = Fcompare_strings (bestmatch, zero, lcompare, + eltstring, zero, lcompare, completion_ignore_case ? Qt : Qnil); matchsize = EQ (tem, Qt) ? compare : eabs (XFIXNUM (tem)) - 1; + Lisp_Object old_bestmatch = bestmatch; if (completion_ignore_case) { /* If this is an exact match except for case, @@ -1363,7 +1363,12 @@ is used to further constrain the set of candidates. */) bestmatch = eltstring; } if (bestmatchsize != SCHARS (eltstring) - || bestmatchsize != matchsize) + || bestmatchsize != matchsize + || (completion_ignore_case + && !EQ (Fcompare_strings (old_bestmatch, zero, lcompare, + eltstring, zero, lcompare, + Qnil), + Qt))) /* Don't count the same string multiple times. */ matchcount += matchcount <= 1; bestmatchsize = matchsize; diff --git a/test/src/minibuf-tests.el b/test/src/minibuf-tests.el index 12b018b8228..c64892822d6 100644 --- a/test/src/minibuf-tests.el +++ b/test/src/minibuf-tests.el @@ -399,5 +399,16 @@ (minibuf-tests--test-completion-regexp #'minibuf-tests--strings-to-symbol-hashtable)) +(ert-deftest test-try-completion-ignore-case () + (let ((completion-ignore-case t)) + (should (equal (try-completion "bar" '("bAr" "barfoo")) "bAr")) + (should (equal (try-completion "bar" '("bArfoo" "barbaz")) "bar")) + (should (equal (try-completion "bar" '("bArfoo" "barbaz")) + (try-completion "bar" '("barbaz" "bArfoo")))) + ;; bug#11339 + (should (equal (try-completion "baz" '("baz" "bAz")) "baz")) ;And not `t'! + (should (equal (try-completion "baz" '("bAz" "baz")) + (try-completion "baz" '("baz" "bAz")))))) + ;;; minibuf-tests.el ends here |