From: Toby Cubitt <tsc25@cantab.net>
To: Dmitry Gutov <dgutov@yandex.ru>
Cc: emacs-devel@gnu.org
Subject: Re: Emacs completion matches selection UI
Date: Tue, 31 Dec 2013 15:52:36 +0000 [thread overview]
Message-ID: <20131231155235.GA9294@c3po> (raw)
In-Reply-To: <877gal5bzc.fsf@yandex.ru>
Hi Dmitry,
I really wasn't trying to promote completion-UI over Company. Indeed, I
completely agree (as I tried to say in my previous post) that
company-mode is much more sophisticated than completion-UI, because it
aims to do something much more ambitious.
Completion-UI was only ever intended as "plumbing": an elisp package that
provides functions and hooks to let you display and select completion
candidates in various UIs. Nothing more.
Company does *much* more than this. It's practically a way of life :)
I considered switching to Company for the predictive-mode UI, since I'm
really not that interested in coding and maintaining user-interface
code. (It's both tedious, and difficult to do well.) But Company was too
all-encompassing: the UI elements weren't cleanly separated out from the
rest of the mode, and I couldn't see how to make use of them without
buying into the whole company-mode shebang. Maybe that's changed now.
Though I still can't seem to see a generic UI package separate from the
rest of company-mode.
I've got nothing at all against company-mode. Indeed, if I remember
right, someone (you?) has added predictive-mode as a company-mode source,
which is great! But I didn't want to force people to use company-mode in
order to use my predictive package. I just wanted to provide simple UIs
for displaying and selecting completions.
I deliberately restricted completion-UI to do just that one simple task:
provide UIs for displaying and selecting completion candidates in a more
"modern" way than the *Completions* buffer. This seems to align with
what's being discussed here. Whereas I can't see Company being added to
Emacs as the generic Emacs completion UI.
I'd be very happy to see the UI parts of Company stripped out and made
into a simple, generic completion UI package and added to Emacs. Then I
could switch to using that, and ditch completion-UI and the concomitant
development and maintenance burden!
But it's inevitable each of the various completion frameworks will each
have a few very useful features that don't exist elsewhere. A better
approach is would be to, separate out and merge any useful parts of the
various packages that make sense as a generic Emacs completion UI
framework. But even if none of the code gets used, I still think you'll
end up with something much closer to completion-UI than Company.
[Further detailed comments inline, below]
Cheers,
Toby
On Tue, Dec 31, 2013 at 06:30:47PM +0400, Dmitry Gutov wrote:
> When I looked into the different completion interfaces available for
> Emacs, Completion-UI came out a lowest denominator in terms of features
> that can be supported by completion backends.
Good! Because it's precisely intended to be a "lowest common
denominator".
> Both Company and Auto-Complete support displaying candidate "summaries"
> (usually calltips and/or first line of the candidate's docstring),
> fuller documentation (in a new buffer, or in a popup, respectively), and
> Company also allows backends to return the candidate's location (as a
> position in a buffer or a line in a file), which has a respective "show
> definition" command. These are quite useful for programming.
Yes, I can see why that could be a useful feature for programming
modes. It doesn't sound particularly difficult to implement.
> Completion-UI, from what I can tell, only considers candidates as
> strings to be inserted, without any introspection facilities.
Yes, that's accurate.
Since completion-UI was originally written as the UI for predictive-mode
(which is most useful in text modes), it's strong on plain text features,
and weaker on programming-related features. For example, last time I
looked completion-UI's auto-completion-mode was much more sophisticated
than that in any other package (which lacked many of the features that
are crucial to implementing predictive completion).
That's why I think merging the best bits of the generic UI stuff from all
the various frameworks would be the best way to go.
> And because your source interface doesn't provide much, Completion-UI
> user-interfaces don't handle the extra options either. So, as things
> currently stand, if one was to write translation functions from Company
> backends and Auto-Complete sources, a whole slice of their features
> would be lost (see `company-backends' docstring for some details).
>
> Conversely, Company also provides swappable front-ends (see the
> docstring of `company-frontends'), so from where I stand, it should be
> easier to adapt any widgets you have implemented that we don't have as
> new Company front-ends.
Yes, but then you have to buy into the whole company-mode world. Which is
fine if that's what you want. Not so useful for a generic Emacs
completion UI.
> Toby Cubitt <toby-predictive@dr-qubit.org> writes:
> > - has completely modularised completion user-interfaces, which can be
> > used in any combination the user likes (within reason)
>
> You can have some of that in Company by setting `company-frontends' to a
> buffer-local value. Probably. I've never tried that, though, and I'm not
> sure if I'll ever want to, personally.
Really? Some people like auto-displayed tooltips, some people hate
them. Some people like displaying completions in the echo area, some find
it a distraction. Makes sense to me (given that this is Emacs we're
talking about) to let people customize it the way *they* want via
customization options, with sensible defaults.
> > - comes with all the UIs people usually ask for: in-buffer text
> > completion, tooltips (both real tooltips, and the "pop-up tip"
> > overlay-based tooltips), drop-down menus, pop-up mini-frames, list of
> > completions in echo area, hotkeys to select completions...
>
> Company doesn't have mini-frames and, I guess, drop-down menus. Is the
> latter a graphical menu that only allows interaction with mouse and
> arrow keys?
Yes. And a "completion browser" that organises all the completions into a
hierarchical set of menus. (As with most things, this generic version can
be overridden by particular completion sources to provide a specific
version that's more useful. I use that e.g. in the predictive-mode LaTeX
support when completing LaTeX commands, environments, labels, etc.)
> > - lets you add a new completion UI with a single call to the
> > `completion-ui-register-interface' macro
>
> Company allows you to do that with a handy macro called `defun'.
Needlessly snarky. You still need some way to tell Company about the new
UI, so that it knows to invoke it.
> > - lets you register a new completion source with a single call to the
> > `completion-ui-register-source' macro
>
> Ditto.
Sure. And you'd hope all the other completion frameworks do too! (They
do.)
> > Completion-UI isn't another company-mode or anything or auto-complete-mode.
> > It was always intended to be "plumbing": a generic completion user-interface
> > toolkit that other packages could use, to unify the interface for selecting
> > completions in Emacs. It would, I think, be rather easy to modify
> > company-mode, auto-complete-mode, anything.el, etc. to use completion-UI
> > instead of their built-in UI code.
>
> See above. It would be a lossy conversion.
It's not a conversion at all. The sophisticated parts of company aren't
about displaying menus, or popups, or tooltips, etc. I'm just saying that
if you had a generic Emacs completion UI, you could (and should) rebase
Company's UI on that. This is a small and boring part of
Company. Wouldn't you be happy to see that included in Emacs, so everyone
could benefit instead of reimplementing the wheel?
That's why I went to the effort many years ago now of separating the UI
code out of predictive-mode into something generic. Unfortunately,
everyone then went off and invented new wheels (the UI code in Company,
anything, auto-compelte, etc. etc.).
> Also, I think `company-backends' provides a nicer API than
> `completion-ui-register-source'.
Could well be. So help design a good API for a generic Emacs completion UI.
> > I use (a slightly modified version of) Tomohiro
> > Matsuyama's popup.el library for the overlay-based tooltips. I don't know
> > if Tomohiro has papers on file.
>
> It would be nice to be able to use it, but from what I see Matsuyama is
> not the sole significant contributor. I opened a related issue
> (https://github.com/auto-complete/popup-el/issues/50), but there's been
> no response so far.
Shame.
> By the way, why are you bundling a modified version of popup.el instead
> of contributing the changes upstream?
I simply haven't found time. I haven't even had time to roll a new
predictive release for a while now (though the git version still gets
updates). Plus my popup.el change is a trivial one-liner.
--
Dr T. S. Cubitt
Royal Society University Research Fellow
and Fellow of Churchill College, Cambridge
Centre for Quantum Information
DAMTP, University of Cambridge
email: tsc25@cantab.net
web: www.dr-qubit.org
next prev parent reply other threads:[~2013-12-31 15:52 UTC|newest]
Thread overview: 258+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-18 16:13 Emacs completion matches selection UI Ted Zlatanov
2013-11-18 20:00 ` Bozhidar Batsov
2013-11-18 20:54 ` Andreas Röhler
2013-11-18 21:15 ` Ted Zlatanov
2013-11-19 0:43 ` Stefan Monnier
2013-11-19 9:52 ` Dmitry Gutov
2013-11-19 13:41 ` Stefan Monnier
2013-11-19 14:00 ` Dmitry Gutov
2013-11-19 14:58 ` Ted Zlatanov
2013-11-19 17:50 ` Stefan Monnier
2013-11-19 21:07 ` Ted Zlatanov
2013-11-20 0:28 ` Stefan Monnier
2013-11-20 1:30 ` Ted Zlatanov
2013-11-20 3:22 ` Stefan Monnier
2013-11-20 17:52 ` Ted Zlatanov
2013-11-20 19:10 ` Stefan Monnier
2013-11-20 20:00 ` Ted Zlatanov
2013-11-20 15:57 ` Josh
2013-11-21 0:52 ` Juri Linkov
2013-11-21 3:48 ` Eli Zaretskii
2013-11-22 0:10 ` Juri Linkov
2013-11-22 7:36 ` Eli Zaretskii
2013-11-22 12:33 ` Ted Zlatanov
2013-11-25 13:28 ` Ted Zlatanov
2013-11-25 15:18 ` Stefan Monnier
2013-12-16 15:17 ` Ted Zlatanov
2013-12-16 18:35 ` Stefan Monnier
2013-12-16 22:15 ` Ted Zlatanov
2013-12-17 2:10 ` Stefan Monnier
2013-12-17 10:49 ` Ted Zlatanov
2013-12-17 18:29 ` Stefan Monnier
2013-12-17 20:59 ` Ted Zlatanov
2013-12-18 1:58 ` Stephen J. Turnbull
2013-12-18 3:09 ` Ted Zlatanov
2013-12-18 4:47 ` Stephen J. Turnbull
2013-12-18 14:43 ` Ted Zlatanov
2013-12-18 15:51 ` Eli Zaretskii
2013-12-18 16:38 ` Ted Zlatanov
2013-12-18 17:05 ` Eli Zaretskii
2013-12-18 17:18 ` Ted Zlatanov
2013-12-18 17:37 ` Stephen J. Turnbull
2013-12-18 19:05 ` Ted Zlatanov
2013-12-18 21:11 ` chad
2013-12-19 3:40 ` Stefan Monnier
2013-12-19 15:49 ` Ted Zlatanov
2013-12-19 17:30 ` Dmitry Gutov
2013-12-19 18:44 ` Ted Zlatanov
2013-12-19 21:44 ` Dmitry Gutov
2013-12-20 1:15 ` Ted Zlatanov
2013-12-20 3:06 ` Stephen J. Turnbull
2013-12-20 3:08 ` Dmitry Gutov
2013-12-20 11:49 ` Ted Zlatanov
2013-12-20 13:18 ` Dmitry Gutov
2013-12-20 14:59 ` Ted Zlatanov
2013-12-22 1:45 ` Stefan Monnier
2013-12-22 2:29 ` Dmitry Gutov
2013-12-22 11:07 ` Stefan Monnier
2013-12-22 16:07 ` Dmitry Gutov
2013-12-22 22:50 ` enabling company-capf support in cfengine.el (was: Emacs completion matches selection UI) Ted Zlatanov
2013-12-23 0:17 ` enabling company-capf support in cfengine.el Dmitry Gutov
2013-12-23 1:11 ` Ted Zlatanov
2013-12-23 1:32 ` Dmitry Gutov
2014-01-16 13:12 ` Dmitry Gutov
2014-01-16 16:06 ` Stefan Monnier
2014-01-16 17:39 ` Dmitry Gutov
2014-01-17 13:04 ` Stefan Monnier
2014-01-18 14:13 ` Dmitry Gutov
2014-01-19 2:37 ` Stefan Monnier
2014-01-19 16:44 ` Dmitry Gutov
2014-01-19 20:19 ` Stefan Monnier
2014-01-19 20:44 ` David Engster
2014-01-20 0:13 ` Dmitry Gutov
2014-01-20 2:14 ` Stephen J. Turnbull
2014-01-20 2:39 ` John Yates
2014-01-20 3:22 ` Stephen J. Turnbull
2014-01-20 7:10 ` David Kastrup
2014-01-20 14:22 ` John Yates
2014-01-20 14:55 ` David Kastrup
2014-01-20 15:09 ` clang vs free software (was: enabling company-capf support in cfengine.el) Stefan Monnier
2014-01-20 19:47 ` clang vs free software David Engster
2014-01-21 14:42 ` Richard Stallman
2014-01-21 15:02 ` David Kastrup
2014-01-21 15:20 ` Dmitry Gutov
2014-01-22 15:31 ` Richard Stallman
2014-01-22 17:24 ` Dmitry Gutov
2014-01-21 15:34 ` John Yates
2014-01-21 16:00 ` Rüdiger Sonderfeld
2014-01-21 16:25 ` joakim
2014-01-21 16:34 ` Rüdiger Sonderfeld
2014-01-21 16:38 ` joakim
2014-01-21 18:50 ` Rüdiger Sonderfeld
2014-01-21 18:00 ` Thien-Thi Nguyen
2014-01-21 18:44 ` Rüdiger Sonderfeld
2014-01-23 10:55 ` Richard Stallman
2014-01-23 11:01 ` David Kastrup
2014-01-23 14:26 ` Helmut Eller
2014-01-25 23:02 ` Richard Stallman
2014-01-25 23:28 ` Daniel Colascione
2014-01-26 1:35 ` Lennart Borgman
2014-01-26 6:45 ` David Kastrup
2014-01-26 12:13 ` Daniel Colascione
2014-01-26 12:35 ` Lennart Borgman
2014-01-26 14:45 ` David Kastrup
2014-01-26 20:06 ` Richard Stallman
2014-01-26 20:06 ` Richard Stallman
2014-01-26 10:22 ` Helmut Eller
2014-01-26 11:12 ` David Kastrup
2014-01-26 12:36 ` Helmut Eller
2014-01-26 14:54 ` David Kastrup
2014-01-26 20:06 ` Richard Stallman
2014-01-26 15:12 ` Stefan Monnier
2014-01-26 15:15 ` Lennart Borgman
2014-01-26 15:35 ` David Kastrup
2014-01-26 15:46 ` Lennart Borgman
2014-01-23 16:35 ` Rüdiger Sonderfeld
2014-01-23 18:04 ` David Engster
2014-01-22 2:06 ` unic0rn
2014-01-20 15:57 ` enabling company-capf support in cfengine.el Stephen J. Turnbull
2014-01-20 3:32 ` Óscar Fuentes
2014-01-20 13:59 ` John Yates
2014-01-20 14:30 ` David Kastrup
2014-01-20 17:01 ` John Yates
2014-01-20 2:17 ` Stefan Monnier
2014-01-19 16:54 ` Dmitry Gutov
2014-01-19 20:21 ` Stefan Monnier
2014-01-19 23:57 ` Dmitry Gutov
2014-01-20 2:20 ` Stefan Monnier
2014-01-20 2:33 ` Dmitry Gutov
2014-01-20 13:41 ` Stefan Monnier
2013-12-23 1:36 ` Emacs completion matches selection UI Stefan Monnier
2013-12-23 2:12 ` Dmitry Gutov
2013-12-23 13:33 ` Stefan Monnier
2013-12-20 1:19 ` Stephen J. Turnbull
2013-12-20 1:17 ` Stephen J. Turnbull
2013-12-20 14:32 ` Stefan Monnier
2013-12-20 15:54 ` Ted Zlatanov
2013-12-21 3:32 ` Stephen J. Turnbull
2013-12-21 4:58 ` Ted Zlatanov
2013-12-22 2:05 ` Stefan Monnier
2013-12-22 23:15 ` Ted Zlatanov
2013-12-23 1:59 ` Stefan Monnier
2013-12-23 12:28 ` Ted Zlatanov
2013-12-23 13:42 ` Stefan Monnier
2013-12-23 14:52 ` Ted Zlatanov
2013-12-30 20:47 ` Toby Cubitt
2013-12-31 0:20 ` Leo Liu
2013-12-31 7:48 ` joakim
2013-12-31 14:30 ` Dmitry Gutov
2013-12-31 15:52 ` Toby Cubitt [this message]
2013-12-31 17:45 ` joakim
2014-01-02 18:54 ` Dmitry Gutov
2014-01-02 18:10 ` Stefan Monnier
2014-01-03 17:49 ` Ted Zlatanov
2014-01-03 19:36 ` Stefan Monnier
2014-01-04 0:48 ` Toby Cubitt
2014-01-04 3:45 ` Stefan Monnier
2014-01-06 4:47 ` Toby Cubitt
2014-01-06 23:38 ` Ted Zlatanov
2014-01-07 3:57 ` Toby Cubitt
2014-01-04 9:21 ` João Távora
2014-01-06 23:21 ` Ted Zlatanov
2014-01-02 20:20 ` Dmitry Gutov
2014-01-02 22:58 ` Toby Cubitt
2014-01-03 2:40 ` Stefan Monnier
2014-01-03 14:30 ` Toby Cubitt
2014-01-03 16:23 ` Dmitry Gutov
2014-01-03 16:48 ` Toby Cubitt
2014-01-03 19:32 ` Stefan Monnier
2014-01-03 22:06 ` Toby Cubitt
2014-01-04 3:39 ` Stefan Monnier
2014-01-06 4:00 ` Toby Cubitt
2014-01-03 16:35 ` Toby Cubitt
2014-01-03 17:46 ` Thierry Volpiatto
2014-01-04 2:39 ` Dmitry Gutov
2014-01-04 3:54 ` Stefan Monnier
2014-01-05 4:08 ` Dmitry Gutov
2014-01-05 16:04 ` Stefan Monnier
2014-01-06 4:25 ` Dmitry Gutov
2014-01-06 5:25 ` Toby Cubitt
2014-01-06 2:39 ` Toby Cubitt
2014-01-06 4:03 ` Stefan Monnier
2014-01-06 5:35 ` Toby Cubitt
2014-01-06 5:55 ` Dmitry Gutov
2014-01-06 14:47 ` Stefan Monnier
2014-01-06 15:54 ` Toby Cubitt
2014-01-06 20:53 ` Stefan Monnier
2014-01-06 23:45 ` Ted Zlatanov
2014-01-06 7:36 ` Dmitry Gutov
2014-01-06 15:51 ` Toby Cubitt
2014-01-07 0:17 ` Dmitry Gutov
2014-01-07 3:32 ` Toby Cubitt
2014-01-07 23:23 ` Dmitry Gutov
2014-01-08 2:58 ` Toby Cubitt
2014-01-08 3:38 ` Bob Bobeck
2014-01-08 3:47 ` Toby Cubitt
2014-01-08 9:27 ` Richard Stallman
2014-01-08 15:37 ` Ted Zlatanov
2014-01-08 4:49 ` Stefan Monnier
2014-01-08 15:33 ` Ted Zlatanov
2014-01-08 16:11 ` Toby Cubitt
2014-01-09 7:12 ` Dmitry Gutov
2013-12-23 13:45 ` John Yates
2013-12-23 16:02 ` Stefan Monnier
2013-12-24 2:47 ` John Yates
2013-12-28 14:02 ` Stefan Monnier
2013-12-28 16:43 ` John Yates
2013-12-30 12:55 ` Stefan Monnier
2013-12-30 16:32 ` João Távora
2014-01-04 23:02 ` Stefan Monnier
2014-01-05 2:13 ` João Távora
2014-01-05 16:11 ` Stefan Monnier
2014-01-06 23:48 ` Ted Zlatanov
2014-01-07 3:15 ` Stefan Monnier
2014-01-07 16:13 ` Ted Zlatanov
2014-01-07 17:18 ` João Távora
2014-01-07 18:10 ` Josh
2014-01-07 19:42 ` David Kastrup
2014-01-08 3:54 ` Josh
2014-01-07 3:16 ` Stefan Monnier
2014-01-07 16:12 ` Ted Zlatanov
2013-12-28 15:59 ` João Távora
2013-12-28 17:00 ` John Yates
2013-12-28 17:40 ` Josh
2013-12-19 4:53 ` Stephen J. Turnbull
2013-12-19 5:45 ` chad
2013-12-19 7:03 ` Stephen J. Turnbull
2013-12-19 7:59 ` Aaron Ecay
2013-12-19 15:29 ` Stephen J. Turnbull
2013-12-19 17:41 ` Eli Zaretskii
2013-12-19 18:46 ` Ted Zlatanov
2013-12-20 0:53 ` Stephen J. Turnbull
2013-12-19 6:23 ` Stephen J. Turnbull
2013-11-19 16:24 ` Eli Zaretskii
2013-11-21 10:17 ` Dmitry Gutov
2013-11-21 16:30 ` Eli Zaretskii
2013-11-22 5:38 ` Stephen J. Turnbull
2013-11-22 15:19 ` Eli Zaretskii
2013-11-23 10:03 ` Stephen J. Turnbull
2013-11-19 13:48 ` Ted Zlatanov
2013-11-19 18:03 ` Stefan Monnier
2013-11-20 0:10 ` Gregor Zattler
2013-11-20 1:25 ` Ted Zlatanov
2013-11-20 17:59 ` John Yates
2013-11-19 0:47 ` Juri Linkov
2013-11-19 11:18 ` Tom
2013-11-19 14:00 ` Stefan Monnier
2013-11-20 0:45 ` Juri Linkov
2013-11-20 7:34 ` martin rudalics
2013-11-20 7:50 ` Tom
2013-11-21 0:45 ` Juri Linkov
2013-11-21 7:41 ` martin rudalics
2013-11-22 0:18 ` Juri Linkov
2013-11-22 10:26 ` martin rudalics
2013-11-19 19:44 ` Dmitry Gutov
2013-11-20 7:39 ` Eric Abrahamsen
2013-11-19 17:33 ` Sebastian Wiesner
-- strict thread matches above, loose matches on Subject: below --
2013-12-30 20:35 Barry OReilly
2014-01-01 18:12 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131231155235.GA9294@c3po \
--to=tsc25@cantab.net \
--cc=dgutov@yandex.ru \
--cc=emacs-devel@gnu.org \
--cc=toby-dated-1389714774.6ee2f8@dr-qubit.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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.