Subject: bug#12638: 24.2.50; FR: Some suggestions for icomplete-mode

From: "Drew Adams" <[email-masked]>
Date: Mon, 17 Dec 2012 19:09:37 -0800

> An empty space is actually not a bad idea.  I also considered
> a checkmark ?, but a space is simple and works everywhere.
> 
> > Drew suggested unicode '*'.

Actually, it's a user option, with Unicode star (not asterisk) as the default
value.  I experimented with Unicode checkmark also.  In principle it is the
clearest symbol, in terms of conveying the meaning of completeness.  But it
didn't look so good (not so clear visually), at least with the font that I
tried.  My defcustom has these commented lines indicating other symbols that
might be useful:

;; (string ?\u2714 ?\  ) ; check mark
;; (string ?\u29eb ?\  ) ; diamond
;; (string ?\u2205 ?\  ) ; empty set

The empty set too has good meaning here, but the Unicode symbol is tiny and
unclear (and some people might confuse it with zero if unfamiliar with the
symbol).  An alternative empty-set representation is of course {}, but braces
are already used for another purpose here.

> Yes, that could work as well.  Also he suggested putting it within the
> {...} rather than before it.
> 
> > I went with a control character because:
> >     1. It suggests what my fingers should do
> 
> Aaaaahhhhhh!!!!!! That's where it came from!!  OK, it makes 
> more sense, now.  So, there is logic to it, but I completely missed it.
> 
> > ps: Is ^M as a literal two character text more palatable 
> > than ^M as an escape glyph.
> 
> Same difference, since it's only the visual appearance that
> matters here.

Except that they do not have the same visual appearance.  The latter uses face
`escape-glyph', no?  Of course that could be overridden.

I would advise against confusing the symbol for complete-but-not-unique with
^M/RET as the key for accepting the value.  The fact that many users are not
aware that ^M and RET (the Enter key) are at all related is only one reason.
Another reason is that RET is always possible - it just behaves differently if
the input is already complete.

There is one advantage to using a control char (or its text representation):
users are unlikely to think that it is a char that is part of a completion
candidate.  Although not common, it is possible for a Unicode star or whatever
to be part of a completion candidate.  I discounted this problem as unimportant,
but it is at least real.  (The same is true for any character, however,
including control-M.)

FWIW, another reason I went with Unicode star as the default was that in my case
the code should work for pre-Unicode Emacs versions, and in that case the
default is an ordinary asterisk - related to the star.  That reason won't apply
to icomplete.el, of course.