all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Drew Adams <drew.adams@oracle.com>
To: John Wiegley <johnw@gnu.org>, Yuri Khan <yuri.v.khan@gmail.com>
Cc: "Óscar Fuentes" <ofv@wanadoo.es>,
	"Emacs developers" <emacs-devel@gnu.org>
Subject: RE: Making `interactive' conditional (was: Leaving out non-applicable commands on Mx)
Date: Sat, 9 Jan 2016 13:53:02 -0800 (PST)	[thread overview]
Message-ID: <96ccb9a0-d9a0-4c8b-9d19-b3a051d31f77@default> (raw)
In-Reply-To: <m28u3yiibj.fsf_-_@newartisans.com>

> Let's not talk about "filtering M-x"; let's talk about making
> `interactive' conditional. The former is a UI concern, while the
> latter I consider a core API issue.
> 
> Right now, functions are interactive if declared with `interactive', and
> not otherwise. The suggestion at hand is to allow `interactive' forms to
> become conditional -- possibly in multiple ways. I like this concept,
> and think the right place for it is indeed in core.
> 
> The question is how to declare such conditionality. We can do this rather
> easily by accepting new keyword arguments to `interactive':
>     (interactive "sDirectory: " [:mode foo-mode] [:when <function>])
> 
> This way, all new modes can take advantage of this support as it becomes
> available. I've already tested on 24.5, and keyword arguments are silently
> ignored by present-day GNU Emacs. This gives us transparent compatibility
> in both directions. We could also do it with (declare); I'm open to that too,
> and it also gives us such compatibility.

Is this supposed to affect `interactive' only for minibuffer
input that is read with completion?  If not then it's no longer
just about filtering completion candidates.

And in that case, just what is conditional?  And what about
interactive uses that do not read input at all?  Does it apply
to those cases also?

Are you perhaps suggesting that a given function would not be
a command (not interactive) when the given conditions are not
satisfied?

If so, does that mean that a predicate such as `commandp' would
also test the given conditions in the current context, i.e.,
generally (no matter how/where that predicate is invoked)?

What kinds of predicates (conditions) would be allowed here?

I guess:

. You've indicated (in effect) testing the current mode, which
  amounts to a predicate that accepts the mode as argument and
  tests with `eq' against the specified `:mode'.

. You've indicated that an arbitrary function could be provided
  (after `:when').  It seems this would thus not be a predicate
  that is applied to an _individual_ completion candidate.  So
  if you wanted to use it to filter candidates then it would
  presumably need to invoke `all-completions' (or equivalent)
  for null input ("") to get all of the initial candidates, and
  then explicitly filter them.

Is that what you are suggesting?  What you describe is not yet
clear, to me at least.

> At first, I imagine nothing delivered with Emacs will be conditional,
> because it requires annotating packages retroactively.

Doesn't it ("just") require changing `interactive' specs
wherever you want this?

> We could alleviate some of that by writing code to automatically
> consider every interactive function *without an autoload token* as
> being conditional on any modes defined in the same package (likely
> determined by prefix matching).

So you would take the proposal about additional `M-x' filtering
and extend it past `M-x' to all uses of interactive functions?

A priori, the arguments I cited against doing this for `M-x'
would apply a fortiori for such a general treatment.  But it's
all too vague for the moment to guess what the consequences
really might be.

In general, my view is:

. If it gives library authors more control over the behavior,
  not less, then it's likely a good thing.

. If it gives users even more control over the behavior then
  that's likely even better.

. If instead it hard-codes behavior decided ahead of time by
  Emacs Dev then it's likely not such a good thing.

> The use of such automation would be configurable

How?  By whom?  When? (user options? runtime interactively?)

> I'm open to a feature branch implementing such conditionality,

Could you please specify it first, at least in some more
detail than what you've described so far?

I'd start with the question: What is the aim?  What is the
real problem that you want to fix, or the needed missing
feature that you want to provide?  IOW, what's it for? what
good is it?



  reply	other threads:[~2016-01-09 21:53 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 [this message]
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
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

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

  git send-email \
    --in-reply-to=96ccb9a0-d9a0-4c8b-9d19-b3a051d31f77@default \
    --to=drew.adams@oracle.com \
    --cc=emacs-devel@gnu.org \
    --cc=johnw@gnu.org \
    --cc=ofv@wanadoo.es \
    --cc=yuri.v.khan@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 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.