aboutsummaryrefslogtreecommitdiffhomepage
path: root/notmuch.el
diff options
context:
space:
mode:
authorGravatar Carl Worth <cworth@cworth.org>2009-11-30 21:46:55 -0800
committerGravatar Carl Worth <cworth@cworth.org>2009-11-30 21:46:55 -0800
commitf5e125a9c02c0afbe52d0be4033fb46e0d74dfc0 (patch)
tree58dcb0afc5a88eb60fd6e7643711cf1a739da61e /notmuch.el
parent335a8aec2bf36a9f947e4ebc333d9977c4606cd4 (diff)
notmuch.el: Fix notmuch-help to properly display prefixed bindings.
Previously, we would do only a single-level traverse of the keymap. That meant that for a keybinding such as "M-TAB" we would just see the prefix key ("ESC") and print that it was a keymap---never printing the TAB nor the documentation for the command it is bound to. Now, we do the full walk, constructing a proper description of the full keybdinding with prefix characters, (and converting "ESC" to "M-" for legibility).
Diffstat (limited to 'notmuch.el')
-rw-r--r--notmuch.el35
1 files changed, 28 insertions, 7 deletions
diff --git a/notmuch.el b/notmuch.el
index 3f27f08e..b21aeaea 100644
--- a/notmuch.el
+++ b/notmuch.el
@@ -787,17 +787,38 @@ which this thread was originally shown."
(buffer-substring beg (point))))
"")))
-(defun notmuch-substitute-one-command-key (binding)
- "For a key binding, return a string showing a human-readable representation
-of the key as well as the first line of documentation from the bound function.
+(defun notmuch-prefix-key-description (key)
+ "Given a prefix key code, return a human-readable string representation.
+
+This is basically just `format-kbd-macro' but we also convert ESC to M-."
+ (let ((desc (format-kbd-macro (vector key))))
+ (if (string= desc "ESC")
+ "M-"
+ (concat desc " "))))
+
+; I would think that emacs would have code handy for walking a keymap
+; and generating strings for each key, and I would prefer to just call
+; that. But I couldn't find any (could be all implemented in C I
+; suppose), so I wrote my own here.
+(defun notmuch-substitute-one-command-key-with-prefix (prefix binding)
+ "For a key binding, return a string showing a human-readable
+representation of the prefixed key as well as the first line of
+documentation from the bound function.
For a mouse binding, return nil."
- (let ((key (car binding)))
+ (let ((key (car binding))
+ (action (cdr binding)))
(if (mouse-event-p key)
nil
- (concat (format-kbd-macro (vector key))
- "\t"
- (notmuch-documentation-first-line (cdr binding))))))
+ (if (keymapp action)
+ (let ((substitute (apply-partially 'notmuch-substitute-one-command-key-with-prefix (notmuch-prefix-key-description key))))
+ (mapconcat substitute (cdr action) "\n"))
+ (concat prefix (format-kbd-macro (vector key))
+ "\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 (doc)
"Like `substitute-command-keys' but with documentation, not function names."