* C-h k, C-h f and keyboard macros: Patch.
@ 2003-02-10 23:56 Luc Teirlinck
2003-02-11 13:10 ` Kim F. Storm
2003-02-12 7:19 ` Richard Stallman
0 siblings, 2 replies; 15+ messages in thread
From: Luc Teirlinck @ 2003-02-10 23:56 UTC (permalink / raw)
Currently, `describe-key' (usually C-h k) and `describe-function'
(usually C-h f) produce confusing output when confronted with a
keyboard macro. Bind any key to a keyboard macro and do C-h k. The
output looks like:
C-c 3 runs the command ott
which is a keyboard macro.
It is bound to C-c 3.
[Missing arglist. Please make a bug report.]
Keyboard macro.
There is no missing arglist. The following patch would replace the
confusing "[Missing arglist. Please make a bug report.]" with a
description of the macro, provided by `kmacro-display'.
New C-h k output:
C-c 3 runs the command ott
which is a keyboard macro.
It is bound to C-c 3.
Macro: SPC one SPC two SPC three SPC
Keyboard macro.
It also seems to work well for keys bound directly to the macro
definition:
C-c d runs the command [24 100 126]
which is a keyboard macro.
It is bound to C-c d.
Macro: C-x d ~
Keyboard macro.
In other words, we get the "readable" and the "formal" definition,
yielding no duplication in this case.
An alternative to printing the `kmacro-display' output would be to
just erase the offending line and not replace it with anything, but I
find the `kmacro-display' output useful in situations where I do
C-h k. The patch affects C-h f in the same way as C-h k.
Change log:
2003-02-10 Luc Teirlinck <teirllm@mail.auburn.edu>
* help-fns.el (describe-function-1): Change output for
keyboard macros.
Patch:
===File ~/help-fns-diff=====================================
cd /usr/local/share/emacs/21.3.50/lisp/
diff -c /usr/local/share/emacs/21.3.50/lisp/help-fns.el /usr/local/share/emacs/21.3.50/lisp/help-fns.new.el
*** /usr/local/share/emacs/21.3.50/lisp/help-fns.el Tue Feb 4 22:37:29 2003
--- /usr/local/share/emacs/21.3.50/lisp/help-fns.new.el Mon Feb 10 16:22:57 2003
***************
*** 293,299 ****
(when (commandp function)
(let* ((remapped (remap-command function))
(keys (where-is-internal
! (or remapped function) overriding-local-map nil nil)))
(when remapped
(princ "It is remapped to `")
(princ (symbol-name remapped))
--- 293,299 ----
(when (commandp function)
(let* ((remapped (remap-command function))
(keys (where-is-internal
! (or remapped function) overriding-local-map nil nil)))
(when remapped
(princ "It is remapped to `")
(princ (symbol-name remapped))
***************
*** 323,328 ****
--- 323,331 ----
function)))))
usage)
(car usage))
+ ((or (stringp def)
+ (vectorp def))
+ (kmacro-display def))
(t "[Missing arglist. Please make a bug report.]")))
(terpri))
(let ((obsolete (and
Diff finished at Mon Feb 10 16:47:18
============================================================
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-11 13:10 ` Kim F. Storm
@ 2003-02-11 12:52 ` Juanma Barranquero
2003-02-11 14:13 ` Kim F. Storm
2003-02-11 16:03 ` Luc Teirlinck
1 sibling, 1 reply; 15+ messages in thread
From: Juanma Barranquero @ 2003-02-11 12:52 UTC (permalink / raw)
Cc: emacs-devel
On 11 Feb 2003 14:10:42 +0100, storm@cua.dk (Kim F. Storm) wrote:
> GREAT IDEA!!
I also thing it's a great idea.
Trying it, though, has unveiled a bug with local keymaps and
`lookup-key':
emacs -q --no-site-file
M-x ielm
*** Welcome to IELM *** Type (describe-mode) for help.
ELISP> (remap-command [home])
nil
ELISP> (cua-mode 1)
nil
ELISP> (remap-command [home])
*** Eval error *** Key sequence contains invalid event
ELISP>
If current_minor_maps (at keymap.c, line 1456) returns non-zero, the
loop is entered and the first call to Flookup_key at line 1463 fails.
/L/e/k/t/u
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-10 23:56 C-h k, C-h f and keyboard macros: Patch Luc Teirlinck
@ 2003-02-11 13:10 ` Kim F. Storm
2003-02-11 12:52 ` Juanma Barranquero
2003-02-11 16:03 ` Luc Teirlinck
2003-02-12 7:19 ` Richard Stallman
1 sibling, 2 replies; 15+ messages in thread
From: Kim F. Storm @ 2003-02-11 13:10 UTC (permalink / raw)
Cc: emacs-devel
Luc Teirlinck <teirllm@dms.auburn.edu> writes:
> Currently, `describe-key' (usually C-h k) and `describe-function'
> (usually C-h f) produce confusing output when confronted with a
> keyboard macro.
> New C-h k output:
>
> C-c 3 runs the command ott
> which is a keyboard macro.
> It is bound to C-c 3.
> Macro: SPC one SPC two SPC three SPC
>
> Keyboard macro.
>
> In other words, we get the "readable" and the "formal" definition,
> yielding no duplication in this case.
GREAT IDEA!!
>
> An alternative to printing the `kmacro-display' output would be to
> just erase the offending line and not replace it with anything, but I
> find the `kmacro-display' output useful in situations where I do
> C-h k. The patch affects C-h f in the same way as C-h k.
The problem with using kmacro-display is that it is intended for
interactive use, so it prints the macro definition using `message'.
It is better to use format-kbd-macro directly:
Index: help-fns.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/help-fns.el,v
retrieving revision 1.28
diff -c -r1.28 help-fns.el
*** help-fns.el 4 Feb 2003 11:23:06 -0000 1.28
--- help-fns.el 11 Feb 2003 12:10:17 -0000
***************
*** 323,328 ****
--- 323,331 ----
function)))))
usage)
(car usage))
+ ((or (stringp def)
+ (vectorp def))
+ (format "\nMacro: %s" (format-kbd-macro def)))
(t "[Missing arglist. Please make a bug report.]")))
(terpri))
(let ((obsolete (and
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-11 14:13 ` Kim F. Storm
@ 2003-02-11 14:07 ` Juanma Barranquero
2003-02-11 15:18 ` Kim F. Storm
2003-02-11 16:19 ` Stefan Monnier
1 sibling, 1 reply; 15+ messages in thread
From: Juanma Barranquero @ 2003-02-11 14:07 UTC (permalink / raw)
Cc: emacs-devel
On 11 Feb 2003 15:13:47 +0100, storm@cua.dk (Kim F. Storm) wrote:
> you are trying to run (key-binding [remap [home]] nil t)
> which correctly reports a "Key sequence contains invalid event"
> error (but only when there are any remap entries in one of the
> active keymaps -- as there are when you enable cua-mode).
Oh, I don't doubt you're right, but, from the point of view of a user,
it's weird that asking for a remaping says nil when there aren't remap
entries, and error when there are...
> The problem I can see is that remap-command expects a SYMBOL as the
> argument. All callers in C checks for this, but from Lisp, there is
> no such check. I'll add one.
Thanks.
> So
>
> > ELISP> (cua-mode 1)
> > ELISP> (remap-command [home])
>
> should have failed with a "wrong type argument" error.
This will make Luc's patch fail for me...
> But how was this related to the C-h k macro patch??
After Luc's (or your's) patch, with cua-mode enabled, if I do:
[f3] "pepe" home [f4] ; define macro that inserts "pepe" and goes to
; the beginning of line
C-x C-k b M-z ; assign it to M-z
C-h k M-z ; see it
I get "Key sequence contains invalid event", not the C-h k output.
/L/e/k/t/u
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-11 12:52 ` Juanma Barranquero
@ 2003-02-11 14:13 ` Kim F. Storm
2003-02-11 14:07 ` Juanma Barranquero
2003-02-11 16:19 ` Stefan Monnier
0 siblings, 2 replies; 15+ messages in thread
From: Kim F. Storm @ 2003-02-11 14:13 UTC (permalink / raw)
Cc: emacs-devel
Juanma Barranquero <lektu@terra.es> writes:
>
> Trying it, though, has unveiled a bug with local keymaps and
> `lookup-key':
> ELISP> (remap-command [home])
*** Eval error *** Key sequence contains invalid event
The call `(remap-command COMMAND)' is equivalent to
the call `(key-binding [remap COMMAND] nil t)', so in your case,
you are trying to run (key-binding [remap [home]] nil t)
which correctly reports a "Key sequence contains invalid event"
error (but only when there are any remap entries in one of the
active keymaps -- as there are when you enable cua-mode).
This reveals that key-binding only validates as much of the key
sequence as is matched by the active keymaps, but I consider that a
minor issue.
The problem I can see is that remap-command expects a SYMBOL as the
argument. All callers in C checks for this, but from Lisp, there is
no such check. I'll add one.
So
> ELISP> (cua-mode 1)
> ELISP> (remap-command [home])
should have failed with a "wrong type argument" error.
But how was this related to the C-h k macro patch??
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-11 15:18 ` Kim F. Storm
@ 2003-02-11 14:27 ` Juanma Barranquero
2003-02-11 15:36 ` Kim F. Storm
1 sibling, 0 replies; 15+ messages in thread
From: Juanma Barranquero @ 2003-02-11 14:27 UTC (permalink / raw)
Cc: emacs-devel
On 11 Feb 2003 16:18:00 +0100, storm@cua.dk (Kim F. Storm) wrote:
> I see it now, thanks!
I'm glad, I was starting to believe it was my Emacs... :)
> Here is a version of the patch which fixes this problem:
Works great. Thanks!
/L/e/k/t/u
--
"'Cowardly' is not an adverb, although it looks like one. It is an
adjective. It makes a statement about general temperament, rather than
a specific occasion. I don't think Emacs has a general temperament."
"Mine does."
-- RMS and Eli Zaretskii, in emacs-devel@gnu.org
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-11 15:36 ` Kim F. Storm
@ 2003-02-11 14:47 ` Juanma Barranquero
0 siblings, 0 replies; 15+ messages in thread
From: Juanma Barranquero @ 2003-02-11 14:47 UTC (permalink / raw)
Cc: emacs-devel
On 11 Feb 2003 16:36:41 +0100, storm@cua.dk (Kim F. Storm) wrote:
> Thinking more about it, I would argue that since remap-command may in
> practice be applied to anything that is found in a keymap (as was the
> case here), it would be better to just return nil if the argument is
> not a symbol.
So, you're finally agreeing with my initial bug report :-P
> So with latest CVS head, the previous version of the patch is still ok:
Ok, thanks (again).
/L/e/k/t/u
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-11 14:07 ` Juanma Barranquero
@ 2003-02-11 15:18 ` Kim F. Storm
2003-02-11 14:27 ` Juanma Barranquero
2003-02-11 15:36 ` Kim F. Storm
0 siblings, 2 replies; 15+ messages in thread
From: Kim F. Storm @ 2003-02-11 15:18 UTC (permalink / raw)
Cc: emacs-devel
Juanma Barranquero <lektu@terra.es> writes:
> After Luc's (or your's) patch, with cua-mode enabled, if I do:
>
> [f3] "pepe" home [f4] ; define macro that inserts "pepe" and goes to
> ; the beginning of line
> C-x C-k b M-z ; assign it to M-z
> C-h k M-z ; see it
>
> I get "Key sequence contains invalid event", not the C-h k output.
I see it now, thanks!
Here is a version of the patch which fixes this problem:
Index: help-fns.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/help-fns.el,v
retrieving revision 1.28
diff -c -r1.28 help-fns.el
*** help-fns.el 4 Feb 2003 11:23:06 -0000 1.28
--- help-fns.el 11 Feb 2003 14:16:50 -0000
***************
*** 291,297 ****
(princ ".")
(terpri)
(when (commandp function)
! (let* ((remapped (remap-command function))
(keys (where-is-internal
(or remapped function) overriding-local-map nil nil)))
(when remapped
--- 291,297 ----
(princ ".")
(terpri)
(when (commandp function)
! (let* ((remapped (and (symbolp function) (remap-command function)))
(keys (where-is-internal
(or remapped function) overriding-local-map nil nil)))
(when remapped
***************
*** 323,328 ****
--- 323,331 ----
function)))))
usage)
(car usage))
+ ((or (stringp def)
+ (vectorp def))
+ (format "\nMacro: %s" (format-kbd-macro def)))
(t "[Missing arglist. Please make a bug report.]")))
(terpri))
(let ((obsolete (and
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-11 15:18 ` Kim F. Storm
2003-02-11 14:27 ` Juanma Barranquero
@ 2003-02-11 15:36 ` Kim F. Storm
2003-02-11 14:47 ` Juanma Barranquero
1 sibling, 1 reply; 15+ messages in thread
From: Kim F. Storm @ 2003-02-11 15:36 UTC (permalink / raw)
Cc: emacs-devel
storm@cua.dk (Kim F. Storm) writes:
>
> Here is a version of the patch which fixes this problem:
>
> ! (let* ((remapped (and (symbolp function) (remap-command function)))
Thinking more about it, I would argue that since remap-command may in
practice be applied to anything that is found in a keymap (as was the
case here), it would be better to just return nil if the argument is
not a symbol. I have just committed that change!
So with latest CVS head, the previous version of the patch is still ok:
Index: help-fns.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/help-fns.el,v
retrieving revision 1.28
diff -c -r1.28 help-fns.el
*** help-fns.el 4 Feb 2003 11:23:06 -0000 1.28
--- help-fns.el 11 Feb 2003 14:36:31 -0000
***************
*** 323,328 ****
--- 323,331 ----
function)))))
usage)
(car usage))
+ ((or (stringp def)
+ (vectorp def))
+ (format "\nMacro: %s" (format-kbd-macro def)))
(t "[Missing arglist. Please make a bug report.]")))
(terpri))
(let ((obsolete (and
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-11 13:10 ` Kim F. Storm
2003-02-11 12:52 ` Juanma Barranquero
@ 2003-02-11 16:03 ` Luc Teirlinck
1 sibling, 0 replies; 15+ messages in thread
From: Luc Teirlinck @ 2003-02-11 16:03 UTC (permalink / raw)
Cc: emacs-devel
Kim Storm wrote:
The problem with using kmacro-display is that it is intended for
interactive use, so it prints the macro definition using `message'.
It is better to use format-kbd-macro directly:
Using format-kbd-macro directly is indeed a much better idea than
using kmacro-display. `kmacro-display' also has the additional
problem of not being autoloaded. (I should have thought of that
earlier.) `format-kbd-macro' is autoloaded.
Sincerely,
Luc.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-11 14:13 ` Kim F. Storm
2003-02-11 14:07 ` Juanma Barranquero
@ 2003-02-11 16:19 ` Stefan Monnier
2003-02-11 20:58 ` Kim F. Storm
2003-02-12 20:34 ` Richard Stallman
1 sibling, 2 replies; 15+ messages in thread
From: Stefan Monnier @ 2003-02-11 16:19 UTC (permalink / raw)
Cc: emacs-devel
> The call `(remap-command COMMAND)' is equivalent to
> the call `(key-binding [remap COMMAND] nil t)', so in your case,
> you are trying to run (key-binding [remap [home]] nil t)
> which correctly reports a "Key sequence contains invalid event"
> error (but only when there are any remap entries in one of the
> active keymaps -- as there are when you enable cua-mode).
I think it shouldn't report an error but just return nil.
Checking that events are "meaningful" might be OK for define-key but
doesn't make any sense for lookup-key and friends.
If you look at the test used currently, it is already more lax in
lookup-key than in define-key (justified by the following comment:)
/* Allow string since binding for `menu-bar-select-buffer'
includes the buffer name in the key sequence. */
I suggest we just get rid of the checks in lookup-key.
Stefan
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-11 16:19 ` Stefan Monnier
@ 2003-02-11 20:58 ` Kim F. Storm
2003-02-12 20:34 ` Richard Stallman
1 sibling, 0 replies; 15+ messages in thread
From: Kim F. Storm @ 2003-02-11 20:58 UTC (permalink / raw)
Cc: emacs-devel
"Stefan Monnier" <monnier+gnu/emacs@rum.cs.yale.edu> writes:
>
> I suggest we just get rid of the checks in lookup-key.
That's ok with me.
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-10 23:56 C-h k, C-h f and keyboard macros: Patch Luc Teirlinck
2003-02-11 13:10 ` Kim F. Storm
@ 2003-02-12 7:19 ` Richard Stallman
1 sibling, 0 replies; 15+ messages in thread
From: Richard Stallman @ 2003-02-12 7:19 UTC (permalink / raw)
Cc: emacs-devel
It looks good to me.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-11 16:19 ` Stefan Monnier
2003-02-11 20:58 ` Kim F. Storm
@ 2003-02-12 20:34 ` Richard Stallman
2003-02-13 0:16 ` Kim F. Storm
1 sibling, 1 reply; 15+ messages in thread
From: Richard Stallman @ 2003-02-12 20:34 UTC (permalink / raw)
Cc: storm
The function name `remap-command' is misleading.
It has the form VERB-NOUN, which means that it does VERB to NOUN.
This would be a good name for a function that defines a mappimg.
The doc string suggests it is actually a function to inquire
about the consequences of current keymap contents. That must
have a different name.
Would someone please rename it to `command-remapping'?
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: C-h k, C-h f and keyboard macros: Patch.
2003-02-12 20:34 ` Richard Stallman
@ 2003-02-13 0:16 ` Kim F. Storm
0 siblings, 0 replies; 15+ messages in thread
From: Kim F. Storm @ 2003-02-13 0:16 UTC (permalink / raw)
Cc: Stefan Monnier
Richard Stallman <rms@gnu.org> writes:
> The function name `remap-command' is misleading.
> It has the form VERB-NOUN, which means that it does VERB to NOUN.
> This would be a good name for a function that defines a mappimg.
>
> The doc string suggests it is actually a function to inquire
> about the consequences of current keymap contents. That must
> have a different name.
>
> Would someone please rename it to `command-remapping'?
Done.
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2003-02-13 0:16 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-02-10 23:56 C-h k, C-h f and keyboard macros: Patch Luc Teirlinck
2003-02-11 13:10 ` Kim F. Storm
2003-02-11 12:52 ` Juanma Barranquero
2003-02-11 14:13 ` Kim F. Storm
2003-02-11 14:07 ` Juanma Barranquero
2003-02-11 15:18 ` Kim F. Storm
2003-02-11 14:27 ` Juanma Barranquero
2003-02-11 15:36 ` Kim F. Storm
2003-02-11 14:47 ` Juanma Barranquero
2003-02-11 16:19 ` Stefan Monnier
2003-02-11 20:58 ` Kim F. Storm
2003-02-12 20:34 ` Richard Stallman
2003-02-13 0:16 ` Kim F. Storm
2003-02-11 16:03 ` Luc Teirlinck
2003-02-12 7:19 ` Richard Stallman
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).