[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Making `interactive' conditional

From: Artur Malabarba
Subject: Re: Making `interactive' conditional
Date: Sun, 10 Jan 2016 10:36:48 -0200

On Jan 10, 2016 7:02 AM, "Lars Magne Ingebrigtsen" <address@hidden> wrote:
> John Wiegley <address@hidden> writes:
> >
> > 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>])
> That does sound kinda exciting.  To take a random example, `M-x
> delete-matching-lines' could have a :when of `buffer-writable-p' and not
> auto-complete when in a read-only buffer.  Etc.

I like this too.
One minor detail: I think I would invert the second keyword (i.e., use :unless or :error-if, instead of :when). This way the return value of the function could be used as the error message. 

> > 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).
> Hm...  I think that sounds a bit too magical to be workable in general.
> I may be wrong, but I think that would probably lead to undesirable side
> effects

I agree with Lars, we shouldn't overdo this with magical guesswork. There are plenty of commands which work outside their major mode. I think that the point of this feature would be to remove from completion (or signal a friendly error) commands that would be guaranteed to error out (probably in some enigmatic way) if invoked outside the expected context.

This includes, for instance, the package-menu commands, which will immediately barf if the current buffer doesn't contain a tabulated list of packages.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]