diff options
author | Carl Worth <cworth@cworth.org> | 2009-11-30 21:46:55 -0800 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2009-11-30 21:46:55 -0800 |
commit | f5e125a9c02c0afbe52d0be4033fb46e0d74dfc0 (patch) | |
tree | 58dcb0afc5a88eb60fd6e7643711cf1a739da61e /notmuch.el | |
parent | 335a8aec2bf36a9f947e4ebc333d9977c4606cd4 (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.el | 35 |
1 files changed, 28 insertions, 7 deletions
@@ -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." |