[PATCH v2 2/5] emacs: help: remove duplicate bindings

Austin Clements amdragon at MIT.EDU
Thu Nov 7 19:09:28 PST 2013


Quoth Mark Walters on Nov 08 at 12:21 am:
> If the user (or a mode) overrides a keybinding from the common keymap
> in one of the modes then both help lines appear in the help screen
> even though only one of the is applicable.

s/the/them/

> 
> Fix this by checking if we already have that key binding. We do this
> by constructing an list of (key . docstring) pairs so it is easy to
> check if we have already had that binding. Then the actual print help
> routine changes these pairs into strings "key \t docstring"
> ---
>  emacs/notmuch-lib.el |   41 ++++++++++++++++++++++++-----------------
>  1 files changed, 24 insertions(+), 17 deletions(-)
> 
> diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
> index ec5a2cb..2195166 100644
> --- a/emacs/notmuch-lib.el
> +++ b/emacs/notmuch-lib.el
> @@ -238,11 +238,12 @@ This is basically just `format-kbd-macro' but we also convert ESC to M-."
>        (concat desc " "))))
>  
>  (defun notmuch-describe-keymap (keymap ua-keys &optional prefix tail)
> -  "Return a list of strings, each describing one binding in KEYMAP.
> +  "Return a list of cons cells, each describing one binding in KEYMAP.
>  
> -Each string gives a human-readable description of the key and a
> -one-line description of the bound function.  See `notmuch-help'
> -for an overview of how this documentation is extracted.
> +Each cons cell consists of a string giving a human-readable
> +description of the key, and a one-line description of the bound
> +function.  See `notmuch-help' for an overview of how this
> +documentation is extracted.
>  
>  UA-KEYS should be a key sequence bound to `universal-argument'.
>  It will be used to describe bindings of commands that support a
> @@ -255,18 +256,23 @@ prefix argument.  PREFIX and TAIL are used internally."
>  		  (notmuch-describe-keymap
>  		   binding ua-keys (notmuch-prefix-key-description key) tail)))
>  	   (binding
> -	    (when (and ua-keys (symbolp binding)
> -		       (get binding 'notmuch-prefix-doc))
> -	      ;; Documentation for prefixed command
> -	      (let ((ua-desc (key-description ua-keys)))
> -		(push (concat ua-desc " " prefix (format-kbd-macro (vector key))
> -			      "\t" (get binding 'notmuch-prefix-doc))
> -		      tail)))
> -	    ;; Documentation for command
> -	    (push (concat prefix (format-kbd-macro (vector key)) "\t"
> -			  (or (and (symbolp binding) (get binding 'notmuch-doc))
> -			      (notmuch-documentation-first-line binding)))
> -		  tail))))
> +	    (let ((key-string (concat prefix (format-kbd-macro (vector key)))))
> +	      ;; We don't include documentation if the key-binding is
> +	      ;; over-ridden. Note, over-riding a binding
> +	      ;; automatically hides the prefixed version too.
> +	      (unless (assoc key-string tail)
> +		(when (and ua-keys (symbolp binding)
> +			   (get binding 'notmuch-prefix-doc))
> +		  ;; Documentation for prefixed command
> +		  (let ((ua-desc (key-description ua-keys)))
> +		    (push (cons (concat ua-desc " " prefix (format-kbd-macro (vector key)))
> +				(get binding 'notmuch-prefix-doc))
> +			  tail)))
> +		;; Documentation for command
> +		(push (cons key-string
> +			    (or (and (symbolp binding) (get binding 'notmuch-doc))
> +				(notmuch-documentation-first-line binding)))
> +		      tail))))))
>     keymap)
>    tail)
>  
> @@ -277,7 +283,8 @@ prefix argument.  PREFIX and TAIL are used internally."
>        (let* ((keymap-name (substring doc (match-beginning 1) (match-end 1)))
>  	     (keymap (symbol-value (intern keymap-name)))
>  	     (ua-keys (where-is-internal 'universal-argument keymap t))
> -	     (desc-list (notmuch-describe-keymap keymap ua-keys))
> +	     (desc-alist (notmuch-describe-keymap keymap ua-keys))
> +	     (desc-list (mapcar (lambda (arg) (concat (car arg) "\t" (cdr arg))) desc-alist))
>  	     (desc (mapconcat #'identity desc-list "\n")))
>  	(setq doc (replace-match desc 1 1 doc)))
>        (setq beg (match-end 0)))


More information about the notmuch mailing list