summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2010-03-03 12:31:50 -0500
committerChong Yidong <cyd@stupidchicken.com>2010-03-03 12:31:50 -0500
commit233f0c9f8786570011d784056a65c5195fb6020f (patch)
tree295551fb4aefca6fd750f2868b62d39ef5dfc885
parent93cafb328b429b5cce5a99ce7684b2ca63c3bd7f (diff)
downloademacs-233f0c9f8786570011d784056a65c5195fb6020f.tar.gz
Fix keyboard macro key lookup (Bug#5481).
* src/keymap.c (Fwhere_is_internal): Use Fequal to compare definitions, so that keyboard macros are correctly handled (Bug#5481). * lisp/macros.el (insert-kbd-macro): Look up keyboard macro using the definition, not the name (Bug#5481).
-rw-r--r--lisp/ChangeLog5
-rw-r--r--lisp/macros.el3
-rw-r--r--src/ChangeLog6
-rw-r--r--src/keymap.c36
4 files changed, 31 insertions, 19 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 3b0dcb1c80e..bafe6db6d89 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2010-03-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * macros.el (insert-kbd-macro): Look up keyboard macro using the
+ definition, not the name (Bug#5481).
+
2010-03-03 Štěpán Němec <stepnem@gmail.com> (tiny change)
* subr.el (momentary-string-display): Don't overwrite the MESSAGE
diff --git a/lisp/macros.el b/lisp/macros.el
index 4188a432fe5..fa45d8c6108 100644
--- a/lisp/macros.el
+++ b/lisp/macros.el
@@ -138,7 +138,8 @@ use this command, and then save the file."
(prin1 definition (current-buffer))))
(insert ")\n")
(if keys
- (let ((keys (where-is-internal macroname '(keymap))))
+ (let ((keys (where-is-internal (symbol-function macroname)
+ '(keymap))))
(while keys
(insert "(global-set-key ")
(prin1 (car keys) (current-buffer))
diff --git a/src/ChangeLog b/src/ChangeLog
index 761beb2be54..182594662a8 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2010-03-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * keymap.c (Fwhere_is_internal): Use Fequal to compare
+ definitions, so that keyboard macros are correctly handled
+ (Bug#5481).
+
2010-03-02 Eli Zaretskii <eliz@gnu.org>
* coding.c (decode_coding_emacs_mule): Fixup pointers to buffer
diff --git a/src/keymap.c b/src/keymap.c
index 98774d5d685..88e0687272f 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -1633,13 +1633,13 @@ like in the respective argument of `key-binding'. */)
/* If a mouse click position is given, our variables are based on
the buffer clicked on, not the current buffer. So we may have to
switch the buffer here. */
-
+
if (CONSP (position))
{
Lisp_Object window;
-
+
window = POSN_WINDOW (position);
-
+
if (WINDOWP (window)
&& BUFFERP (XWINDOW (window)->buffer)
&& XBUFFER (XWINDOW (window)->buffer) != current_buffer)
@@ -1651,14 +1651,14 @@ like in the respective argument of `key-binding'. */)
would not be a problem here, but it is easier to keep
things the same.
*/
-
+
record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
-
+
set_buffer_internal (XBUFFER (XWINDOW (window)->buffer));
}
}
- keymaps = Fcons (current_global_map, Qnil);
+ keymaps = Fcons (current_global_map, Qnil);
if (!NILP (olp))
{
@@ -1685,8 +1685,8 @@ like in the respective argument of `key-binding'. */)
/* Get the buffer local maps, possibly overriden by text or
overlay properties */
- local_map = get_local_map (pt, current_buffer, Qlocal_map);
- keymap = get_local_map (pt, current_buffer, Qkeymap);
+ local_map = get_local_map (pt, current_buffer, Qlocal_map);
+ keymap = get_local_map (pt, current_buffer, Qkeymap);
if (CONSP (position))
{
@@ -1694,7 +1694,7 @@ like in the respective argument of `key-binding'. */)
/* For a mouse click, get the local text-property keymap
of the place clicked on, rather than point. */
-
+
if (POSN_INBUFFER_P (position))
{
Lisp_Object pos;
@@ -1705,7 +1705,7 @@ like in the respective argument of `key-binding'. */)
{
local_map = get_local_map (XINT (pos),
current_buffer, Qlocal_map);
-
+
keymap = get_local_map (XINT (pos),
current_buffer, Qkeymap);
}
@@ -1716,12 +1716,12 @@ like in the respective argument of `key-binding'. */)
string displayed via the `display' property,
consider `local-map' and `keymap' properties of
that string. */
-
+
if (string = POSN_STRING (position),
(CONSP (string) && STRINGP (XCAR (string))))
{
Lisp_Object pos, map;
-
+
pos = XCDR (string);
string = XCAR (string);
if (INTEGERP (pos)
@@ -1737,7 +1737,7 @@ like in the respective argument of `key-binding'. */)
keymap = map;
}
}
-
+
}
if (!NILP (local_map))
@@ -2890,7 +2890,7 @@ remapped command in the returned list. */)
CONSP (sequences)))
{
Lisp_Object sequence, function;
-
+
sequence = XCAR (sequences);
sequences = XCDR (sequences);
@@ -2903,8 +2903,8 @@ remapped command in the returned list. */)
Either nil or number as value from Flookup_key
means undefined. */
- if (!EQ (shadow_lookup (keymaps, sequence, Qnil, remapped),
- definition))
+ if (NILP (Fequal (shadow_lookup (keymaps, sequence, Qnil, remapped),
+ definition)))
continue;
/* If the current sequence is a command remapping with
@@ -2933,12 +2933,12 @@ remapped command in the returned list. */)
Faset (sequence, make_number (ASIZE (sequence) - 1),
build_string ("(any string)"));
}
-
+
/* It is a true unshadowed match. Record it, unless it's already
been seen (as could happen when inheriting keymaps). */
if (NILP (Fmember (sequence, found)))
found = Fcons (sequence, found);
-
+
/* If firstonly is Qnon_ascii, then we can return the first
binding we find. If firstonly is not Qnon_ascii but not
nil, then we should return the first ascii-only binding