* 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).