[PATCH] emacs: Better handling of inherited keymaps for `nomuch-help'.

Subject: [PATCH] emacs: Better handling of inherited keymaps for `nomuch-help'.

Date: Fri, 30 Dec 2011 11:37:17 +0000

To: notmuch@notmuchmail.org

Cc:

From: David Edmondson


`notmuch-hello-mode' inherits the keymap for widgets, which confused
`notmuch-substitute-command-keys'. Fix the confusion.

Simplify `notmuch-substitute-command-keys' a little to make it easier
to read.
---
 emacs/notmuch.el |   17 ++++++++++++-----
 1 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index fde2377..6dd65ff 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -164,16 +164,23 @@ For a mouse binding, return nil."
 		"\t"
 		(notmuch-documentation-first-line action))))))
 
-(defalias 'notmuch-substitute-one-command-key
-  (apply-partially 'notmuch-substitute-one-command-key-with-prefix nil))
+(defun notmuch-substitute-command-keys-one (key)
+  ;; A `keymap' key indicates inheritance from a parent keymap - the
+  ;; inherited mappings follow, so there is nothing to print for
+  ;; `keymap' itself.
+  (when (not (eq key 'keymap))
+    (notmuch-substitute-one-command-key-with-prefix nil key)))
 
 (defun notmuch-substitute-command-keys (doc)
   "Like `substitute-command-keys' but with documentation, not function names."
   (let ((beg 0))
     (while (string-match "\\\\{\\([^}[:space:]]*\\)}" doc beg)
-      (let ((map (substring doc (match-beginning 1) (match-end 1))))
-	(setq doc (replace-match (mapconcat 'notmuch-substitute-one-command-key
-					    (cdr (symbol-value (intern map))) "\n") 1 1 doc)))
+      (let* ((keymap-name (substring doc (match-beginning 1) (match-end 1)))
+	     (keymap (symbol-value (intern keymap-name))))
+	(setq doc (replace-match
+		   (mapconcat #'notmuch-substitute-command-keys-one
+			      (cdr keymap) "\n")
+		   1 1 doc)))
       (setq beg (match-end 0)))
     doc))
 
-- 
1.7.7.3


Thread: