[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