X-Loop: help-debbugs@HIDDEN Subject: bug#11983: 24.1; Electric-command-loop broken? Resent-From: "Roland Winkler" <winkler@HIDDEN> Original-Sender: debbugs-submit-bounces <at> debbugs.gnu.org Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Wed, 18 Jul 2012 21:02:01 +0000 Resent-Message-ID: <handler.11983.B.134264526232659 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: report 11983 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 11983 <at> debbugs.gnu.org X-Debbugs-Original-To: bug-gnu-emacs@HIDDEN Received: via spool by submit <at> debbugs.gnu.org id=B.134264526232659 (code B ref -1); Wed, 18 Jul 2012 21:02:01 +0000 Received: (at submit) by debbugs.gnu.org; 18 Jul 2012 21:01:02 +0000 Received: from localhost ([127.0.0.1]:49015 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1SrbMj-0008UX-Sb for submit <at> debbugs.gnu.org; Wed, 18 Jul 2012 17:01:02 -0400 Received: from eggs.gnu.org ([208.118.235.92]:60181) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <winkler@HIDDEN>) id 1SrbMi-0008UK-K6 for submit <at> debbugs.gnu.org; Wed, 18 Jul 2012 17:01:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <winkler@HIDDEN>) id 1SrbGl-0004Rv-Aq for submit <at> debbugs.gnu.org; Wed, 18 Jul 2012 16:54:53 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD autolearn=unavailable version=3.3.2 Received: from lists.gnu.org ([208.118.235.17]:54304) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <winkler@HIDDEN>) id 1SrbGl-0004Rj-7i for submit <at> debbugs.gnu.org; Wed, 18 Jul 2012 16:54:51 -0400 Received: from eggs.gnu.org ([208.118.235.92]:50691) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from <winkler@HIDDEN>) id 1SrbGk-0001Pl-6F for bug-gnu-emacs@HIDDEN; Wed, 18 Jul 2012 16:54:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <winkler@HIDDEN>) id 1SrbGj-0004RO-2l for bug-gnu-emacs@HIDDEN; Wed, 18 Jul 2012 16:54:50 -0400 Received: from fencepost.gnu.org ([208.118.235.10]:47873) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <winkler@HIDDEN>) id 1SrbGi-0004RK-Vb for bug-gnu-emacs@HIDDEN; Wed, 18 Jul 2012 16:54:49 -0400 Received: from dhcp207152.uni-regensburg.de ([132.199.207.152]:55282 helo=regnitz) by fencepost.gnu.org with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from <winkler@HIDDEN>) id 1SrbGi-0007ZL-Cs for bug-gnu-emacs@HIDDEN; Wed, 18 Jul 2012 16:54:48 -0400 Date: Wed, 18 Jul 2012 15:54:45 -0500 Message-Id: <87pq7s6b8q.fsf@HIDDEN> From: "Roland Winkler" <winkler@HIDDEN> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 208.118.235.17 X-Spam-Score: -6.9 (------) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Sender: debbugs-submit-bounces <at> debbugs.gnu.org Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org X-Spam-Score: -6.9 (------) I am trying to understand Electric-command-loop in electric.el (this is used by BBDB 3): Two things: - The code contains a hard-coded (setq universal-argument-num-events 0) Apparently this is never reset, so exiting Electric-command-loop leaves behind this binding. - The doc string says ;; Given third argument non-nil, it ;; INHIBITS quitting unless the user types C-g at toplevel. This is ;; so user can do things like C-u C-g and not get thrown out. Yet it appears to me, that even for C-u C-g the user gets thrown out. Here is a slightly simplified version of the code from Electric-command-loop It does not distinguish between C-g and C-u C-g. Unfortunately, this hackery goes beyond my understanding of Emacs internals. (catch 'return-tag (let (cmd (inhibit-quit t)) (while t (setq cmd (read-key-sequence "Prompt: ")) (setq last-command-event (aref cmd (1- (length cmd))) this-command (key-binding cmd t) cmd this-command) ;; This makes universal-argument-other-key work. (setq universal-argument-num-events 0) (if (or (prog1 quit-flag (setq quit-flag nil)) (eq last-input-event ?\C-g)) (progn (setq unread-command-events nil prefix-arg nil) ;; If it wasn't canceling a prefix character, then quit. (if (or (= (length (this-command-keys)) 1) (not inhibit-quit)) ; safety (throw 'return-tag (this-command-keys)) (setq cmd nil)))) (setq current-prefix-arg prefix-arg) (condition-case nil (progn (command-execute cmd) (setq last-command this-command)) (error nil))))) In GNU Emacs 24.1.1 (x86_64-unknown-linux-gnu, GTK+ Version 2.20.1) of 2012-06-10 on regnitz Windowing system distributor `The X.Org Foundation', version 11.0.10706000
Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.428 (Entity 5.428) Content-Type: text/plain; charset=utf-8 X-Loop: help-debbugs@HIDDEN From: help-debbugs@HIDDEN (GNU bug Tracking System) To: "Roland Winkler" <winkler@HIDDEN> Subject: bug#11983: Acknowledgement (24.1; Electric-command-loop broken?) Message-ID: <handler.11983.B.134264526232659.ack <at> debbugs.gnu.org> References: <87pq7s6b8q.fsf@HIDDEN> X-Gnu-PR-Message: ack 11983 X-Gnu-PR-Package: emacs Reply-To: 11983 <at> debbugs.gnu.org Date: Wed, 18 Jul 2012 21:02:02 +0000 Thank you for filing a new bug report with debbugs.gnu.org. This is an automatically generated reply to let you know your message has been received. Your message is being forwarded to the package maintainers and other interested parties for their attention; they will reply in due course. Your message has been sent to the package maintainer(s): bug-gnu-emacs@HIDDEN If you wish to submit further information on this problem, please send it to 11983 <at> debbugs.gnu.org. Please do not send mail to help-debbugs@HIDDEN unless you wish to report a problem with the Bug-tracking system. --=20 11983: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D11983 GNU Bug Tracking System Contact help-debbugs@HIDDEN with problems
X-Loop: help-debbugs@HIDDEN Subject: bug#11983: 24.1; Electric-command-loop broken? Resent-From: Stefan Monnier <monnier@HIDDEN> Original-Sender: debbugs-submit-bounces <at> debbugs.gnu.org Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Thu, 19 Jul 2012 09:18:01 +0000 Resent-Message-ID: <handler.11983.B11983.134268946917245 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 11983 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: "Roland Winkler" <winkler@HIDDEN> Cc: 11983 <at> debbugs.gnu.org Received: via spool by 11983-submit <at> debbugs.gnu.org id=B11983.134268946917245 (code B ref 11983); Thu, 19 Jul 2012 09:18:01 +0000 Received: (at 11983) by debbugs.gnu.org; 19 Jul 2012 09:17:49 +0000 Received: from localhost ([127.0.0.1]:49527 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1Srmrl-0004U6-Et for submit <at> debbugs.gnu.org; Thu, 19 Jul 2012 05:17:49 -0400 Received: from pruche.dit.umontreal.ca ([132.204.246.22]:35396) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <monnier@HIDDEN>) id 1Srmrj-0004Tz-A1 for 11983 <at> debbugs.gnu.org; Thu, 19 Jul 2012 05:17:47 -0400 Received: from fmsmemgm.homelinux.net (lechon.iro.umontreal.ca [132.204.27.242]) by pruche.dit.umontreal.ca (8.14.1/8.14.1) with ESMTP id q6J9BZHd005139; Thu, 19 Jul 2012 05:11:35 -0400 Received: by fmsmemgm.homelinux.net (Postfix, from userid 20848) id F3778AE20D; Thu, 19 Jul 2012 04:40:43 -0400 (EDT) From: Stefan Monnier <monnier@HIDDEN> Message-ID: <jwv7gu0upar.fsf-monnier+emacs@HIDDEN> References: <87pq7s6b8q.fsf@HIDDEN> Date: Thu, 19 Jul 2012 04:40:43 -0400 In-Reply-To: <87pq7s6b8q.fsf@HIDDEN> (Roland Winkler's message of "Wed, 18 Jul 2012 15:54:45 -0500") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-NAI-Spam-Flag: NO X-NAI-Spam-Threshold: 5 X-NAI-Spam-Score: 0 X-NAI-Spam-Rules: 1 Rules triggered RV4283=0 X-NAI-Spam-Version: 2.2.0.9309 : core <4283> : streams <787121> : uri <1169177> X-Spam-Score: -3.5 (---) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Sender: debbugs-submit-bounces <at> debbugs.gnu.org Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org X-Spam-Score: -3.5 (---) > I am trying to understand Electric-command-loop in electric.el I do not understand what it's trying to do, let alone how it's trying to do it. The best I could understand of what it's trying to do is summarized in the commentary I added: ;; - electric modes and buffers: modes that typically pop-up in a modal kind of ;; way a transient buffer that automatically disappears as soon as the user ;; is done with it. > (this is used by BBDB 3): Could you maybe then describe the expected behavior, from the user's point of view? Adding docstrings, and/or improving comments would be very welcome. > - The code contains a hard-coded > (setq universal-argument-num-events 0) > Apparently this is never reset, so exiting Electric-command-loop > leaves behind this binding. It's a global var used by `universal-argument'. `universal-argument' is implemented in a rather intricate way, part of which is actually hidden deep in the C code. universal-argument-num-events is used for when you finish a C-u sequence to find which keys are part of the universal argument and which keys are part of the actual command you wan to run. `universal-argument' should really use something like set-temporary-overlay-map instead so it wouldn't need universal-argument-other-key and neither would it have to fiddle with unread-command-events. > - The doc string says > ;; Given third argument non-nil, it > ;; INHIBITS quitting unless the user types C-g at toplevel. This is > ;; so user can do things like C-u C-g and not get thrown out. > Yet it appears to me, that even for C-u C-g the user gets thrown out. I have no idea what this "C-u C-g" refers to, indeed. Stefan
X-Loop: help-debbugs@HIDDEN Subject: bug#11983: 24.1; Electric-command-loop broken? Resent-From: "Roland Winkler" <winkler@HIDDEN> Original-Sender: debbugs-submit-bounces <at> debbugs.gnu.org Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Thu, 19 Jul 2012 21:37:01 +0000 Resent-Message-ID: <handler.11983.B11983.13427337731504 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 11983 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier <monnier@HIDDEN> Cc: 11983 <at> debbugs.gnu.org Received: via spool by 11983-submit <at> debbugs.gnu.org id=B11983.13427337731504 (code B ref 11983); Thu, 19 Jul 2012 21:37:01 +0000 Received: (at 11983) by debbugs.gnu.org; 19 Jul 2012 21:36:13 +0000 Received: from localhost ([127.0.0.1]:51337 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1SryOK-0000OD-Uo for submit <at> debbugs.gnu.org; Thu, 19 Jul 2012 17:36:13 -0400 Received: from fencepost.gnu.org ([208.118.235.10]:57925) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <winkler@HIDDEN>) id 1SryOI-0000O5-DJ for 11983 <at> debbugs.gnu.org; Thu, 19 Jul 2012 17:36:11 -0400 Received: from pchdb00005.uni-regensburg.de ([132.199.129.10]:40285 helo=regnitz) by fencepost.gnu.org with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from <winkler@HIDDEN>) id 1SryIG-0002GK-DR; Thu, 19 Jul 2012 17:29:56 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <20488.31825.986146.195944@HIDDEN> Date: Thu, 19 Jul 2012 16:29:53 -0500 From: "Roland Winkler" <winkler@HIDDEN> In-Reply-To: <jwv7gu0upar.fsf-monnier+emacs@HIDDEN> References: <87pq7s6b8q.fsf@HIDDEN> <jwv7gu0upar.fsf-monnier+emacs@HIDDEN> X-Mailer: VM 8.2 trial under 24.1.1 (x86_64-unknown-linux-gnu) X-Spam-Score: -6.9 (------) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Sender: debbugs-submit-bounces <at> debbugs.gnu.org Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org X-Spam-Score: -6.9 (------) On Thu Jul 19 2012 Stefan Monnier wrote: > The best I could understand of what it's trying to do is summarized in > the commentary I added: > > ;; - electric modes and buffers: modes that typically pop-up in a > ;; modal kind of way a transient buffer that automatically > ;; disappears as soon as the user is done with it. > > > (this is used by BBDB 3): > > Could you maybe then describe the expected behavior, from the user's > point of view? Adding docstrings, and/or improving comments would be > very welcome. My understanding of this is the following (better suggestions welcome): Imagine you have an unwind-protect form. It allows you to execute whatever noninteractive code, and you can be sure that in the end it executes cleanup-form. Now imagine you want to do the same thing interactively: you want to run some commands interactively, and in the end you want to be sure you execute cleanup-form, no matter what happens. The code for this is (unwind-protect (catch 'return-tag (Electric-command-loop 'return-tag)) (cleanup-form)) Electric-command-loop throws 'return-tag if you type C-g (keyboard-quit). Or you can make commands electric by letting them throw 'return-tag. But any other command is executed inside the temporary command loop implemented by Electric-command-loop without ever leaving this loop. In particular, this temporary command loop catches all errors that do not throw 'return-tag. So in short: Electric-command-loop allows one to execute commands in an `unwind-protect'ed temporary command loop. Maybe there is a simpler way to implement such a functionality. A typical application is suggested by the function Electric-pop-up-window which pops up a window fairly aggresively (see bug#11985): You quickly execute some command in the electric window. When you are done, this code guarantees that cleanup-form gets executed. > > - The doc string says > > ;; Given third argument non-nil, it > > ;; INHIBITS quitting unless the user types C-g at toplevel. This is > > ;; so user can do things like C-u C-g and not get thrown out. > > Yet it appears to me, that even for C-u C-g the user gets thrown out. > > I have no idea what this "C-u C-g" refers to, indeed. If you type a plain C-g, Electric-command-loop throws 'return-tag. Now the idea is that if you type C-u, then you change your mind and want to cancel it by typing C-g, then the code should not leave the temporary command loop.
X-Loop: help-debbugs@HIDDEN Subject: bug#11983: 24.1; Electric-command-loop broken? Resent-From: Stefan Monnier <monnier@HIDDEN> Original-Sender: debbugs-submit-bounces <at> debbugs.gnu.org Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Fri, 20 Jul 2012 09:55:01 +0000 Resent-Message-ID: <handler.11983.B11983.1342778044398 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 11983 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: "Roland Winkler" <winkler@HIDDEN> Cc: 11983 <at> debbugs.gnu.org Received: via spool by 11983-submit <at> debbugs.gnu.org id=B11983.1342778044398 (code B ref 11983); Fri, 20 Jul 2012 09:55:01 +0000 Received: (at 11983) by debbugs.gnu.org; 20 Jul 2012 09:54:04 +0000 Received: from localhost ([127.0.0.1]:51835 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1Ss9uO-00006L-73 for submit <at> debbugs.gnu.org; Fri, 20 Jul 2012 05:54:04 -0400 Received: from pruche.dit.umontreal.ca ([132.204.246.22]:38786) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <monnier@HIDDEN>) id 1Ss9uL-00005m-SZ for 11983 <at> debbugs.gnu.org; Fri, 20 Jul 2012 05:54:02 -0400 Received: from fmsmemgm.homelinux.net (lechon.iro.umontreal.ca [132.204.27.242]) by pruche.dit.umontreal.ca (8.14.1/8.14.1) with ESMTP id q6K9lgC0017809; Fri, 20 Jul 2012 05:47:43 -0400 Received: by fmsmemgm.homelinux.net (Postfix, from userid 20848) id AA994AECB8; Fri, 20 Jul 2012 05:47:40 -0400 (EDT) From: Stefan Monnier <monnier@HIDDEN> Message-ID: <jwvpq7qpz9d.fsf-monnier+emacs@HIDDEN> References: <87pq7s6b8q.fsf@HIDDEN> <jwv7gu0upar.fsf-monnier+emacs@HIDDEN> <20488.31825.986146.195944@HIDDEN> Date: Fri, 20 Jul 2012 05:47:40 -0400 In-Reply-To: <20488.31825.986146.195944@HIDDEN> (Roland Winkler's message of "Thu, 19 Jul 2012 16:29:53 -0500") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-NAI-Spam-Flag: NO X-NAI-Spam-Threshold: 5 X-NAI-Spam-Score: 0 X-NAI-Spam-Rules: 1 Rules triggered RV4284=0 X-NAI-Spam-Version: 2.2.0.9309 : core <4284> : streams <787605> : uri <1170125> X-Spam-Score: -3.5 (---) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Sender: debbugs-submit-bounces <at> debbugs.gnu.org Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org X-Spam-Score: -3.5 (---) > (unwind-protect > (catch 'return-tag > (Electric-command-loop 'return-tag)) > (cleanup-form)) But in which way is this different from `recursive-edit'? Hmmm... I guess it is different in that it is easier to exit an Electric-command-loop than a recursive-edit, so it is like a "transient/lightweight" recursive-edit. I think it would be good to try to describe it by comparing it to recursive-edit. It seems that it requires a fair bit of extra surrounding code to use it right. E.g. electric-buffer-list is buggy because it lacks this extra code: after popping up the electric-buffer-list, you can select some other window and work there, but the behavior is then all messed up. >> > - The doc string says >> > ;; Given third argument non-nil, it >> > ;; INHIBITS quitting unless the user types C-g at toplevel. This is >> > ;; so user can do things like C-u C-g and not get thrown out. >> > Yet it appears to me, that even for C-u C-g the user gets thrown out. >> >> I have no idea what this "C-u C-g" refers to, indeed. > If you type a plain C-g, Electric-command-loop throws > 'return-tag. Now the idea is that if you type C-u, then you > change your mind and want to cancel it by typing C-g, then the > code should not leave the temporary command loop. I see, yes. This inhibit-quitting seems dangerous since it binds inhibit-quit. But yes, I see in the code it tries to handle C-g after some prefix key. Not sure why it now fails or whether it ever worked. Stefan
X-Loop: help-debbugs@HIDDEN Subject: bug#11983: 24.1; Electric-command-loop broken? Resent-From: "Roland Winkler" <winkler@HIDDEN> Original-Sender: debbugs-submit-bounces <at> debbugs.gnu.org Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Fri, 20 Jul 2012 10:50:02 +0000 Resent-Message-ID: <handler.11983.B11983.13427813985895 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 11983 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier <monnier@HIDDEN> Cc: 11983 <at> debbugs.gnu.org Received: via spool by 11983-submit <at> debbugs.gnu.org id=B11983.13427813985895 (code B ref 11983); Fri, 20 Jul 2012 10:50:02 +0000 Received: (at 11983) by debbugs.gnu.org; 20 Jul 2012 10:49:58 +0000 Received: from localhost ([127.0.0.1]:51875 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1SsAmT-0001X2-SX for submit <at> debbugs.gnu.org; Fri, 20 Jul 2012 06:49:58 -0400 Received: from fencepost.gnu.org ([208.118.235.10]:47535) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <winkler@HIDDEN>) id 1SsAmO-0001Ws-KO for 11983 <at> debbugs.gnu.org; Fri, 20 Jul 2012 06:49:53 -0400 Received: from lukas.physics.niu.edu ([131.156.85.221]:53276) by fencepost.gnu.org with esmtpa (Exim 4.71) (envelope-from <winkler@HIDDEN>) id 1SsAgJ-0002qd-MD; Fri, 20 Jul 2012 06:43:35 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <20489.13911.18062.669102@HIDDEN> Date: Fri, 20 Jul 2012 05:43:35 -0500 From: "Roland Winkler" <winkler@HIDDEN> In-Reply-To: <jwvpq7qpz9d.fsf-monnier+emacs@HIDDEN> References: <87pq7s6b8q.fsf@HIDDEN> <jwv7gu0upar.fsf-monnier+emacs@HIDDEN> <20488.31825.986146.195944@HIDDEN> <jwvpq7qpz9d.fsf-monnier+emacs@HIDDEN> X-Mailer: VM 8.2 trial under 24.1.1 (x86_64-unknown-linux-gnu) X-Spam-Score: -6.9 (------) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Sender: debbugs-submit-bounces <at> debbugs.gnu.org Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org X-Spam-Score: -6.9 (------) On Fri Jul 20 2012 Stefan Monnier wrote: > > (unwind-protect > > (catch 'return-tag > > (Electric-command-loop 'return-tag)) > > (cleanup-form)) > > But in which way is this different from `recursive-edit'? I do not know much about recursive-edit. How would you use it as a replacement for the above to be sure that after leaving recursive-edit cleanup-form is always executed? > It seems that it requires a fair bit of extra surrounding code to > use it right. E.g. electric-buffer-list is buggy because it lacks > this extra code: after popping up the electric-buffer-list, you > can select some other window and work there, but the behavior is > then all messed up. The amount of protection provided by an Electric-command-loop depends on the surrounding code (save-excursion, save-window-excursion, etc.) I believe that the intended usage pattern of Electric-command-loop does not include too wild things such as selecting other windows. Or phrased differently: of course, you can always do whatever you like. But only cleanup-form is definitely evaluated at the end. Roland
X-Loop: help-debbugs@HIDDEN Subject: bug#11983: 24.1; Electric-command-loop broken? Resent-From: Stefan Monnier <monnier@HIDDEN> Original-Sender: debbugs-submit-bounces <at> debbugs.gnu.org Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Fri, 20 Jul 2012 12:17:01 +0000 Resent-Message-ID: <handler.11983.B11983.134278656416441 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 11983 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: "Roland Winkler" <winkler@HIDDEN> Cc: 11983 <at> debbugs.gnu.org Received: via spool by 11983-submit <at> debbugs.gnu.org id=B11983.134278656416441 (code B ref 11983); Fri, 20 Jul 2012 12:17:01 +0000 Received: (at 11983) by debbugs.gnu.org; 20 Jul 2012 12:16:04 +0000 Received: from localhost ([127.0.0.1]:52016 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1SsC7n-0004H7-FR for submit <at> debbugs.gnu.org; Fri, 20 Jul 2012 08:16:03 -0400 Received: from chene.dit.umontreal.ca ([132.204.246.20]:53501) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <monnier@HIDDEN>) id 1SsC7l-0004Gj-Be for 11983 <at> debbugs.gnu.org; Fri, 20 Jul 2012 08:16:02 -0400 Received: from fmsmemgm.homelinux.net (lechon.iro.umontreal.ca [132.204.27.242]) by chene.dit.umontreal.ca (8.14.1/8.14.1) with ESMTP id q6KC9goI021075; Fri, 20 Jul 2012 08:09:43 -0400 Received: by fmsmemgm.homelinux.net (Postfix, from userid 20848) id A4806AECB8; Fri, 20 Jul 2012 08:09:41 -0400 (EDT) From: Stefan Monnier <monnier@HIDDEN> Message-ID: <jwvfw8mocza.fsf-monnier+emacs@HIDDEN> References: <87pq7s6b8q.fsf@HIDDEN> <jwv7gu0upar.fsf-monnier+emacs@HIDDEN> <20488.31825.986146.195944@HIDDEN> <jwvpq7qpz9d.fsf-monnier+emacs@HIDDEN> <20489.13911.18062.669102@HIDDEN> Date: Fri, 20 Jul 2012 08:09:41 -0400 In-Reply-To: <20489.13911.18062.669102@HIDDEN> (Roland Winkler's message of "Fri, 20 Jul 2012 05:43:35 -0500") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-NAI-Spam-Flag: NO X-NAI-Spam-Threshold: 5 X-NAI-Spam-Score: 0 X-NAI-Spam-Rules: 1 Rules triggered RV4284=0 X-NAI-Spam-Version: 2.2.0.9309 : core <4284> : streams <787671> : uri <1170215> X-Spam-Score: -3.5 (---) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Sender: debbugs-submit-bounces <at> debbugs.gnu.org Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org X-Spam-Score: -3.5 (---) >> > (unwind-protect >> > (catch 'return-tag >> > (Electric-command-loop 'return-tag)) >> > (cleanup-form)) >> But in which way is this different from `recursive-edit'? > I do not know much about recursive-edit. How would you use it as a > replacement for the above to be sure that after leaving > recursive-edit cleanup-form is always executed? (unwind-protect (recursive-edit) (cleanup-form)) >> It seems that it requires a fair bit of extra surrounding code to >> use it right. E.g. electric-buffer-list is buggy because it lacks >> this extra code: after popping up the electric-buffer-list, you >> can select some other window and work there, but the behavior is >> then all messed up. > The amount of protection provided by an Electric-command-loop > depends on the surrounding code (save-excursion, > save-window-excursion, etc.) The issue is not that the buffer is not reset when you return from electric-buffer-list, but that during electric-buffer-list if you select some other window you do not exit electric-buffer-list and the keys end up behaving weird (e.g. typing "c" in a normal buffer will insert "c" and then move to EOB or something like that). Once you exit from electric-buffer-list, things are back to normal. > I believe that the intended usage pattern of Electric-command-loop > does not include too wild things such as selecting other windows. Or > phrased differently: of course, you can always do whatever you > like. But only cleanup-form is definitely evaluated at the end. What I'm saying is that it's tricky to use Electric-command-loop without introducing bugs because Electric-command-loop presumes that all operations will stay within the current buffer, but it does not (help to) try to enforce it. So it's a poor API. Stefan
X-Loop: help-debbugs@HIDDEN Subject: bug#11983: 24.1; Electric-command-loop broken? Resent-From: "Roland Winkler" <winkler@HIDDEN> Original-Sender: debbugs-submit-bounces <at> debbugs.gnu.org Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Fri, 20 Jul 2012 12:45:01 +0000 Resent-Message-ID: <handler.11983.B11983.134278827318996 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 11983 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier <monnier@HIDDEN> Cc: 11983 <at> debbugs.gnu.org Received: via spool by 11983-submit <at> debbugs.gnu.org id=B11983.134278827318996 (code B ref 11983); Fri, 20 Jul 2012 12:45:01 +0000 Received: (at 11983) by debbugs.gnu.org; 20 Jul 2012 12:44:33 +0000 Received: from localhost ([127.0.0.1]:52060 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1SsCZN-0004wL-0Y for submit <at> debbugs.gnu.org; Fri, 20 Jul 2012 08:44:33 -0400 Received: from fencepost.gnu.org ([208.118.235.10]:49549) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from <winkler@HIDDEN>) id 1SsCZK-0004wE-Tx for 11983 <at> debbugs.gnu.org; Fri, 20 Jul 2012 08:44:31 -0400 Received: from lukas.physics.niu.edu ([131.156.85.221]:53328) by fencepost.gnu.org with esmtpa (Exim 4.71) (envelope-from <winkler@HIDDEN>) id 1SsCTF-0000Po-LN; Fri, 20 Jul 2012 08:38:13 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <20489.20788.573738.502819@HIDDEN> Date: Fri, 20 Jul 2012 07:38:12 -0500 From: "Roland Winkler" <winkler@HIDDEN> In-Reply-To: <jwvfw8mocza.fsf-monnier+emacs@HIDDEN> References: <87pq7s6b8q.fsf@HIDDEN> <jwv7gu0upar.fsf-monnier+emacs@HIDDEN> <20488.31825.986146.195944@HIDDEN> <jwvpq7qpz9d.fsf-monnier+emacs@HIDDEN> <20489.13911.18062.669102@HIDDEN> <jwvfw8mocza.fsf-monnier+emacs@HIDDEN> X-Mailer: VM 8.2 trial under 24.1.1 (x86_64-unknown-linux-gnu) X-Spam-Score: -6.9 (------) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Sender: debbugs-submit-bounces <at> debbugs.gnu.org Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org X-Spam-Score: -6.9 (------) On Fri Jul 20 2012 Stefan Monnier wrote: > > I do not know much about recursive-edit. How would you use it as a > > replacement for the above to be sure that after leaving > > recursive-edit cleanup-form is always executed? > > (unwind-protect > (recursive-edit) > (cleanup-form)) Ah, thanks, that's indeed not more complicated either. > The issue is not that the buffer is not reset when you return from > electric-buffer-list, but that during electric-buffer-list if you select > some other window you do not exit electric-buffer-list and the keys end > up behaving weird (e.g. typing "c" in a normal buffer will insert "c" > and then move to EOB or something like that). Once you exit from > electric-buffer-list, things are back to normal. In BBDB this issue has been address by making relevant commands electric: any command that is intended to quit the electric command loop (in the context of electric-buffer-list this could mean: you select another buffer to work with) will throw 'return-tag. Then you can continue normally. Of course, this means: the code needs to provide electric versions of all relevant commands. If the user still decides to do something else, the result is undefined. > What I'm saying is that it's tricky to use Electric-command-loop without > introducing bugs because Electric-command-loop presumes that all > operations will stay within the current buffer, but it does not (help > to) try to enforce it. So it's a poor API. I do not disagree here. I got into all this business because the Electric-command-loop has been present in old versions of BBDB. But I would not miss it, if it disappeared. (I do not even know whether any other BBDB user would miss it. I'll ask on the BBDB mailing list.) Roland
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.