Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
8dc1adf6
Commit
8dc1adf6
authored
Jan 24, 2010
by
Stefan Monnier
Browse files
Try and fix bug#788, hopefully for real this time.
parents
285d07e2
bd4b5750
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
36 additions
and
16 deletions
+36
-16
src/ChangeLog
src/ChangeLog
+9
-0
src/keymap.c
src/keymap.c
+27
-16
No files found.
src/ChangeLog
View file @
8dc1adf6
2010-01-24 Stefan Monnier <monnier@iro.umontreal.ca>
Try and fix bug#788, hopefully for real this time.
* 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_sequences.
2010-01-24 Eric Bélanger <snowmaniscool@gmail.com> (tiny change)
* image.c (png_load): Use png_sig_cmp instead of the obsolete
...
...
src/keymap.c
View file @
8dc1adf6
...
...
@@ -2650,11 +2650,13 @@ static void where_is_internal_1 P_ ((Lisp_Object key, Lisp_Object binding,
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 @@ shadow_lookup (shadow, key, flag)
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 @@ remapped command in the returned list. */)
{
/* 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 @@ remapped command in the returned list. */)
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 @@ describe_map (map, prefix, elt_describer, partial, shadow,
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 @@ describe_vector (vector, prefix, args, elt_describer,
{
Lisp_Object
tem
;
tem
=
shadow_lookup
(
shadow
,
kludge
,
Qt
);
tem
=
shadow_lookup
(
shadow
,
kludge
,
Qt
,
0
);
if
(
!
NILP
(
tem
))
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment