unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Óscar Fuentes" <ofv@wanadoo.es>
To: emacs-devel@gnu.org
Subject: Re: Making `interactive' conditional
Date: Sun, 10 Jan 2016 20:31:20 +0100	[thread overview]
Message-ID: <874melfczb.fsf@wanadoo.es> (raw)
In-Reply-To: 2b423be0-9378-44d7-abad-a649fdf1e3c2@default

Drew Adams <drew.adams@oracle.com> writes:

[snip]

>> M-x is for *executing* commands,
>> not for learning about them (unless your learning method consists on
>> executing commands you don't know about).
>
> Very wrong.  `M-x' is for lots of things.  And discovery,
> even for the limited completion that vanilla Emacs offers,
> is one of the most important.

The fact that M-x shows a list of candidates does not make it an
adequate tool for discovering. The fact that it lists *everything*,
regardless of what yo are doing at the moment, less so.

> Don't you ever use `C-h f' or `C-h v' to discover/explore
> (even for spelling information)?

I'm talking about M-x. `C-h *' is a different thing.

> Are you going to go whole-hog on this new idea, and so
> decide to limit the completion candidates for `C-h f' to
> only the functions that some Emacs Dev programmer decided
> are "appropriate" for the current context?

AFAIK, nobody suggested changing `C-h *', you just introduced that
topic. Please don't do that. It is not a constructive way of discussing
technical matters.

[snip]

> Even thinking that Emacs Dev can specify what constitutes
> "the current context" for a given user is presumptuous.

But it is not presumptuous to put code in the command that checks the
context and errors out if it it not the correct one. That's something
decided by the developer, right? Overriding checks that throws errors as
something beyond the reach of the ordinary user, overriding the M-x
filter is one customization change away (in case it was active, to begin
with). So I don't understand what you are worried about.

> Not only does it depend on many tangible factors - more
> than just the current mode(s).  It depends also on intangible
> factors - in particular the user's current aim/intention.

But you are not opposed to checks in the commands about its
applicability. If a command has a check that errors out on non-editable
buffers, what's wrong with not showing that command on M-x on that
circunstance? If the user expects to see the command, he can use C-h f
to check its docstring and learn about its restrictions.

> Let's not be so presumptuous.  Instead, if we provide
> guesses to try to help, let a user choose our guesses,
> instead of imposing them.  And even more importantly, let
> users ignore our brilliant guesses and decide for
> themselves what they consider the "current context" to be.
>
> Let _users_ filter, on demand.  Provide different, useful
> ways for them to quickly and powerfully filter candidates
> out/in, thus shaping the set of candidates (and thus
> defining the context!), _themselves_.

Again, you are arguing about something that you made up. As mentioned
several times, it is not decided (not even discussed, except by you) if
the feature will be activated by default.

> Icicles and Helm have tried to do exactly that, and have
> succeeded to some extent.  Let's move in the direction
> of giving users _more_ control, and faster and more
> powerful control - not in the direction of supposing,
> at code time, that we know what's good for them.

Annotating commands with information about its applicability is
something that gives users more control, because they have more
knowledge and can process it to taylor their needs. Operating solely on
the command names (prefixes that match mode names, etc) are hacks that
work on arbitrary premises.

>> Besides, if you insist on using M-x for learning about new commands, I
>> suppose that having only those that apply to your current context is
>> helpful, to say the least.
>
> Sure.  But WHO decides just what the "current context" means,
> and when?  Is it the currently invoked command that is reading
> your input that decides?  Can the user decide, interactively?
>
> Or is it some Emacs maintainer who goes over all of the commands
> in a wholesale fashion, applying some simplistic rule ahead of
> time, prior to even distributing Emacs to users?
>
> No one has spoken against being able to filter `M-x' candidates
> to fit the user's current context.

But what me (and Lars, and most people here, AFAIU) are proposing is,
precisely, making possible to filter M-x candidates!

The recent proposal about using this feature in place of tests that
error out when the context is not the expected one, is a new
development. I'm not much convinced about that, btw.

> [Please read that again, if it's not clear.]
>
> The question is how what constitutes the "current context" is
> determined/decided, and by whom, and when.

By the developer, of course. The same person who wrote the command and
knows how and when it is correct to use it.

>> How user-friendly is to type M-x and be offered with thousands of
>> commands that have zero relation to the task you are performing?
>
> If that's what you're doing then I submit that maybe you are
> not using `M-x' as well as you might.  (Unless for some reason
> you want to see those thousands.)

I'm not interested on seeing thousands of commands, not. I use M-x to
find a command on the provided list. If the list contains many commands,
it will be more difficult to find your command, no matter how smart is
your completion method. The fact that the set of available commands
grows with time, as more and more packages are `require'd by your Emacs
session, makes things worse.

> [And aside from considering `M-x' for this, I would hope that
> you would have something more specific than just `M-x' to use,
> to help you carry out the "task you are performing".  If you
> are using `M-x' only to invoke commands, and you are using
> only or mainly `M-x' to invoke commands, then something is
> missing.]

As I mentioned on other messages, M-x with the correct UI is often more
convenient than keybindings and menus on usability terms (ergonomics,
discoverability, mnemonics). On that aspect, M-x is severely handicapped
by the presence of a growing large number of irrelevant candidates.

> You should be able to quickly & easily filter `M-x' candidates
> by pattern matching.  And hopefully you would be able to also
> filter them with additional conditions/predicates.

Precisely, I use ido+flx for that, and it works great up to some extent
(see above). But ido (and helm, and Icicles, I guess) work on command
names, which is quite limiting. A hack, really.

[snip]

> Lifting such decisions to the earliest possible stage, code
> time, is going backward.  Let's concentrate, instead, on
> giving users _more_, not less, control over the set of
> completion candidates.
>
> Let's help users filter more powerfully, instead of
> hard-coding what we think is the right filtering them.
> Let users decide.

You are misunderstanding the whole issue. Annotating the commands gives
more information, hence more power, to the users. It is up to them to
how to use that information. Emacs will provide the necessary
infrastructure to filter commands on that annotations, but that's all.

Sorry for not commenting on the rest of your message. I'm bit busy now.
But this:

> You cannot (should not) assume that the only appropriate
> user context for `M-x' is the current major mode (or
> that mode plus the current minor modes).

Again, nobody said or implied what you say above. You are making that
up. Please try to understand what we are discussing here before wasting
your energies fighting something that does not exist. Same for the rest
of your message starting on that paragraph.

[snit]




  reply	other threads:[~2016-01-10 19:31 UTC|newest]

Thread overview: 141+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-25  6:21 4K Bugs Lars Ingebrigtsen
2015-12-25  7:46 ` Eli Zaretskii
2015-12-25 17:00 ` John Wiegley
2015-12-25 17:30   ` Lars Ingebrigtsen
2015-12-25 17:51     ` John Wiegley
2015-12-25 17:53       ` Lars Ingebrigtsen
2015-12-25 17:59         ` John Wiegley
2015-12-25 18:27           ` jpff
2015-12-25 18:35             ` Lars Ingebrigtsen
2015-12-25 18:33           ` Dmitry Gutov
2015-12-25 18:40             ` Lars Ingebrigtsen
2015-12-25 18:54               ` Lars Ingebrigtsen
2015-12-25 19:46                 ` Dmitry Gutov
2015-12-25 20:06                   ` Lars Ingebrigtsen
2015-12-25 19:36               ` John Wiegley
2015-12-25 19:56               ` Dmitry Gutov
2015-12-25 20:05                 ` Eli Zaretskii
2015-12-25 20:26                 ` Lars Ingebrigtsen
2015-12-26 13:16           ` Michael Albinus
2015-12-26  8:07   ` Andreas Röhler
2015-12-26 10:29     ` Eli Zaretskii
2015-12-26 15:14       ` Andreas Röhler
2015-12-26 16:34         ` Eli Zaretskii
2015-12-26 16:41           ` Lars Ingebrigtsen
2015-12-26 16:52             ` Eli Zaretskii
2015-12-26 16:59               ` Lars Ingebrigtsen
2015-12-26 17:55                 ` Ivan Shmakov
2015-12-26 17:58                   ` Lars Ingebrigtsen
2015-12-26 18:12                     ` Ivan Shmakov
2015-12-26 18:21                       ` Lars Ingebrigtsen
2015-12-26 18:42                         ` Ivan Shmakov
2015-12-26 18:48                           ` Lars Ingebrigtsen
2015-12-27 22:41               ` Per Starbäck
2015-12-28  9:44                 ` Andreas Röhler
2015-12-28 20:18               ` John Wiegley
2015-12-26 16:59             ` Paul Eggert
2015-12-26 17:48               ` Lars Ingebrigtsen
2015-12-28 20:15                 ` John Wiegley
2015-12-26 14:55     ` Lars Ingebrigtsen
2015-12-27  2:52       ` Richard Stallman
2015-12-27  6:07         ` Lars Ingebrigtsen
2016-01-07 20:10 ` Phillip Lord
2016-01-07 22:38   ` Phillip Lord
2016-01-09  4:26     ` Andrew Hyatt
2016-01-09  9:20       ` Michael Albinus
2016-01-07 23:32   ` John Wiegley
2016-01-08  0:17   ` Xue Fuqiao
2016-01-08 12:49     ` Phillip Lord
2016-01-08  1:41   ` Alexis
2016-01-08  1:50     ` Richard Copley
2016-01-08  2:41       ` Alexis
2016-01-09  1:51         ` John Wiegley
2016-01-08 12:48     ` Phillip Lord
2016-01-08 13:06     ` Michael Albinus
2016-01-08 13:59       ` Phillip Lord
2016-01-08 14:12         ` Michael Albinus
2016-01-09  2:52       ` Alexis
2016-01-10 15:58         ` Michael Albinus
2016-01-11  8:05           ` Alexis
2016-01-08  8:28   ` Lars Magne Ingebrigtsen
2016-01-08 12:57     ` Phillip Lord
2016-01-08 13:37       ` Michael Albinus
2016-01-08 13:52       ` Lars Magne Ingebrigtsen
2016-01-11 13:52         ` Phillip Lord
2016-01-11 16:18           ` Lars Magne Ingebrigtsen
2016-01-08 15:05     ` Stefan Monnier
2016-01-08 23:16     ` Leaving out non-applicable commands on Mx (was: 4K Bugs) Óscar Fuentes
2016-01-09  0:22       ` Leaving out non-applicable commands on Mx John Wiegley
2016-01-09  0:55         ` Óscar Fuentes
2016-01-09  1:46           ` John Wiegley
2016-01-09  1:54             ` Spencer Boucher
2016-01-09  3:09               ` Drew Adams
2016-01-09  3:37                 ` Óscar Fuentes
2016-01-09  2:15             ` Óscar Fuentes
2016-01-09  3:09               ` Drew Adams
2016-01-09  3:49                 ` Óscar Fuentes
2016-01-09  4:14               ` Stefan Monnier
2016-01-09  3:09             ` Drew Adams
2016-01-09  3:08           ` Drew Adams
2016-01-09  3:33             ` Óscar Fuentes
2016-01-09  9:05             ` Yuri Khan
2016-01-09 19:27               ` Drew Adams
2016-01-09 20:55               ` Making `interactive' conditional (was: Leaving out non-applicable commands on Mx) John Wiegley
2016-01-09 21:53                 ` Drew Adams
2016-01-11 12:02                   ` Drew Adams
2016-01-10  9:02                 ` Making `interactive' conditional Lars Magne Ingebrigtsen
2016-01-10 10:09                   ` Clément Pit--Claudel
2016-01-10 17:55                     ` Drew Adams
     [not found]                   ` <CAAdUY-Kfm-0JbOLpi4KE5wkmp6hfG+-y3V-_vTExaFkmF5RmEg@mail.gmail.com>
2016-01-10 12:36                     ` Artur Malabarba
2016-01-11  3:46                   ` Richard Stallman
2016-01-11 15:13                     ` Lars Magne Ingebrigtsen
2016-01-11  6:13                   ` Stefan Monnier
2016-01-11  6:48                     ` Óscar Fuentes
2016-01-11 14:08                       ` Herring, Davis
2016-01-11 16:34                         ` Óscar Fuentes
2016-01-12  4:46                           ` Herring, Davis
2016-01-12  4:59                             ` Óscar Fuentes
2016-01-11 15:15                     ` Lars Magne Ingebrigtsen
2016-01-12  2:14                   ` Clément Pit--Claudel
2016-01-10 15:27                 ` Making `interactive' conditional (was: Leaving out non-applicable commands on Mx) Alan Mackenzie
2016-01-10 16:47                   ` Making `interactive' conditional Óscar Fuentes
2016-01-10 18:23                     ` Drew Adams
2016-01-10 19:31                       ` Óscar Fuentes [this message]
2016-01-10 22:40                         ` Drew Adams
2016-01-10 23:19                           ` Óscar Fuentes
2016-01-10 18:22                   ` Making `interactive' conditional (was: Leaving out non-applicable commands on Mx) Drew Adams
2016-01-11  6:29                     ` Making `interactive' conditional Stefan Monnier
2016-01-11 11:48                       ` Drew Adams
2016-01-10 18:33                   ` Clément Pit--Claudel
2016-01-10 22:28                   ` Making `interactive' conditional (was: Leaving out non-applicable commands on Mx) Marcin Borkowski
2016-01-11  6:19                 ` Making `interactive' conditional Stefan Monnier
2016-01-19  6:24                   ` John Wiegley
2016-01-19 10:11                     ` Lars Magne Ingebrigtsen
2016-01-19 11:17                       ` Lars Magne Ingebrigtsen
2016-01-19 13:31                       ` Stefan Monnier
2016-01-19 16:52                       ` Drew Adams
2016-01-19 15:28                     ` Óscar Fuentes
2016-01-19 16:07                       ` Lars Magne Ingebrigtsen
2016-01-19 20:24                         ` Óscar Fuentes
2016-01-19 16:20                       ` John Wiegley
2016-01-19 17:55                         ` Lars Magne Ingebrigtsen
2016-01-19 18:39                           ` John Wiegley
2016-01-19 19:02                             ` Lars Magne Ingebrigtsen
2016-01-19 20:23                         ` Óscar Fuentes
2016-01-09  8:06         ` Leaving out non-applicable commands on Mx Lars Magne Ingebrigtsen
2016-01-09 14:50           ` Óscar Fuentes
2016-01-09 17:32           ` Stefan Monnier
2016-01-10  8:53             ` Lars Magne Ingebrigtsen
2016-01-10 16:05               ` Stefan Monnier
2016-02-04  3:19                 ` Lars Ingebrigtsen
2016-01-10 16:07               ` Stefan Monnier
2016-01-10 16:14                 ` Óscar Fuentes
2016-01-08 10:50   ` 4K Bugs Michael Albinus
2016-01-08 13:21     ` Phillip Lord
2016-01-08 13:33       ` Michael Albinus
2016-01-08 14:08         ` Phillip Lord
2016-01-09  4:21           ` Andrew Hyatt
2016-01-09  8:42             ` Michael Albinus
2016-01-11 13:54               ` Phillip Lord
2016-01-08 19:27         ` Stephen Leake
2016-01-08 20:52           ` Michael Albinus

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=874melfczb.fsf@wanadoo.es \
    --to=ofv@wanadoo.es \
    --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).