Fix case-insensitive completion of buffer names
* test/src/minibuf-tests.el (test-try-completion-ignore-case): New test, suggested by Stefan Monnier <monnier@iro.umontreal.ca>. * src/minibuf.c (Ftry_completion): Don't treat strings that are identical but for the case as if they were identical for the purposes of not counting the same string twice. This fixes case-insensitive completion when all the candidates are identical but for the letter-case. (Bug#11339)
This commit is contained in:
parent
a1a724d73a
commit
f2019fc676
2 changed files with 21 additions and 5 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue