]> git.eshelyaron.com Git - emacs.git/commitdiff
Make :filters run in the correct buffer in describe-buffer-bindings
authorLars Ingebrigtsen <larsi@gnus.org>
Sun, 17 Apr 2022 15:36:58 +0000 (17:36 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 17 Apr 2022 16:06:26 +0000 (18:06 +0200)
* 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.

lisp/help.el
src/keymap.c

index 9cde65f797571d94ec64d2eb2f5aa99c02a597c1..0d516cf9f689a1d72496f1e999f1b6cf6c1253ef 100644 (file)
@@ -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
index 83c54e26300426a18445e84f03e1aba68dac8ad5..da0a52bd2c18a437b3a0d47e92779ddc3b22c223 100644 (file)
@@ -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;
 }