Previously notmuch-help would show two entries for keys in a parent
keymap that were over-ridden in the local keymap.  This keeps track of
which keys have been seen and thus avoids these spurious duplicate
entries.

---
 emacs/notmuch.el |   45 ++++++++++++++++++++++++---------------------
 1 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index c47c6b5..4f4e2e7 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -150,27 +150,30 @@ for an overview of how this documentation is extracted.
 UA-KEYS should be a key sequence bound to `universal-argument'.
 It will be used to describe bindings of commands that support a
 prefix argument.  PREFIX and TAIL are used internally."
-  (map-keymap
-   (lambda (key binding)
-     (cond ((mouse-event-p key) nil)
-          ((keymapp binding)
-           (setq tail
-                 (notmuch-describe-keymap
-                  binding ua-keys (notmuch-prefix-key-description key) tail)))
-          (t
-           (when (and ua-keys (symbolp binding)
-                      (get binding 'notmuch-prefix-doc))
-             ;; Documentation for prefixed command
-             (let ((ua-desc (key-description ua-keys)))
-               (push (concat ua-desc " " prefix (format-kbd-macro (vector key))
-                             "\t" (get binding 'notmuch-prefix-doc))
-                     tail)))
-           ;; Documentation for command
-           (push (concat prefix (format-kbd-macro (vector key)) "\t"
-                         (or (and (symbolp binding) (get binding 'notmuch-doc))
-                             (notmuch-documentation-first-line binding)))
-                 tail))))
-   keymap)
+  (let (keys-seen)
+    (map-keymap
+     (lambda (key binding)
+       (unless (memq key keys-seen)
+        (push key keys-seen)
+        (cond ((mouse-event-p key) nil)
+              ((keymapp binding)
+               (setq tail
+                     (notmuch-describe-keymap
+                      binding ua-keys (notmuch-prefix-key-description key) 
tail)))
+              (t
+               (when (and ua-keys (symbolp binding)
+                          (get binding 'notmuch-prefix-doc))
+                 ;; Documentation for prefixed command
+                 (let ((ua-desc (key-description ua-keys)))
+                   (push (concat ua-desc " " prefix (format-kbd-macro (vector 
key))
+                                 "\t" (get binding 'notmuch-prefix-doc))
+                         tail)))
+               ;; Documentation for command
+               (push (concat prefix (format-kbd-macro (vector key)) "\t"
+                             (or (and (symbolp binding) (get binding 
'notmuch-doc))
+                                 (notmuch-documentation-first-line binding)))
+                     tail)))))
+     keymap))
   tail)

 (defun notmuch-substitute-command-keys (doc)
-- 
1.7.9.1

Reply via email to