[PATCH] emacs: add '?' to some prefix keymaps to describe its bindings
Tomi Ollila
tomi.ollila at iki.fi
Thu Nov 14 04:12:44 PST 2013
On Thu, Nov 14 2013, Mark Walters <markwalters1009 at gmail.com> wrote:
> Added function notmuch-subkeymap-help to describe keybindings of a
> subkeymap (eg after . or c in notmuch-search and notmuch-show).
> ---
> This a reimplementation of Tomi's patch at
> id:1377346540-7094-1-git-send-email-tomi.ollila at iki.fi but the help
> screen shows docstrings rather than function names.
Good stuff, works fine (much better than mine). Tests pass. +1
> Best wishes
>
> Mark
Tomi
>
>
>
>
>
> emacs/notmuch-lib.el | 25 ++++++++++++++++++++++++-
> emacs/notmuch-show.el | 2 ++
> emacs/notmuch.el | 1 +
> 3 files changed, 27 insertions(+), 1 deletions(-)
>
> diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
> index 49fe644..2be409b 100644
> --- a/emacs/notmuch-lib.el
> +++ b/emacs/notmuch-lib.el
> @@ -231,7 +231,8 @@ depending on the value of `notmuch-poll-script'."
> "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))))
> + (let* ((key-vector (if (vectorp key) key (vector key)))
> + (desc (format-kbd-macro key-vector)))
> (if (string= desc "ESC")
> "M-"
> (concat desc " "))))
> @@ -337,6 +338,28 @@ of its command symbol."
> (set-buffer-modified-p nil)
> (view-buffer (current-buffer) 'kill-buffer-if-not-modified))))
>
> +(defun notmuch-subkeymap-help ()
> + "Show help for a subkeymap."
> + (interactive)
> + (let* ((key (this-command-keys-vector))
> + (prefix (make-vector (1- (length key)) nil))
> + (i 0))
> + (while (< i (length prefix))
> + (aset prefix i (aref key i))
> + (setq i (1+ i)))
> +
> + (let* ((subkeymap (key-binding prefix))
> + (ua-keys (where-is-internal 'universal-argument nil t))
> + (prefix-string (notmuch-prefix-key-description prefix))
> + (desc-alist (notmuch-describe-keymap subkeymap ua-keys subkeymap prefix-string))
> + (desc-list (mapcar (lambda (arg) (concat (car arg) "\t" (cdr arg))) desc-alist))
> + (desc (mapconcat #'identity desc-list "\n")))
> + (with-help-window (help-buffer)
> + (with-current-buffer standard-output
> + (insert "\nPress 'q' to quit this window.\n\n")
> + (insert desc)))
> + (pop-to-buffer (help-buffer)))))
> +
> (defvar notmuch-buffer-refresh-function nil
> "Function to call to refresh the current buffer.")
> (make-variable-buffer-local 'notmuch-buffer-refresh-function)
> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
> index f00273a..45dca8b 100644
> --- a/emacs/notmuch-show.el
> +++ b/emacs/notmuch-show.el
> @@ -1232,6 +1232,7 @@ reset based on the original query."
> (define-key map "t" 'notmuch-show-stash-to)
> (define-key map "l" 'notmuch-show-stash-mlarchive-link)
> (define-key map "L" 'notmuch-show-stash-mlarchive-link-and-go)
> + (define-key map "?" 'notmuch-subkeymap-help)
> map)
> "Submap for stash commands")
> (fset 'notmuch-show-stash-map notmuch-show-stash-map)
> @@ -1242,6 +1243,7 @@ reset based on the original query."
> (define-key map "v" 'notmuch-show-view-part)
> (define-key map "o" 'notmuch-show-interactively-view-part)
> (define-key map "|" 'notmuch-show-pipe-part)
> + (define-key map "?" 'notmuch-subkeymap-help)
> map)
> "Submap for part commands")
> (fset 'notmuch-show-part-map notmuch-show-part-map)
> diff --git a/emacs/notmuch.el b/emacs/notmuch.el
> index c9bc2f2..0471750 100644
> --- a/emacs/notmuch.el
> +++ b/emacs/notmuch.el
> @@ -165,6 +165,7 @@ To enter a line break in customize, press \\[quoted-insert] C-j."
> (defvar notmuch-search-stash-map
> (let ((map (make-sparse-keymap)))
> (define-key map "i" 'notmuch-search-stash-thread-id)
> + (define-key map "?" 'notmuch-subkeymap-help)
> map)
> "Submap for stash commands")
> (fset 'notmuch-search-stash-map notmuch-search-stash-map)
> --
> 1.7.9.1
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch
More information about the notmuch
mailing list