Subject: 24.3.50; Too few completions shown when case ignored

From: Stephen Berman <[email-masked]>
Date: Fri, 19 Jul 2013 14:53:17 +0200

-1. cd /tmp; touch a A
0. emacs -Q
1. M-x set-variable RET read-file-name-completion-ignore-case RET t RET
2. C-x C-f a TAB => [Complete, but not unique]
3. TAB => *Completions* buffer shows only file `a'.

Likewise, if at step 2 you type C-c C-f A TAB, then after the TAB in
step 3, *Completions* shows only file `A'.

If I debugged this correctly, the problem is due to completion--twq-all
not distinguishing between prefix strings for completions that differ
only in case.  The following patch fixes this problem for me (I tried to
reuse the relevant part of the requoting code, but haven't tested such
cases).

=== modified file 'lisp/minibuffer.el'
*** lisp/minibuffer.el	2013-05-30 03:18:06 +0000
--- lisp/minibuffer.el	2013-07-19 07:26:59 +0000
***************
*** 568,573 ****
--- 568,580 ----
                   (cl-assert (string-prefix-p prefix completion 'ignore-case) t)
                   (let* ((new (substring completion (length prefix)))
                          (qnew (funcall qfun new))
+  			(rest (substring completion 0 (length prefix)))
+ 			(qrest (funcall qfun rest))
+ 			;; Distinguish completions that differ only in case.
+  			(qprefix (if (completion--string-equal-p qprefix qrest)
+  				     (propertize qrest 'face
+  						 'completions-common-part)
+  				   qprefix))
                          (qcompletion (concat qprefix qnew)))
  		   ;; FIXME: Similarly here, Cygwin's mapping trips this
  		   ;; assertion.

In GNU Emacs 24.3.50.28 (x86_64-suse-linux-gnu, GTK+ Version 3.4.4)
 of 2013-07-18 on rosalinde
Bzr revision: 113449 [email-masked]
Windowing system distributor `The X.Org Foundation', version 11.0.11203000
System Description:	openSUSE 12.2 (x86_64)

Configured using:
 `configure --without-toolkit-scroll-bars CFLAGS=-g3 -O0'

Important settings:
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=local
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t