Subject: bug#11339: 24.1.50; read-{buffer,file-name}-completion-ignore-case fails on non-ascii

From: Eli Zaretskii <[email-masked]>
Date: Thu, 07 Nov 2019 18:08:00 +0200

> From: Stefan Monnier <[email-masked]>
> Cc: Eli Zaretskii <[email-masked]>,  [email-masked],  [email-masked]
> Date: Thu, 07 Nov 2019 11:01:01 -0500
> 
> I think the core of the bug is reproduced below:
> 
>     M-: (let ((completion-ignore-case t)) (try-completion "bah" '("bah" "bAh")))
> 
> this returns t instead of returning "bah".
> Probably an error in the handling of `matchcount` in `try-completion`.

Are you sure?  I think the return value of t is expected, per these
comments in try-completion:

	      if (completion_ignore_case)
		{
		  /* If this is an exact match except for case,
		     use it as the best match rather than one that is not an
		     exact match.  This way, we get the case pattern
		     of the actual match.  */
		  if ((matchsize == SCHARS (eltstring)
		       && matchsize < SCHARS (bestmatch))
		      ||
		      /* If there is more than one exact match ignoring case,
			 and one of them is exact including case,
			 prefer that one.  */
		      /* If there is no exact match ignoring case,
			 prefer a match that does not change the case
			 of the input.  */