GNU bug report logs - #30309
C-u M-x insert-kbd-macro RET RET inserts many unrelated "bindings" (menu separators?)

Previous Next

Package: emacs;

Reported by: Robert Pluim <rpluim <at> gmail.com>

Date: Wed, 31 Jan 2018 16:28:01 UTC

Severity: minor

Tags: confirmed, easy

Fixed in version 29.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 30309 in the body.
You can then email your comments to 30309 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#30309; Package emacs. (Wed, 31 Jan 2018 16:28:01 GMT) Full text and rfc822 format available.

Message #3 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Robert Pluim <rpluim <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: Surprising behaviour of insert-kbd-macro
Date: Wed, 31 Jan 2018 17:26:53 +0100
#emacs-26
emacs -Q
C-u M-x insert-kbd-macro RET RET
=>
(setq last-kbd-macro
   nil)
(global-set-key [C-down-mouse-2 s2] 'last-kbd-macro)
(global-set-key [C-down-mouse-2 s1] 'last-kbd-macro)
(global-set-key [menu-bar help-menu sep1] 'last-kbd-macro)
(global-set-key [menu-bar help-menu sep2] 'last-kbd-macro)
(global-set-key [menu-bar help-menu sep4] 'last-kbd-macro)
(global-set-key [menu-bar file separator-save] 'last-kbd-macro)
(global-set-key [menu-bar file separator-print] 'last-kbd-macro)
(global-set-key [menu-bar file separator-window] 'last-kbd-macro)
(global-set-key [menu-bar file separator-frame] 'last-kbd-macro)
(global-set-key [menu-bar file separator-exit] 'last-kbd-macro)
(global-set-key [menu-bar edit separator-search] 'last-kbd-macro)
(global-set-key [menu-bar edit separator-bookmark] 'last-kbd-macro)
(global-set-key [menu-bar options highlight-separator] 'last-kbd-macro)
(global-set-key [menu-bar options edit-options-separator] 'last-kbd-macro)
(global-set-key [menu-bar options cursor-separator] 'last-kbd-macro)
(global-set-key [menu-bar options debugger-separator] 'last-kbd-macro)
(global-set-key [menu-bar options mule-separator] 'last-kbd-macro)
(global-set-key [menu-bar options showhide-separator] 'last-kbd-macro)
(global-set-key [menu-bar options custom-separator] 'last-kbd-macro)
(global-set-key [menu-bar buffer command-separator] 'last-kbd-macro)
(global-set-key [menu-bar tools separator-prog] 'last-kbd-macro)
(global-set-key [menu-bar tools separator-spell] 'last-kbd-macro)
(global-set-key [menu-bar tools separator-compare] 'last-kbd-macro)
(global-set-key [menu-bar tools separator-vc] 'last-kbd-macro)
(global-set-key [menu-bar tools separator-net] 'last-kbd-macro)
(global-set-key [menu-bar tools separator-encryption-decryption] 'last-kbd-macro)
(global-set-key [menu-bar tools separator-games] 'last-kbd-macro)
(global-set-key [menu-bar help-menu search-documentation sep1] 'last-kbd-macro)
(global-set-key [menu-bar help-menu describe separator-desc-mule] 'last-kbd-macro)
(global-set-key [menu-bar help-menu more-manuals sep2] 'last-kbd-macro)
(global-set-key [menu-bar edit search separator-repeat-search] 'last-kbd-macro)
(global-set-key [menu-bar edit search separator-tag-search] 'last-kbd-macro)
(global-set-key [menu-bar edit search separator-tag-isearch] 'last-kbd-macro)
(global-set-key [menu-bar edit replace separator-replace-tags] 'last-kbd-macro)
(global-set-key [menu-bar edit goto separator-xref] 'last-kbd-macro)
(global-set-key [menu-bar edit goto separator-tag-file] 'last-kbd-macro)
(global-set-key [menu-bar edit props s2] 'last-kbd-macro)
(global-set-key [menu-bar edit props s1] 'last-kbd-macro)
(global-set-key [menu-bar options search-options custom-separator] 'last-kbd-macro)
(global-set-key [menu-bar options mule separator-mule] 'last-kbd-macro)
(global-set-key [menu-bar options mule separator-input-method] 'last-kbd-macro)
(global-set-key [menu-bar options mule separator-coding-system] 'last-kbd-macro)
(global-set-key [menu-bar options showhide datetime-separator] 'last-kbd-macro)
(global-set-key [menu-bar options showhide linecolumn-separator] 'last-kbd-macro)
(global-set-key [menu-bar options customize separator-3] 'last-kbd-macro)
(global-set-key [menu-bar options customize separator-2] 'last-kbd-macro)
(global-set-key [menu-bar options customize separator-1] 'last-kbd-macro)
(global-set-key [menu-bar tools compare separator-ediff-files] 'last-kbd-macro)
(global-set-key [menu-bar tools compare separator-ediff-directories] 'last-kbd-macro)
(global-set-key [menu-bar tools compare separator-ediff-regions] 'last-kbd-macro)
(global-set-key [menu-bar tools compare separator-ediff-windows] 'last-kbd-macro)
(global-set-key [menu-bar tools compare separator-ediff-misc] 'last-kbd-macro)
(global-set-key [menu-bar tools ediff-merge separator-ediff-merge-dirs] 'last-kbd-macro)
(global-set-key [menu-bar tools ediff-merge separator-ediff-merge] 'last-kbd-macro)
(global-set-key [menu-bar tools vc separator2] 'last-kbd-macro)
(global-set-key [menu-bar tools vc separator1] 'last-kbd-macro)
(global-set-key [menu-bar tools directory-search separator-eudc-query] 'last-kbd-macro)
(global-set-key [menu-bar tools directory-search separator-eudc-email] 'last-kbd-macro)
(global-set-key [menu-bar tools encryption-decryption separator-file] 'last-kbd-macro)
(global-set-key [menu-bar tools encryption-decryption separator-keys] 'last-kbd-macro)
(global-set-key [menu-bar options mule set-various-coding-system separator-1] 'last-kbd-macro)
(global-set-key [menu-bar options mule set-various-coding-system separator-2] 'last-kbd-macro)
(global-set-key [menu-bar options mule set-various-coding-system separator-3] 'last-kbd-macro)
(global-set-key [menu-bar options showhide showhide-scroll-bar scrollbar-separator] 'last-kbd-macro)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#30309; Package emacs. (Tue, 06 Feb 2018 01:03:02 GMT) Full text and rfc822 format available.

Message #6 received at 30309 <at> debbugs.gnu.org (full text, mbox):

From: Noam Postavsky <npostavs <at> users.sourceforge.net>
To: 30309 <at> debbugs.gnu.org
Subject: Re: bug#30309: Surprising behaviour of insert-kbd-macro
Date: Mon, 05 Feb 2018 20:02:29 -0500
tags 30309 + confirmed easy
retitle 30309 C-u M-x insert-kbd-macro RET RET inserts many unrelated "bindings" (menu separators?)
quit

Robert Pluim <rpluim <at> gmail.com> writes:

> #emacs-26
> emacs -Q
> C-u M-x insert-kbd-macro RET RET
> =>
> (setq last-kbd-macro
>    nil)
> (global-set-key [C-down-mouse-2 s2] 'last-kbd-macro)
> (global-set-key [C-down-mouse-2 s1] 'last-kbd-macro)
> (global-set-key [menu-bar help-menu sep1] 'last-kbd-macro)
[...]

Yeah, I guess no keybindings should be inserted in that case.





Added tag(s) easy and confirmed. Request was from Noam Postavsky <npostavs <at> users.sourceforge.net> to control <at> debbugs.gnu.org. (Tue, 06 Feb 2018 01:03:02 GMT) Full text and rfc822 format available.

Changed bug title to 'C-u M-x insert-kbd-macro RET RET inserts many unrelated "bindings" (menu separators?)' from 'Surprising behaviour of insert-kbd-macro' Request was from Noam Postavsky <npostavs <at> users.sourceforge.net> to control <at> debbugs.gnu.org. (Tue, 06 Feb 2018 01:03:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#30309; Package emacs. (Fri, 30 Nov 2018 08:37:01 GMT) Full text and rfc822 format available.

Message #13 received at 30309 <at> debbugs.gnu.org (full text, mbox):

From: Robert Pluim <rpluim <at> gmail.com>
To: Noam Postavsky <npostavs <at> users.sourceforge.net>
Cc: 30309 <at> debbugs.gnu.org
Subject: Re: bug#30309: Surprising behaviour of insert-kbd-macro
Date: Fri, 30 Nov 2018 09:36:43 +0100
Noam Postavsky <npostavs <at> users.sourceforge.net> writes:

> tags 30309 + confirmed easy
> retitle 30309 C-u M-x insert-kbd-macro RET RET inserts many unrelated "bindings" (menu separators?)
> quit
>
> Robert Pluim <rpluim <at> gmail.com> writes:
>
>> #emacs-26
>> emacs -Q
>> C-u M-x insert-kbd-macro RET RET
>> =>
>> (setq last-kbd-macro
>>    nil)
>> (global-set-key [C-down-mouse-2 s2] 'last-kbd-macro)
>> (global-set-key [C-down-mouse-2 s1] 'last-kbd-macro)
>> (global-set-key [menu-bar help-menu sep1] 'last-kbd-macro)
> [...]
>
> Yeah, I guess no keybindings should be inserted in that case.

So I guess just checking for last-kbd-macro should be enough, since
that should never have a legitimate key binding.

diff --git i/lisp/macros.el w/lisp/macros.el
index 4078b983ec..53a688a367 100644
--- i/lisp/macros.el
+++ w/lisp/macros.el
@@ -125,7 +125,7 @@ insert-kbd-macro
         ;; (kmacro-create [<keys>] 0 "%d").
 	(prin1 definition (current-buffer))))
     (insert ")\n")
-    (if keys
+    (and keys (not (eq macroname 'last-kbd-macro))
         (let ((keys (or (where-is-internal (symbol-function macroname)
                                            '(keymap))
                         (where-is-internal macroname '(keymap)))))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#30309; Package emacs. (Fri, 29 Mar 2019 14:18:02 GMT) Full text and rfc822 format available.

Message #16 received at 30309 <at> debbugs.gnu.org (full text, mbox):

From: Noam Postavsky <npostavs <at> users.sourceforge.net>
To: Robert Pluim <rpluim <at> gmail.com>
Cc: 30309 <at> debbugs.gnu.org
Subject: Re: bug#30309: Surprising behaviour of insert-kbd-macro
Date: Fri, 29 Mar 2019 10:16:50 -0400
On Fri, 30 Nov 2018 at 03:37, Robert Pluim <rpluim <at> gmail.com> wrote:

> So I guess just checking for last-kbd-macro should be enough, since
> that should never have a legitimate key binding.

I think avoiding passing nil to where-is-internal would be cleaner (or
else stop where-is-internal from looking for bindings of nil). And it
would handle the non-interactive case of

(insert-kbd-macro 'something-not-fbound t)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#30309; Package emacs. (Fri, 29 Mar 2019 15:07:02 GMT) Full text and rfc822 format available.

Message #19 received at 30309 <at> debbugs.gnu.org (full text, mbox):

From: Robert Pluim <rpluim <at> gmail.com>
To: Noam Postavsky <npostavs <at> users.sourceforge.net>
Cc: 30309 <at> debbugs.gnu.org
Subject: Re: bug#30309: Surprising behaviour of insert-kbd-macro
Date: Fri, 29 Mar 2019 16:06:44 +0100
>>>>> On Fri, 29 Mar 2019 10:16:50 -0400, Noam Postavsky <npostavs <at> users.sourceforge.net> said:

    Noam> On Fri, 30 Nov 2018 at 03:37, Robert Pluim <rpluim <at> gmail.com> wrote:
    >> So I guess just checking for last-kbd-macro should be enough,
    >> since that should never have a legitimate key binding.

    Noam> I think avoiding passing nil to where-is-internal would be
    Noam> cleaner (or else stop where-is-internal from looking for
    Noam> bindings of nil). And it would handle the non-interactive
    Noam> case of

    Noam> (insert-kbd-macro 'something-not-fbound t)

That would work as well. Something like this (utterly untested beyond
'insert-kbd-macro'):

diff --git a/src/keymap.c b/src/keymap.c
index 2ac3d33460..2e9f3d5a96 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -2489,6 +2489,7 @@ where_is_internal (Lisp_Object definition, Lisp_Object keymaps,
 
 DEFUN ("where-is-internal", Fwhere_is_internal, Swhere_is_internal, 1, 5, 0,
        doc: /* Return list of keys that invoke DEFINITION.
+If DEFINITION is nil, return nil.
 If KEYMAP is a keymap, search only KEYMAP and the global keymap.
 If KEYMAP is nil, search all the currently active keymaps, except
  for `overriding-local-map' (which is ignored).
@@ -2536,6 +2537,9 @@ The optional 5th arg NO-REMAP alters how command remapping is handled:
   bool remapped = 0;
   Lisp_Object tem = Qnil;
 
+  if (NILP (definition))
+    return Qnil;
+
   /* Refresh the C version of the modifier preference.  */
   where_is_preferred_modifier
     = parse_solitary_modifier (Vwhere_is_preferred_modifier);




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#30309; Package emacs. (Tue, 16 Apr 2019 00:24:02 GMT) Full text and rfc822 format available.

Message #22 received at 30309 <at> debbugs.gnu.org (full text, mbox):

From: Noam Postavsky <npostavs <at> gmail.com>
To: Noam Postavsky <npostavs <at> users.sourceforge.net>
Cc: 30309 <at> debbugs.gnu.org
Subject: Re: bug#30309: Surprising behaviour of insert-kbd-macro
Date: Mon, 15 Apr 2019 20:23:19 -0400
Robert Pluim <rpluim <at> gmail.com> writes:

> That would work as well. Something like this (utterly untested beyond
> 'insert-kbd-macro'):

>  DEFUN ("where-is-internal", Fwhere_is_internal, Swhere_is_internal, 1, 5, 0,
>         doc: /* Return list of keys that invoke DEFINITION.
> +If DEFINITION is nil, return nil.

> +  if (NILP (definition))
> +    return Qnil;
> +

Hmm, on the one hand no keys invoke 'nil', so returning nil in that
situation is already covered by the current docstring (and doing
something else could be considered a plain bug).  On the other hand, I
see it returns keys for which (define-key global-map KEY nil) was
called, which is potentially useful.  I don't know if anything uses
that, but I hesitate to remove the capability.

By the way, I noticed the diff below also fixes this bug, although I
don't quite understand why.

--- i/lisp/macros.el
+++ w/lisp/macros.el
@@ -127,7 +127,7 @@ (defun insert-kbd-macro (macroname &optional keys)
     (insert ")\n")
     (if keys
         (let ((keys (or (where-is-internal (symbol-function macroname)
-                                           '(keymap))
+                                           '(keymap) nil t)
                         (where-is-internal macroname '(keymap)))))
 	  (while keys
 	    (insert "(global-set-key ")





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#30309; Package emacs. (Tue, 16 Apr 2019 07:48:02 GMT) Full text and rfc822 format available.

Message #25 received at 30309 <at> debbugs.gnu.org (full text, mbox):

From: Robert Pluim <rpluim <at> gmail.com>
To: Noam Postavsky <npostavs <at> gmail.com>
Cc: 30309 <at> debbugs.gnu.org, Noam Postavsky <npostavs <at> users.sourceforge.net>
Subject: Re: bug#30309: Surprising behaviour of insert-kbd-macro
Date: Tue, 16 Apr 2019 09:47:34 +0200
>>>>> On Mon, 15 Apr 2019 20:23:19 -0400, Noam Postavsky <npostavs <at> gmail.com> said:

    Noam> Robert Pluim <rpluim <at> gmail.com> writes:
    >> That would work as well. Something like this (utterly untested
    >> beyond 'insert-kbd-macro'):

    >> DEFUN ("where-is-internal", Fwhere_is_internal,
    >> Swhere_is_internal, 1, 5, 0, doc: /* Return list of keys that
    >> invoke DEFINITION.  +If DEFINITION is nil, return nil.

    >> + if (NILP (definition)) + return Qnil; +

    Noam> Hmm, on the one hand no keys invoke 'nil', so returning nil
    Noam> in that situation is already covered by the current
    Noam> docstring (and doing something else could be considered a
    Noam> plain bug).  On the other hand, I see it returns keys for
    Noam> which (define-key global-map KEY nil) was called, which is
    Noam> potentially useful.  I don't know if anything uses that, but
    Noam> I hesitate to remove the capability.

I donʼt know either, so best leave it alone.

    Noam> By the way, I noticed the diff below also fixes this bug,
    Noam> although I don't quite understand why.

That results in

    (setq last-kbd-macro
       nil)
    (global-set-key [S-down-mouse-1] 'last-kbd-macro)
    (global-set-key [horizontal-scroll-bar drag-mouse-1] 'last-kbd-macro)
    (global-set-key [horizontal-scroll-bar mouse-1] 'last-kbd-macro)
    (global-set-key [vertical-scroll-bar drag-mouse-1] 'last-kbd-macro)
    (global-set-key [vertical-scroll-bar mouse-1] 'last-kbd-macro)

which I guess is better, but not perfect.

Robert




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#30309; Package emacs. (Sun, 23 Jan 2022 15:50:02 GMT) Full text and rfc822 format available.

Message #28 received at 30309 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: 30309 <at> debbugs.gnu.org
Subject: Re: bug#30309: C-u M-x insert-kbd-macro RET RET inserts many
 unrelated "bindings" (menu separators?)
Date: Sun, 23 Jan 2022 16:48:57 +0100
Robert Pluim <rpluim <at> gmail.com> writes:

> #emacs-26
> emacs -Q
> C-u M-x insert-kbd-macro RET RET
> =>
> (setq last-kbd-macro
>    nil)
> (global-set-key [C-down-mouse-2 s2] 'last-kbd-macro)
> (global-set-key [C-down-mouse-2 s1] 'last-kbd-macro)
> (global-set-key [menu-bar help-menu sep1] 'last-kbd-macro)

I've now fixed this in Emacs 29.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




bug marked as fixed in version 29.1, send any further explanations to 30309 <at> debbugs.gnu.org and Robert Pluim <rpluim <at> gmail.com> Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Sun, 23 Jan 2022 15:50:03 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 21 Feb 2022 12:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 3 years and 133 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.