From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Nicolas Richard Newsgroups: gmane.emacs.bugs Subject: bug#17151: 24.3.50; Disabled commands are executed anyway Date: Mon, 31 Mar 2014 21:36:40 +0200 Message-ID: <8761mutb1z.fsf@yahoo.fr> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1396294706 22247 80.91.229.3 (31 Mar 2014 19:38:26 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 31 Mar 2014 19:38:26 +0000 (UTC) To: 17151@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Mar 31 21:38:18 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1WUi2C-0001oD-SR for geb-bug-gnu-emacs@m.gmane.org; Mon, 31 Mar 2014 21:38:17 +0200 Original-Received: from localhost ([::1]:50978 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUi2C-00062s-I3 for geb-bug-gnu-emacs@m.gmane.org; Mon, 31 Mar 2014 15:38:16 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59759) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUi24-00062H-RU for bug-gnu-emacs@gnu.org; Mon, 31 Mar 2014 15:38:14 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WUi1z-0002CD-7s for bug-gnu-emacs@gnu.org; Mon, 31 Mar 2014 15:38:08 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:57038) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUi1z-0002C8-3y for bug-gnu-emacs@gnu.org; Mon, 31 Mar 2014 15:38:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1WUi1y-000482-Fh for bug-gnu-emacs@gnu.org; Mon, 31 Mar 2014 15:38:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Nicolas Richard Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 31 Mar 2014 19:38:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 17151 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.139629462915793 (code B ref -1); Mon, 31 Mar 2014 19:38:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 31 Mar 2014 19:37:09 +0000 Original-Received: from localhost ([127.0.0.1]:58220 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WUi15-00046d-TW for submit@debbugs.gnu.org; Mon, 31 Mar 2014 15:37:08 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:57836) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WUi12-00046S-Jm for submit@debbugs.gnu.org; Mon, 31 Mar 2014 15:37:05 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WUi0w-0001iL-M8 for submit@debbugs.gnu.org; Mon, 31 Mar 2014 15:37:04 -0400 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:40981) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUi0w-0001iH-JG for submit@debbugs.gnu.org; Mon, 31 Mar 2014 15:36:58 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59498) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUi0r-0005k5-34 for bug-gnu-emacs@gnu.org; Mon, 31 Mar 2014 15:36:58 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WUi0g-0001gY-48 for bug-gnu-emacs@gnu.org; Mon, 31 Mar 2014 15:36:53 -0400 Original-Received: from mailrelay005.isp.belgacom.be ([195.238.6.171]:58248) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUi0f-0001gL-R1 for bug-gnu-emacs@gnu.org; Mon, 31 Mar 2014 15:36:42 -0400 X-Belgacom-Dynamic: yes Original-Received: from 55.22-200-80.adsl-dyn.isp.belgacom.be (HELO LDLC-portable) ([80.200.22.55]) by relay.skynet.be with ESMTP; 31 Mar 2014 21:36:40 +0200 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.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-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:87580 Archived-At: --=-=-= Content-Type: text/plain I report two problems, but they really are the same bug. 1st problem: >From emacs -Q : select e.g. the first line of the scratch buffer hit C-x n n (that is a disabled command, so you get a prompt) answer 'n' to the prompt the buffer is narrowed anyway. I expected nothing to happen wrt narrowing. 2nd problem: >From emacs -Q, eval : (defun my-command () (interactive) (message "Got called !")) (put 'my-command 'disabled t) then: M-x my-command RET (you get a prompt) hit SPC to execute just once and leave disabled hit C-h e to show the *Messages* buffer You can see: Got called ! [2 times] I expected to see "Got called !" (only once). Both of these seem to be fixed with the attached patch. However, with this patch, when `disabled-command-function' decides to run the command, it does so by invoking call-interactively, thereby not executing what command-execute would have done if the command had not been disabled. It doesn't seem right but I'm not sure (and have no idea what to change anyway). Here's the patch : --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-lisp-simple.el-command-execute-Do-not-execute-disabl.patch >From d5259941c61fb9de3967135925d1649a3aaa9381 Mon Sep 17 00:00:00 2001 From: Nicolas Richard Date: Mon, 31 Mar 2014 19:41:22 +0200 Subject: [PATCH] * lisp/simple.el (command-execute): Do not execute disabled commands. --- lisp/ChangeLog | 4 ++++ lisp/simple.el | 60 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 747bbcf..6ad449f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2014-03-31 Nicolas Richard + + * simple.el (command-execute): Do not execute the command when it + is disabled. 2014-03-29 Juri Linkov * dired-aux.el (dired-compress-file): Don't use string-match-p diff --git a/lisp/simple.el b/lisp/simple.el index 98604a4..b469fc1 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1628,36 +1628,36 @@ a special event, so ignore the prefix argument and don't clear it." (prog1 prefix-arg (setq current-prefix-arg prefix-arg) (setq prefix-arg nil))))) - (and (symbolp cmd) - (get cmd 'disabled) - ;; FIXME: Weird calling convention! - (run-hooks 'disabled-command-function)) - (let ((final cmd)) - (while - (progn - (setq final (indirect-function final)) - (if (autoloadp final) - (setq final (autoload-do-load final cmd))))) - (cond - ((arrayp final) - ;; If requested, place the macro in the command history. For - ;; other sorts of commands, call-interactively takes care of this. - (when record-flag - (push `(execute-kbd-macro ,final ,prefixarg) command-history) - ;; Don't keep command history around forever. - (when (and (numberp history-length) (> history-length 0)) - (let ((cell (nthcdr history-length command-history))) - (if (consp cell) (setcdr cell nil))))) - (execute-kbd-macro final prefixarg)) - (t - ;; Pass `cmd' rather than `final', for the backtrace's sake. - (prog1 (call-interactively cmd record-flag keys) - (when (and (symbolp cmd) - (get cmd 'byte-obsolete-info) - (not (get cmd 'command-execute-obsolete-warned))) - (put cmd 'command-execute-obsolete-warned t) - (message "%s" (macroexp--obsolete-warning - cmd (get cmd 'byte-obsolete-info) "command"))))))))) + (if (and (symbolp cmd) + (get cmd 'disabled)) + ;; FIXME: Weird calling convention! + (run-hooks 'disabled-command-function) + (let ((final cmd)) + (while + (progn + (setq final (indirect-function final)) + (if (autoloadp final) + (setq final (autoload-do-load final cmd))))) + (cond + ((arrayp final) + ;; If requested, place the macro in the command history. For + ;; other sorts of commands, call-interactively takes care of this. + (when record-flag + (push `(execute-kbd-macro ,final ,prefixarg) command-history) + ;; Don't keep command history around forever. + (when (and (numberp history-length) (> history-length 0)) + (let ((cell (nthcdr history-length command-history))) + (if (consp cell) (setcdr cell nil))))) + (execute-kbd-macro final prefixarg)) + (t + ;; Pass `cmd' rather than `final', for the backtrace's sake. + (prog1 (call-interactively cmd record-flag keys) + (when (and (symbolp cmd) + (get cmd 'byte-obsolete-info) + (not (get cmd 'command-execute-obsolete-warned))) + (put cmd 'command-execute-obsolete-warned t) + (message "%s" (macroexp--obsolete-warning + cmd (get cmd 'byte-obsolete-info) "command")))))))))) (defvar minibuffer-history nil "Default minibuffer history list. -- 1.9.1 --=-=-= Content-Type: text/plain -- Nico. --=-=-=--