Make :filters run in the correct buffer in describe-buffer-bindings
* lisp/help.el (describe-map-tree): Take an optional buffer parameter. (describe-map): Ditto, and use it to run `lookup-key' in the correct buffer. This fixes problems of filters being run in the wrong buffer (bug#39149). * src/keymap.c (Fdescribe_buffer_bindings): Pass in BUFFER to describe-map-tree.
This commit is contained in:
parent
dd451a37dd
commit
b49cca7012
2 changed files with 25 additions and 17 deletions
22
lisp/help.el
22
lisp/help.el
|
@ -1274,7 +1274,8 @@ Otherwise, return a new string."
|
|||
|
||||
(defvar help--keymaps-seen nil)
|
||||
(defun describe-map-tree (startmap &optional partial shadow prefix title
|
||||
no-menu transl always-title mention-shadow)
|
||||
no-menu transl always-title mention-shadow
|
||||
buffer)
|
||||
"Insert a description of the key bindings in STARTMAP.
|
||||
This is followed by the key bindings of all maps reachable
|
||||
through STARTMAP.
|
||||
|
@ -1300,7 +1301,10 @@ maps to look through.
|
|||
|
||||
If MENTION-SHADOW is non-nil, then when something is shadowed by
|
||||
SHADOW, don't omit it; instead, mention it but say it is
|
||||
shadowed."
|
||||
shadowed.
|
||||
|
||||
If BUFFER, lookup keys while in that buffer. This only affects
|
||||
things like :filters for menu bindings."
|
||||
(let* ((amaps (accessible-keymaps startmap prefix))
|
||||
(orig-maps (if no-menu
|
||||
(progn
|
||||
|
@ -1341,7 +1345,8 @@ shadowed."
|
|||
(setq sub-shadows (cons (cdr (car tail)) sub-shadows)))
|
||||
(setq tail (cdr tail))))
|
||||
(describe-map (cdr elt) elt-prefix transl partial
|
||||
sub-shadows no-menu mention-shadow)))
|
||||
sub-shadows no-menu mention-shadow
|
||||
buffer)))
|
||||
(setq maps (cdr maps)))
|
||||
;; Print title...
|
||||
(when (and print-title
|
||||
|
@ -1419,13 +1424,13 @@ Return nil if the key sequence is too long."
|
|||
(t nil))))
|
||||
|
||||
(defun describe-map (map &optional prefix transl partial shadow
|
||||
nomenu mention-shadow)
|
||||
nomenu mention-shadow buffer)
|
||||
"Describe the contents of keymap MAP.
|
||||
Assume that this keymap itself is reached by the sequence of
|
||||
prefix keys PREFIX (a string or vector).
|
||||
|
||||
TRANSL, PARTIAL, SHADOW, NOMENU, MENTION-SHADOW are as in
|
||||
`describe-map-tree'."
|
||||
TRANSL, PARTIAL, SHADOW, NOMENU, MENTION-SHADOW and BUFFER are as
|
||||
in `describe-map-tree'."
|
||||
;; Converted from describe_map in keymap.c.
|
||||
(let* ((suppress (and partial 'suppress-keymap))
|
||||
(map (keymap-canonicalize map))
|
||||
|
@ -1476,7 +1481,10 @@ TRANSL, PARTIAL, SHADOW, NOMENU, MENTION-SHADOW are as in
|
|||
((and mention-shadow (not (eq tem definition)))
|
||||
(setq this-shadowed t))
|
||||
(t nil))))
|
||||
(eq definition (lookup-key tail (vector event) t))
|
||||
(eq definition (if buffer
|
||||
(with-current-buffer buffer
|
||||
(lookup-key tail (vector event) t))
|
||||
(lookup-key tail (vector event) t)))
|
||||
(push (list event definition this-shadowed) vect))))
|
||||
((eq (car tail) 'keymap)
|
||||
;; The same keymap might be in the structure twice, if
|
||||
|
|
20
src/keymap.c
20
src/keymap.c
|
@ -2867,7 +2867,7 @@ You type Translation\n\
|
|||
CALLN (Ffuncall,
|
||||
Qdescribe_map_tree,
|
||||
Vkey_translation_map, Qnil, Qnil, prefix,
|
||||
msg, nomenu, Qt, Qnil, Qnil);
|
||||
msg, nomenu, Qt, Qnil, Qnil, buffer);
|
||||
}
|
||||
|
||||
/* Print the (major mode) local map. */
|
||||
|
@ -2881,7 +2881,7 @@ You type Translation\n\
|
|||
CALLN (Ffuncall,
|
||||
Qdescribe_map_tree,
|
||||
start1, Qt, shadow, prefix,
|
||||
msg, nomenu, Qnil, Qnil, Qnil);
|
||||
msg, nomenu, Qnil, Qnil, Qnil, buffer);
|
||||
shadow = Fcons (start1, shadow);
|
||||
start1 = Qnil;
|
||||
}
|
||||
|
@ -2894,7 +2894,7 @@ You type Translation\n\
|
|||
CALLN (Ffuncall,
|
||||
Qdescribe_map_tree,
|
||||
start1, Qt, shadow, prefix,
|
||||
msg, nomenu, Qnil, Qnil, Qnil);
|
||||
msg, nomenu, Qnil, Qnil, Qnil, buffer);
|
||||
shadow = Fcons (start1, shadow);
|
||||
}
|
||||
else
|
||||
|
@ -2917,7 +2917,7 @@ You type Translation\n\
|
|||
CALLN (Ffuncall,
|
||||
Qdescribe_map_tree,
|
||||
start1, Qt, shadow, prefix,
|
||||
msg, nomenu, Qnil, Qnil, Qnil);
|
||||
msg, nomenu, Qnil, Qnil, Qnil, buffer);
|
||||
shadow = Fcons (start1, shadow);
|
||||
}
|
||||
|
||||
|
@ -2950,7 +2950,7 @@ You type Translation\n\
|
|||
CALLN (Ffuncall,
|
||||
Qdescribe_map_tree,
|
||||
maps[i], Qt, shadow, prefix,
|
||||
msg, nomenu, Qnil, Qnil, Qnil);
|
||||
msg, nomenu, Qnil, Qnil, Qnil, buffer);
|
||||
shadow = Fcons (maps[i], shadow);
|
||||
SAFE_FREE ();
|
||||
}
|
||||
|
@ -2968,7 +2968,7 @@ You type Translation\n\
|
|||
CALLN (Ffuncall,
|
||||
Qdescribe_map_tree,
|
||||
start1, Qt, shadow, prefix,
|
||||
msg, nomenu, Qnil, Qnil, Qnil);
|
||||
msg, nomenu, Qnil, Qnil, Qnil, buffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2976,7 +2976,7 @@ You type Translation\n\
|
|||
CALLN (Ffuncall,
|
||||
Qdescribe_map_tree,
|
||||
start1, Qt, shadow, prefix,
|
||||
msg, nomenu, Qnil, Qnil, Qnil);
|
||||
msg, nomenu, Qnil, Qnil, Qnil, buffer);
|
||||
}
|
||||
|
||||
shadow = Fcons (start1, shadow);
|
||||
|
@ -2987,7 +2987,7 @@ You type Translation\n\
|
|||
CALLN (Ffuncall,
|
||||
Qdescribe_map_tree,
|
||||
current_global_map, Qt, shadow, prefix,
|
||||
msg, nomenu, Qnil, Qt, Qnil);
|
||||
msg, nomenu, Qnil, Qt, Qnil, buffer);
|
||||
|
||||
/* Print the function-key-map translations under this prefix. */
|
||||
if (!NILP (KVAR (current_kboard, Vlocal_function_key_map)))
|
||||
|
@ -2996,7 +2996,7 @@ You type Translation\n\
|
|||
CALLN (Ffuncall,
|
||||
Qdescribe_map_tree,
|
||||
KVAR (current_kboard, Vlocal_function_key_map), Qnil, Qnil, prefix,
|
||||
msg, nomenu, Qt, Qnil, Qnil);
|
||||
msg, nomenu, Qt, Qnil, Qnil, buffer);
|
||||
}
|
||||
|
||||
/* Print the input-decode-map translations under this prefix. */
|
||||
|
@ -3006,7 +3006,7 @@ You type Translation\n\
|
|||
CALLN (Ffuncall,
|
||||
Qdescribe_map_tree,
|
||||
KVAR (current_kboard, Vinput_decode_map), Qnil, Qnil, prefix,
|
||||
msg, nomenu, Qt, Qnil, Qnil);
|
||||
msg, nomenu, Qt, Qnil, Qnil, buffer);
|
||||
}
|
||||
return Qnil;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue