Mercurial > emacs
changeset 106972:d026329addd9
* keymap.c (shadow_lookup): Add `remap' arg.
(describe_map, describe_vector): Update calls to shadow_lookup.
(Fwhere_is_internal): Fix up handling of `remapped_sequences' and
`remapped' so this flag is applicable to `sequence'. Be careful to
perform remapping during shadow_lookup check of remapped_equences.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Sun, 24 Jan 2010 03:42:22 -0500 |
parents | a1e356d208cd |
children | ffa16c09e01d |
files | .bzrignore src/ChangeLog src/keymap.c |
diffstat | 3 files changed, 36 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/.bzrignore Fri Jan 22 11:43:54 2010 -0500 +++ b/.bzrignore Sun Jan 24 03:42:22 2010 -0500 @@ -61,3 +61,4 @@ src/stamp-oldxmenu src/temacs src/deps +configure.lineno
--- a/src/ChangeLog Fri Jan 22 11:43:54 2010 -0500 +++ b/src/ChangeLog Sun Jan 24 03:42:22 2010 -0500 @@ -1,3 +1,11 @@ +2010-01-24 Stefan Monnier <monnier@iro.umontreal.ca> + + * keymap.c (shadow_lookup): Add `remap' arg. + (describe_map, describe_vector): Update calls to shadow_lookup. + (Fwhere_is_internal): Fix up handling of `remapped_sequences' and + `remapped' so this flag is applicable to `sequence'. Be careful to + perform remapping during shadow_lookup check of remapped_equences. + 2010-01-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> * lisp.h (make_pure_string): String pointer arg now points to const.
--- a/src/keymap.c Fri Jan 22 11:43:54 2010 -0500 +++ b/src/keymap.c Sun Jan 24 03:42:22 2010 -0500 @@ -2650,11 +2650,13 @@ Lisp_Object args, void *data)); /* Like Flookup_key, but uses a list of keymaps SHADOW instead of a single map. - Returns the first non-nil binding found in any of those maps. */ + Returns the first non-nil binding found in any of those maps. + If REMAP is true, pass the result of the lookup through command + remapping before returning it. */ static Lisp_Object -shadow_lookup (shadow, key, flag) - Lisp_Object shadow, key, flag; +shadow_lookup (Lisp_Object shadow, Lisp_Object key, Lisp_Object flag, + int remap) { Lisp_Object tail, value; @@ -2669,7 +2671,15 @@ return Qnil; } else if (!NILP (value)) - return value; + { + Lisp_Object remapping; + if (remap && SYMBOLP (value) + && (remapping = Fcommand_remapping (value, Qnil, shadow), + !NILP (remapping))) + return remapping; + else + return value; + } } return Qnil; } @@ -2860,30 +2870,30 @@ { /* We have a list of advertized bindings. */ while (CONSP (tem)) - if (EQ (shadow_lookup (keymaps, XCAR (tem), Qnil), definition)) + if (EQ (shadow_lookup (keymaps, XCAR (tem), Qnil, 0), definition)) return XCAR (tem); else tem = XCDR (tem); - if (EQ (shadow_lookup (keymaps, tem, Qnil), definition)) + if (EQ (shadow_lookup (keymaps, tem, Qnil, 0), definition)) return tem; } sequences = Freverse (where_is_internal (definition, keymaps, !NILP (noindirect), nomenus)); - while (CONSP (sequences)) + while (CONSP (sequences) + /* If we're at the end of the `sequences' list and we haven't + considered remapped sequences yet, copy them over and + process them. */ + || (!remapped && (sequences = remapped_sequences, + remapped = 1), + CONSP (sequences))) { Lisp_Object sequence, function; sequence = XCAR (sequences); sequences = XCDR (sequences); - if (NILP (sequences) && !remapped) - { - sequences = remapped_sequences; - remapped = 1; - } - /* Verify that this key binding is not shadowed by another binding for the same key, before we say it exists. @@ -2893,7 +2903,8 @@ Either nil or number as value from Flookup_key means undefined. */ - if (!EQ (shadow_lookup (keymaps, sequence, Qnil), definition)) + if (!EQ (shadow_lookup (keymaps, sequence, Qnil, remapped), + definition)) continue; /* If the current sequence is a command remapping with @@ -3506,7 +3517,7 @@ ASET (kludge, 0, event); if (!NILP (shadow)) { - tem = shadow_lookup (shadow, kludge, Qt); + tem = shadow_lookup (shadow, kludge, Qt, 0); if (!NILP (tem)) { /* If both bindings are keymaps, this key is a prefix key, @@ -3776,7 +3787,7 @@ { Lisp_Object tem; - tem = shadow_lookup (shadow, kludge, Qt); + tem = shadow_lookup (shadow, kludge, Qt, 0); if (!NILP (tem)) {