unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#29399: 26.0.90; `edit-kbd-macro' has bad prompt
@ 2017-11-22 16:27 Drew Adams
  2017-11-23  0:13 ` Noam Postavsky
  0 siblings, 1 reply; 5+ messages in thread
From: Drew Adams @ 2017-11-22 16:27 UTC (permalink / raw)
  To: 29399

emacs -Q

C-x ( C-f C-f C-f C-x )

M-: (global-set-key (kbd "C-o") 'execute-extended-command)
M-: (global-set-key (kbd "M-x") 'forward-char)

C-o edit-kbd-macro RET

The prompt says:

"Keyboard macro to edit (C-x e, M-x, C-h l, or keys):"

It should use \\[execute-extended-command] and thus say:

"Keyboard macro to edit (C-x e, C-o, C-h l, or keys):"

This prompt is anyway not clear.  The command should instead accept
a key sequence that shows more complete info/help, and the prompt should
just mention that key sequence.


In GNU Emacs 26.0.90 (build 3, x86_64-w64-mingw32)
 of 2017-10-13 built on LAPHROAIG
Repository revision: 906224eba147bdfc0514090064e8e8f53160f1d4
Windowing system distributor 'Microsoft Corp.', version 6.1.7601
Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
Defining kbd macro...
Keyboard macro defined
Quit [2 times]
execute-extended-command
forward-char
Quit
Configured using:
 'configure --without-dbus --host=x86_64-w64-mingw32
 --without-compress-install 'CFLAGS=-O2 -static -g3''

Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND NOTIFY ACL GNUTLS LIBXML2 ZLIB
TOOLKIT_SCROLL_BARS

Important settings:
  value of $LANG: ENU
  locale-coding-system: cp1252





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#29399: 26.0.90; `edit-kbd-macro' has bad prompt
  2017-11-22 16:27 bug#29399: 26.0.90; `edit-kbd-macro' has bad prompt Drew Adams
@ 2017-11-23  0:13 ` Noam Postavsky
  2017-11-23  1:15   ` Drew Adams
  0 siblings, 1 reply; 5+ messages in thread
From: Noam Postavsky @ 2017-11-23  0:13 UTC (permalink / raw)
  To: Drew Adams; +Cc: 29399

Drew Adams <drew.adams@oracle.com> writes:

> emacs -Q
>
> C-x ( C-f C-f C-f C-x )
>
> M-: (global-set-key (kbd "C-o") 'execute-extended-command)
> M-: (global-set-key (kbd "M-x") 'forward-char)
>
> C-o edit-kbd-macro RET
>
> The prompt says:
>
> "Keyboard macro to edit (C-x e, M-x, C-h l, or keys):"
>
> It should use \\[execute-extended-command] and thus say:
>
> "Keyboard macro to edit (C-x e, C-o, C-h l, or keys):"
>
> This prompt is anyway not clear.  The command should instead accept
> a key sequence that shows more complete info/help, and the prompt should
> just mention that key sequence.

I'm not sure if this would help so much for the OP's case [1], which is
more like:

    (defun my/execute-extended-command () ; actually `smex'[2] in OP's case
      (interactive)
      (call-interactively 'execute-extended-command))
    (global-set-key (kbd "M-x") 'my/execute-extended-command)

With that kind of config, I get

    Keyboard macro to edit (C-x e, <execute>, C-h l, or keys):

I have no idea how to produce <execute> on my keyboard.  If also do

    (define-key global-map [execute] 'ignore)

I get

    Keyboard macro to edit (C-x e, <menu>, C-h l, or keys):

which I know is the "Menu key" [3].  But personally, I disable the <menu>
key also, because otherwise I sometimes accidentally lean on it,
producing deeply nested minibuffer prompt which is annoying.

    (define-key global-map [menu] 'ignore)

Which ends up with this:

    "Keyboard macro to edit (C-x e, M-x execute-extended-command, C-h l, or keys):"

[1]: https://emacs.stackexchange.com/questions/37017/unable-to-supply-macro-name-to-edit-kbd-macro-when-m-x-is-bound-to-smex
[2]: https://github.com/nonsequitur/smex
[3]: https://en.wikipedia.org/wiki/Menu_key





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#29399: 26.0.90; `edit-kbd-macro' has bad prompt
  2017-11-23  0:13 ` Noam Postavsky
@ 2017-11-23  1:15   ` Drew Adams
  2017-11-27  0:55     ` Noam Postavsky
  0 siblings, 1 reply; 5+ messages in thread
From: Drew Adams @ 2017-11-23  1:15 UTC (permalink / raw)
  To: Noam Postavsky; +Cc: 29399

> > It should use \\[execute-extended-command] and thus say:
> > "Keyboard macro to edit (C-x e, C-o, C-h l, or keys):"
> 
> I'm not sure if this would help so much for the OP's case [1], which is
> more like:
> 
>     (defun my/execute-extended-command () ; actually `smex'[2] in OP's
> case
>       (interactive)
>       (call-interactively 'execute-extended-command))
>     (global-set-key (kbd "M-x") 'my/execute-extended-command)
> 
> With that kind of config, I get
>     Keyboard macro to edit (C-x e, <execute>, C-h l, or keys):

Well, that's at least correct. ;-)  The problem is that
there is no way to tell Emacs which binding to show.

I suppose you could use `set-advertised-calling-convention',
but a user shouldn't need to bother (or know about)
that, here.

This is a general Emacs gotcha/problem.  It's not the
problem of this bug report.

Except for this, which I also said:

>> This prompt is anyway not clear.  The command should
>> instead accept a key sequence that shows more complete
>> info/help, and the prompt should just mention that key
>> sequence.

That's the right thing to do.  The prompt shouldn't
try to mention lots of keys.  That's only good when
the command itself will actually read keys - it then
knows just which keys to mention: those it uses.

This command should mention only (at most) a help key
that it provides (would provide).  Using that help key
(at that time - while prompted) would show whatever
help we want to show, including mentioning any keys
or commands, if appropriate.

Of course that help could itself fall into the problem
of showing a key such as `<execute>' or `<menu>'.  But
as I said, that's a general problem.

It could choose to mention only command names, i.e.,
not use \\[...].

> I have no idea how to produce <execute> on my keyboard.

You probably cannot.

> Which ends up with this:
> 
> "Keyboard macro to edit (C-x e, M-x execute-extended-command, C-h l,
> or keys):"

And that's as good as it could get.  The command can
reasonably assume that you can use `execute-extended-command'
(which you can, I think, regardless of whether `M-x' is
bound to `smex').  The command cannot know that a user
always wants to use `smex' instead of `M-x'.

UNLESS the user (or `smex-mode' or whatever) actually
substitutes `smex' for `execute-extended-command' keys,
using remapping or using `substitute-key-definition'.





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#29399: 26.0.90; `edit-kbd-macro' has bad prompt
  2017-11-23  1:15   ` Drew Adams
@ 2017-11-27  0:55     ` Noam Postavsky
  2017-12-02 14:54       ` Noam Postavsky
  0 siblings, 1 reply; 5+ messages in thread
From: Noam Postavsky @ 2017-11-27  0:55 UTC (permalink / raw)
  To: Drew Adams; +Cc: 29399

[-- Attachment #1: Type: text/plain, Size: 546 bytes --]

tags 29399 + patch
quit

Drew Adams <drew.adams@oracle.com> writes:

> UNLESS the user (or `smex-mode' or whatever) actually
> substitutes `smex' for `execute-extended-command' keys,
> using remapping or using `substitute-key-definition'.

Ah, I didn't realize before, but if you do

    (define-key global [remape execute-extended-command] 'smex)

then substitute-command-keys still shows M-x for
\\[execute-extended-command].  The following patch updates the prompt,
and also the checks non-remapped key bindings for the key sequence
entered.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch --]
[-- Type: text/x-diff, Size: 3156 bytes --]

From dec6f0ccf57ea590c199b6cdf39c6fe93d67d06b Mon Sep 17 00:00:00 2001
From: Noam Postavsky <npostavs@gmail.com>
Date: Sun, 26 Nov 2017 19:16:16 -0500
Subject: [PATCH] Improve edit-kbd-macro prompting in case of remapped keys
 (Bug#29399)

* lisp/edmacro.el (edit-kbd-macro): Use substitute-command-keys to
present the current bindings in the prompt.  Check the the
non-remapped binding of the entered key sequence as well.
---
 lisp/edmacro.el | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/lisp/edmacro.el b/lisp/edmacro.el
index b050f4d64c..dc840ef1f1 100644
--- a/lisp/edmacro.el
+++ b/lisp/edmacro.el
@@ -88,20 +88,26 @@ edmacro-original-buffer
 (defun edit-kbd-macro (keys &optional prefix finish-hook store-hook)
   "Edit a keyboard macro.
 At the prompt, type any key sequence which is bound to a keyboard macro.
-Or, type `C-x e' or RET to edit the last keyboard macro, `C-h l' to edit
-the last 300 keystrokes as a keyboard macro, or `\\[execute-extended-command]' to edit a macro by
-its command name.
+Or, type `\\[kmacro-end-and-call-macro]' or RET to edit the last
+keyboard macro, `\\[view-lossage]' to edit the last 300
+keystrokes as a keyboard macro, or `\\[execute-extended-command]'
+to edit a macro by its command name.
 With a prefix argument, format the macro in a more concise way."
-  (interactive "kKeyboard macro to edit (C-x e, M-x, C-h l, or keys): \nP")
+  (interactive
+   (list (read-key-sequence (substitute-command-keys "Keyboard macro to edit \
+\(\\[kmacro-end-and-call-macro], \\[execute-extended-command], \\[view-lossage],\
+ or keys): "))
+         current-prefix-arg))
   (when keys
     (let ((cmd (if (arrayp keys) (key-binding keys) keys))
+          (cmd-noremap (when (arrayp keys) (key-binding keys nil t)))
 	  (mac nil) (mac-counter nil) (mac-format nil)
 	  kmacro)
       (cond (store-hook
 	     (setq mac keys)
 	     (setq cmd nil))
-	    ((or (memq cmd '(call-last-kbd-macro kmacro-call-macro
-			     kmacro-end-or-call-macro kmacro-end-and-call-macro))
+	    ((or (memq cmd '(call-last-kbd-macro kmacro-call-macro kmacro-end-or-call-macro kmacro-end-and-call-macro))
+                 (memq cmd-noremap '(call-last-kbd-macro kmacro-call-macro kmacro-end-or-call-macro kmacro-end-and-call-macro))
 		 (member keys '("\r" [return])))
 	     (or last-kbd-macro
 		 (y-or-n-p "No keyboard macro defined.  Create one? ")
@@ -109,13 +115,14 @@ edit-kbd-macro
 	     (setq mac (or last-kbd-macro ""))
 	     (setq keys nil)
 	     (setq cmd 'last-kbd-macro))
-	    ((eq cmd 'execute-extended-command)
+	    ((memq 'execute-extended-command (list cmd cmd-noremap))
 	     (setq cmd (read-command "Name of keyboard macro to edit: "))
 	     (if (string-equal cmd "")
 		 (error "No command name given"))
 	     (setq keys nil)
 	     (setq mac (symbol-function cmd)))
-	    ((memq cmd '(view-lossage electric-view-lossage))
+	    ((or (memq cmd '(view-lossage electric-view-lossage))
+                 (memq cmd-noremap '(view-lossage electric-view-lossage)))
 	     (setq mac (recent-keys))
 	     (setq keys nil)
 	     (setq cmd 'last-kbd-macro))
-- 
2.11.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* bug#29399: 26.0.90; `edit-kbd-macro' has bad prompt
  2017-11-27  0:55     ` Noam Postavsky
@ 2017-12-02 14:54       ` Noam Postavsky
  0 siblings, 0 replies; 5+ messages in thread
From: Noam Postavsky @ 2017-12-02 14:54 UTC (permalink / raw)
  To: Drew Adams; +Cc: 29399

tags 29399 fixed
close 29399 26.1
quit

Noam Postavsky <npostavs@users.sourceforge.net> writes:

>  The following patch updates the prompt, and also the checks
> non-remapped key bindings for the key sequence entered.

Pushed to emacs-26.

[1: 98ca7d5f26]: 2017-12-02 09:35:44 -0500
  Improve edit-kbd-macro prompting in case of remapped keys (Bug#29399)
  https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=98ca7d5f26f5bdde44864c7f24dafb6725fca09f





^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-12-02 14:54 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-22 16:27 bug#29399: 26.0.90; `edit-kbd-macro' has bad prompt Drew Adams
2017-11-23  0:13 ` Noam Postavsky
2017-11-23  1:15   ` Drew Adams
2017-11-27  0:55     ` Noam Postavsky
2017-12-02 14:54       ` Noam Postavsky

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).