From: "Clément Pit-Claudel" <cpitclaudel@gmail.com>
To: emacs-devel@gnu.org
Subject: Re: Should mode commands be idempotent?
Date: Sat, 23 Sep 2017 10:16:35 +0200 [thread overview]
Message-ID: <81dcceb4-f939-1d63-0c31-0926a5dad823@gmail.com> (raw)
In-Reply-To: <jwvzi9pxb6m.fsf-monnier+gmane.emacs.devel@gnu.org>
On 2017-09-21 00:25, Stefan Monnier wrote:
>>> It shouldn't be needed: the idempotence should emerge naturally from the
>>> way the code is written, rather than being the result of special tests
>>> to detect that particular situation.
>> I'm not too sure: take the example of visual-line-mode: how do you make that
>> idempotent without explicitly checking whether the mode has already
>> been activated?
>
> In this case I'd typically do something like the patch below
Thanks. AFAICT visual-line--saved-state acts mostly as a proxy for checking whether the mode was enabled, but I also see that it's not quite the same as not running the mode function if it's already enabled.
Interestingly, what makes visual-line-mode not idempotent in the first place is that it goes to great lengths to save user settings and restore them. Had it not done this (that is, had it just killed the local variable bindings when disabled), it would have been idempotent but more annoying to use.
It isn't even obvious that the current behavior (even with your patch) is what we want, anyway: what if I have another mode foo-mode that touches the same variables as visual-line-mode? Then I can run (visual-line-mode), (foo-mode), (visual-line-mode -1), and then which state should I be in? There's a more general problem here, and it's not an easy one :/
next prev parent reply other threads:[~2017-09-23 8:16 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-19 19:58 Should mode commands be idempotent? Philipp Stephani
2017-09-19 22:10 ` Clément Pit-Claudel
2017-09-19 22:29 ` Stefan Monnier
2017-09-20 7:24 ` Clément Pit-Claudel
2017-09-20 14:52 ` John Wiegley
2017-09-20 22:30 ` Stefan Monnier
2017-09-20 23:05 ` Drew Adams
2017-10-08 15:09 ` Philipp Stephani
2017-09-20 22:25 ` Stefan Monnier
2017-09-23 8:16 ` Clément Pit-Claudel [this message]
2017-09-23 14:17 ` Stefan Monnier
2017-09-23 20:37 ` Stefan Monnier
2017-09-19 22:58 ` Drew Adams
2017-09-20 3:10 ` Stefan Monnier
2017-09-20 17:52 ` Drew Adams
2017-09-21 1:11 ` Stefan Monnier
2017-09-21 5:22 ` Drew Adams
2017-09-21 18:28 ` Richard Stallman
[not found] ` <<9f11a3c6-b113-4bf6-9dab-f894b2ad77b5@default>
[not found] ` <<E1dv6D1-0006Jr-Fl@fencepost.gnu.org>
2017-09-22 15:54 ` Drew Adams
2017-09-23 0:39 ` Richard Stallman
2017-09-23 8:05 ` Clément Pit-Claudel
2017-09-24 17:26 ` Drew Adams
2017-09-25 7:03 ` Clément Pit-Claudel
2017-09-25 13:57 ` Drew Adams
2017-09-26 0:36 ` Stefan Monnier
2017-09-26 3:30 ` John Wiegley
2017-09-26 17:55 ` Drew Adams
2017-09-26 18:01 ` John Wiegley
2017-09-26 18:50 ` Drew Adams
2017-09-26 18:54 ` John Wiegley
2017-10-08 15:28 ` Philipp Stephani
2017-10-08 19:04 ` Stefan Monnier
2017-10-10 2:10 ` John Wiegley
2017-12-21 20:49 ` Philipp Stephani
2017-12-22 2:20 ` Stefan Monnier
2017-10-10 23:15 ` Herring, Davis
[not found] ` <<E1dvYUB-0007na-Mx@fencepost.gnu.org>
2017-09-24 17:26 ` Drew Adams
2017-09-25 22:06 ` Richard Stallman
2017-09-19 23:50 ` John Wiegley
2017-09-20 3:09 ` Stefan Monnier
2017-09-20 13:01 ` Richard Stallman
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=81dcceb4-f939-1d63-0c31-0926a5dad823@gmail.com \
--to=cpitclaudel@gmail.com \
--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 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.