From: Drew Adams <drew.adams@oracle.com>
To: Oleh Krehel <ohwoeowho@gmail.com>,
Stefan Monnier <monnier@iro.umontreal.ca>
Cc: 20365@debbugs.gnu.org
Subject: bug#20365: 24.5; all-completions returns duplicates for Info-read-node-name-1
Date: Sun, 19 Apr 2015 07:43:43 -0700 (PDT) [thread overview]
Message-ID: <132790ef-aecc-4c38-912b-facfc988abcb@default> (raw)
In-Reply-To: <CAA01p3ozqEygTNsmWMDwvcYSnJKCQSqJ8dKnSTZJuvmierPUTA@mail.gmail.com>
> It just makes sense for any element of what
> `all-completions' returns to be a valid answer.
Interesting point of view. Sounds familiar... ;-)
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=1085
> About the duplicate entries, I think it should be the responsibility
> of the caller to remove the duplicates. Here's my line of thought:
> a completion function is expected to have an O(N) complexity, where N
> is the amount of candidates. Removing duplicates is O(N^2) at worst,
> and O(NlogN) at best. So the completion function should not attempt to
> remove the duplicates. It's doesn't affect the performance when I do
> it for 1000 candidates, but when it's 20k (`describe-function') it
> can have an impact.
>
> The point is that the collection passed to the completion function
> can be very large, and all but O(N) algorithms should be avoided. On
> the other hand, the caller knows exactly the type of data that it's
> passing and may be able to remove the duplicates in an efficient
> way.
FWIW -
I agree that the calling code should control duplicate removal.
(Definitely, `all-completions' should not do that.)
But it can make sense to allow the calling program to optionally
"reach inside `completing-read'" to do its duplicate removal.
In Icicles, the caller can cause `completing-read' itself to remove
duplicates by binding global variable `icicle-transform-function'.
Because `completing-read' does some processing (e.g. sorting)
after computation of the candidates, this filter promotion into
`completing-read' can save some time. It can also give users
dynamic control over the candidates to be matched (the completion
domain).
The value of variable `icicle-transform-function' is a function
used to transform the list of completion candidates. Users can
toggle such transforming on/off using `C-$' during completion.
The most common use, by far, of `icicle-transform-function' is
to bind it to a remove-duplicates function. Other uses include
switching to a particular subset of candidates, against which
user input is then matched.
For example, using `C-$' with `icicle-apropos-value' toggles
filtering the domain of initial candidates according to the
prefix argument, as follows:
* no prefix arg: only user options (+ values)
* < 0: only commands (+ definitions)
* > 0: only faces (+ plists)
* = 0: only options (+ values), commands (+ defs),
faces (+ plists)
next prev parent reply other threads:[~2015-04-19 14:43 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-18 16:11 bug#20365: 24.5; all-completions returns duplicates for Info-read-node-name-1 Oleh Krehel
2015-04-18 17:41 ` Stefan Monnier
2015-04-18 17:49 ` Oleh Krehel
2015-04-19 2:04 ` Stefan Monnier
2015-04-19 11:53 ` Oleh Krehel
2015-04-19 14:43 ` Drew Adams [this message]
2015-04-19 16:44 ` Dmitry Gutov
2015-04-19 17:00 ` Oleh Krehel
2015-04-19 17:12 ` Dmitry Gutov
2015-04-20 2:29 ` Stefan Monnier
2015-04-20 8:38 ` Oleh Krehel
2015-04-20 12:30 ` Oleh Krehel
2022-04-17 10:51 ` Lars Ingebrigtsen
2015-04-20 14:38 ` Stefan Monnier
2015-04-20 14:52 ` Oleh Krehel
2015-04-20 19:14 ` Stefan Monnier
2015-04-18 23:40 ` Drew Adams
2015-04-19 1:50 ` 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=132790ef-aecc-4c38-912b-facfc988abcb@default \
--to=drew.adams@oracle.com \
--cc=20365@debbugs.gnu.org \
--cc=monnier@iro.umontreal.ca \
--cc=ohwoeowho@gmail.com \
/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).