[PATCH v2 4/5] emacs: help: add a special function to deal with remaps

Austin Clements amdragon at MIT.EDU
Thu Nov 7 19:35:51 PST 2013


I like the way you separated this out.

Quoth Mark Walters on Nov 08 at 12:21 am:
> remaps are a rather unusual keymap consisting of "first key" 'remap
> and then "second-key" the remapped-function. Thus we do the
> documentation for it separately.
> ---
>  emacs/notmuch-lib.el |   25 ++++++++++++++++++++++---
>  1 files changed, 22 insertions(+), 3 deletions(-)
> 
> diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
> index 8852703..ef616d5 100644
> --- a/emacs/notmuch-lib.el
> +++ b/emacs/notmuch-lib.el
> @@ -261,6 +261,21 @@ It does not prepend if ACTUAL-KEY is already listed in TAIL."
>  	    tail)))
>      tail)
>  
> +(defun notmuch-describe-remaps (remap-keymap ua-keys prefix tail)
> +  ;; Remappings are represented as a binding whose first "event" is
> +  ;; 'remap.  Hence, if the keymap has any remappings, it will have a
> +  ;; binding whose "key" is 'remap, and whose "binding" is itself a
> +  ;; keymap that maps not from keys to commands, but from old (remapped)
> +  ;; functions to the commands to use in their stead.
> +  (map-keymap
> +   (lambda (command binding)
> +     (mapc
> +      (lambda (actual-key)
> +	(setq tail (notmuch-describe-key actual-key binding prefix ua-keys tail)))
> +      (where-is-internal command)))
> +   remap-keymap)
> +  tail)
> +

Hmm.  Maybe holistically the interface change I suggested to the
previous patch isn't the right thing to do, since there ends up being
a lot of symmetry between these three functions.

>  (defun notmuch-describe-keymap (keymap ua-keys &optional prefix tail)
>    "Return a list of cons cells, each describing one binding in KEYMAP.
>  
> @@ -276,9 +291,13 @@ prefix argument.  PREFIX and TAIL are used internally."
>     (lambda (key binding)
>       (cond ((mouse-event-p key) nil)
>  	   ((keymapp binding)
> -	    (setq tail
> -		  (notmuch-describe-keymap
> -		   binding ua-keys (notmuch-prefix-key-description key) tail)))
> +	    (if (eq key 'remap)
> +		(setq tail
> +		      (notmuch-describe-remaps
> +		       binding ua-keys prefix tail))
> +	      (setq tail
> +		    (notmuch-describe-keymap
> +		     binding ua-keys (notmuch-prefix-key-description key) tail))))

Maybe swap the if and the setq?

(setq tail (if (eq key 'remap) ...))

>  	   (binding
>  	    (setq tail (notmuch-describe-key (vector key) binding prefix ua-keys tail)))))
>     keymap)


More information about the notmuch mailing list