From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Lars Ingebrigtsen Newsgroups: gmane.emacs.bugs Subject: bug#30205: 27.0.50; Minor mode commands enable the minor mode even if the body fails Date: Sun, 14 Jul 2019 19:40:59 +0200 Message-ID: <87muhgy0no.fsf@mouse.gnus.org> References: Mime-Version: 1.0 Content-Type: text/plain Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="237926"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Cc: 30205@debbugs.gnu.org To: Philipp Stephani Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Jul 14 19:42:12 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hmiVn-000zku-P3 for geb-bug-gnu-emacs@m.gmane.org; Sun, 14 Jul 2019 19:42:11 +0200 Original-Received: from localhost ([::1]:33528 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hmiVm-0006Ls-AU for geb-bug-gnu-emacs@m.gmane.org; Sun, 14 Jul 2019 13:42:10 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:38796) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hmiVj-0006Ll-PY for bug-gnu-emacs@gnu.org; Sun, 14 Jul 2019 13:42:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hmiVh-00016u-8E for bug-gnu-emacs@gnu.org; Sun, 14 Jul 2019 13:42:07 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:37010) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hmiVe-000150-70 for bug-gnu-emacs@gnu.org; Sun, 14 Jul 2019 13:42:04 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hmiVe-00043V-1Y for bug-gnu-emacs@gnu.org; Sun, 14 Jul 2019 13:42:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Lars Ingebrigtsen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 14 Jul 2019 17:42:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 30205 X-GNU-PR-Package: emacs Original-Received: via spool by 30205-submit@debbugs.gnu.org id=B30205.156312606615522 (code B ref 30205); Sun, 14 Jul 2019 17:42:01 +0000 Original-Received: (at 30205) by debbugs.gnu.org; 14 Jul 2019 17:41:06 +0000 Original-Received: from localhost ([127.0.0.1]:45831 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hmiUk-00042I-7k for submit@debbugs.gnu.org; Sun, 14 Jul 2019 13:41:06 -0400 Original-Received: from quimby.gnus.org ([80.91.231.51]:55826) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hmiUi-000429-Cc for 30205@debbugs.gnu.org; Sun, 14 Jul 2019 13:41:04 -0400 Original-Received: from cm-84.212.202.86.getinternet.no ([84.212.202.86] helo=marnie) by quimby.gnus.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hmiUe-0004S0-5O; Sun, 14 Jul 2019 19:41:02 +0200 In-Reply-To: (Philipp Stephani's message of "Mon, 22 Jan 2018 10:54:56 +0100") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:163017 Archived-At: Philipp Stephani writes: > In *scratch*: > > (define-minor-mode foo-mode nil nil nil nil (error "what")) > > C-h v foo-mode shows that foo-mode is nil, as it should be. > But after M-x foo-mode, it is t, even though the mode command failed. > This can be confusing for mode commands that can conditionally fail, > e.g. depending on some external property. Hm... OK, this is the function run when saying M-x foo-mode: (defun ,modefun (&optional arg ,@extra-args) ,(easy-mmode--mode-docstring doc pretty-name keymap-sym) ;; Use `toggle' rather than (if ,mode 0 1) so that using ;; repeat-command still does the toggling correctly. (interactive (list (or current-prefix-arg 'toggle))) (let ((,last-message (current-message))) (,@setter (if (eq arg 'toggle) (not ,getter) ;; A nil argument also means ON now. (> (prefix-numeric-value arg) 0))) ,@body ;; The on/off hooks are here for backward compatibility only. (run-hooks ',hook (if ,getter ',hook-on ',hook-off)) So `setter' is the thing that sets the mode variable, and then body is run. I agree with you that it would be better that the mode variable remains unchanged if `body' fails. But I `body' is likely to need to have that set to work. We could roll back the value to the previous value on errors? Hm. On the other hand, if `body' has done most of the stuff it needs to do and fails "late" in the process, then the mode will be in effect even if it failed, and in that case it would be wrong to roll back. So I don't know. Does anybody have an opinion? -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no