emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: completion-auto-help


From: Drew Adams
Subject: RE: completion-auto-help
Date: Fri, 11 Nov 2005 09:47:45 -0800

    complete.el extends the meaning of the variable so that a non-nil non-t
    value means "show the help but only on the second attempt to complete".
    I.e. if TAB finds nothing to complete, the first TAB will just
    say "[Next
    char not unique]" without bringing up the *Completions* buffer, and the
    second TAB will then bring up the *Completions* buffer.
    It happens to be my favorite behavior.

Thanks. I knew about that behavior, but I couldn't make out the related use
of completion-auto-help.

I still don't see it in complete.el (it is only tested there, never bound),
and I don't see it in C code either. Where is `completion-auto-help's
non-nil, non-t value bound?

If it is only a user who sets such a value, then shouldn't the non-nil,
non-t behavior be documented for the user option? I don't see that, as I
mentioned.

    > 2. New feature proposal - How about allowing for an
    > "always-display-*Completions*' behavior:

    >  - t means what it means now
    >  - nil means what it means now
    >  - other means this:

    We could have

       t = what it means now
       nil = what it means now
       eager = what you suggest (always show the completions and update them
                                 after each key stroke)
       lazy = what complete.el does for non-nil non-t values

Good.

    > IOW, with this value, the user would not need to hit `TAB' to display
    > *Completions*. (S)he would see the list of completions
    whenever there are
    > more than one. There is currently no way to make `completing-read',
    > `read-file-name' etc. display *Completions* from the outset.

    Indeed.  The closest is icomplete-mode.

Yes, in fact, I implement this behavior with regexp matching in Icicles,
where I refer to it, by analogy, as "apropos icompletion" ("apropos" because
it uses a regexp, "icompletion" because it is incremental completion). That
was one of the motivations for this request: I currently have no way to
display the candidates right from the beginning - a user must first request
the display (via, e.g., `TAB').

I proposed `eager' _without_ the automatic update after each keystroke, in
order to allow that as an additional (separate) option. I think that would
be better. Some people (or some functions) might like to display the list of
candidates right from the beginning, as a kind of menu, but prefer to update
it only upon demand (via `TAB'), not automatically at each keystroke. Some
people might find the automatic list updating to be distracting (I find it
very helpful, personally).

IOW, I think we should separate the control of when to display of
*Completions* from the control of whether or not to automatically update it.
The difference only makes sense, probably, for the `eager' value, so we
could just have two values instead of one: `eager-with-auto-update' and
`eager-without-auto-update'.

My implementation of this kind of incremental completion in Icicles uses an
option that is checked in the special self-insert I use. The option values:

 non-nil means update *Completions* incrementally, as you type.
  t means do nothing if *Completions* is not already displayed.
  non-nil and non-t means display *Completions* and update it.

So, for instance, non-nil, non-t causes character insertion to display
*Completions*. That does not take care of displaying it, however, right from
the beginning, which is why I made this request. The special self-insert
gets called inside `completing-read', upon insertion, but I see no way to
get `completing-read' to display *Completions* without any user action.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]