unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Phil Hagelberg <phil@hagelb.org>
To: emacs-devel@gnu.org
Subject: Changes to completing-read
Date: Sat, 18 Oct 2008 21:31:21 -0700	[thread overview]
Message-ID: <87myh1dx46.fsf@hagelb.org> (raw)


I've been building a couple tools that use the completing-read function
for more advanced completions, and I've got some questions about how it
behaves when a function is passed as the "collection" argument.

From the completing-read docstring:

> collection can also be a function to do the completion itself.
> predicate limits completion to a subset of collection.
> See `try-completion' and `all-completions' for more details
>  on completion, collection, and predicate.

It looks like the function gets called four times when the user presses
TAB, and the only difference between the four calls is the last
argument. t, nil, 'lambda, and the cons (boundaries . "") are
passed. According to the docstrings of try-completion and
all-completions, t and nil should be passed to the collection function
when those two functions get called as part of the completion process
somehow. But I have no idea where 'lambda or (boundaries . "") are
coming from.

From the try-completion docstring:

> Return common substring of all completions of string in collection.
> Test each possible completion specified by collection
> to see if it begins with string.

From the all-completions docstring:

> Search for partial matches to string in collection.
> Test each of the possible completions specified by collection
> to see if it begins with string.

It's rather unclear from the docstrings, but from what I can piece
together, the "collection" function should act totally differently based
on the value of the third argument.

So it seems there are really three problems:

* The description overall behaviour of the "collection" function is spread
  out over three separate docstrings and is even then not very clear.

* One function (collection) is supposed to perform four distinct tasks
  based on the value of one of its arguments. (Though this is probably
  justified for backwards-compatibility reasons; seems fairly
  understandable.)

* Only two of the four tasks that the function is supposed to perform are
  documented at all.

Is this accurate? Could someone explain the meaning of the mystery
arguments? I would like to submit a documentation patch, but I feel that
my understanding of the subject is very sketchy, and the implementation
is in C, so I can't just dive in and understand it.

thanks,
Phil




             reply	other threads:[~2008-10-19  4:31 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-19  4:31 Phil Hagelberg [this message]
2008-10-19  7:35 ` Changes to completing-read Eli Zaretskii
2008-10-20  3:46   ` Phil Hagelberg
2008-10-19 13:03 ` Stefan Monnier
2008-10-20  4:28   ` Phil Hagelberg
2008-10-20 13:31     ` Stefan Monnier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87myh1dx46.fsf@hagelb.org \
    --to=phil@hagelb.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).