emacs-devel
[Top][All Lists]
Advanced

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

RE: turning on minor modes from hooks


From: Drew Adams
Subject: RE: turning on minor modes from hooks
Date: Sat, 29 Aug 2009 17:14:53 -0700

> > (add-hook 'text-mode-hook   'auto-fill-mode)
> >
> > This avoids defining extra functions just for the purpose 
> > of being able to call them from hooks.

There's never been a need to define an "extra function" for use on a hook.

(add-hook 'text-mode-hook (lambda () (auto-fill-mode 1)))

> > Not sure how feasible is to have a clean implementation of 
> > such a feature...
> 
> Stephen has long advocated that non-interactive invocation of mode
> commands should always turn on the mode instead of toggling.

So interactively a nil arg will toggle, but in Lisp a nil arg will turn it on?
And just why is that a great idea?

> I agree with that:  I think the vast majority of uses in code 
> do not use the toggling anyway, and while there probably are
> a few uses which would be broken by such a change, I think
> there would be far _more_ currently-incorrect uses

In libraries or in user init files? The latter, maybe, at least until they
discover that it doesn't do what they thought. That doesn't take long...

> that would be _fixed_ by such a change (where someone uses
> (add-hook 'foo-hook 'ack-mode) not realizing that it really
> toggles instead of turning on).

"Not realizing" is the key phrase. This is not about being unable to understand,
I think. It's about ordinary ignorance. It's about things not being the way some
newbies expect, without reading the doc.

There are lots of such Emacs-Lisp gotchas that new users learn about soon
enough. What's so special about this one? This one they learn about as soon as
they try it the first time.

Or, barring simple trial and error, they can actually read the doc (quelle
horreur !) to find out that a nil arg toggles. It's the same thing for learning
about quoting or list structure or hooks or anything else: things might not be
what you expect if you don't read a little. Emacs puts the info at your
fingertips with doc strings and such - really not a biggee.

It's not as if this is something complex and difficult for users to understand -
some people just don't bother to check a doc string or Info.

You seem to contrast ignorance about the arg, on the one hand, with the entire
body of existing Lisp code that uses mode functions, on the other. Granted, most
mode-function calls do not toggle the mode, but I don't think toggling is that
rare.

Not to mention code that might specifically test the arg, treating nil
differently from a positive integer - oops, guess what, starting with Emacs 23.2
they act the same...

I'd rather not expect library authors to have to adjust their existing code that
toggles the mode, to make it call (foo-mode (not foo-mode)) instead of
(foo-mode). I'd rather they not need to adjust code that examines the arg and
acts accordingly, changing the logic for Emacs post-23.1.

I'd rather that new users just read the doc and learn this FAQ, like so many
other FAQs. Not a biggee, and neither is using `lambda' in a hook. This is a
YAGNI feature, at best, and a bug-producer and code complexifier, at worst.

No, I don't feel very strongly about this, but I do not think it's a great idea.





reply via email to

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