Re: [PATCH] Added C-up and C-down to cycle through previous searches

Subject: Re: [PATCH] Added C-up and C-down to cycle through previous searches

Date: Sun, 29 May 2011 20:04:00 +0400

To: notmuch@dima.secretsauce.net, notmuch@notmuchmail.org

Cc:

From: Dmitry Kurochkin


Hi Dima.

On Sun, 29 May 2011 01:56:28 -0700, notmuch@dima.secretsauce.net wrote:
> From: Dima Kogan <dima@secretsauce.net>
> 
> ---
> 
>  Hi.
> 
>  I made a few improvements to the emacs UI. This patch allows the user to scroll
>  through the most recent searches with C-up and C-down while in the search box.
> 

This sounds like a very nice improvement to me!  I just have one
concern: Why C-up and C-down?  I believe M-p and M-n would be more
natural for Emacs users (at least for me :)).

Also, I did not read the code and can not comment on it.  But notmuch
coding style is to use tabs for indentation.  I guess .dir-locals.el
should be improved to set coding style variables for all modes, not just
C.

Regards,
  Dmitry

>  dima
> 
>  emacs/notmuch-hello.el |   49 +++++++++++++++++++++++++++++++++++++++++------
>  1 files changed, 42 insertions(+), 7 deletions(-)
> 
> diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el
> index 916cda1..56f853f 100644
> --- a/emacs/notmuch-hello.el
> +++ b/emacs/notmuch-hello.el
> @@ -123,6 +123,12 @@ Typically \",\" in the US and UK and \".\" in Europe."
>  
>  (defvar notmuch-hello-recent-searches nil)
>  
> +(defvar notmuch-hello-cyclerecent-index 0
> +  "The current index of the most-recent searches" )
> +
> +(defvar notmuch-hello-search-widget nil
> +  "The search widget")
> +
>  (defun notmuch-hello-remember-search (search)
>    (if (not (member search notmuch-hello-recent-searches))
>        (push search notmuch-hello-recent-searches))
> @@ -148,6 +154,28 @@ Typically \",\" in the US and UK and \".\" in Europe."
>        (match-string 1 search)
>      search))
>  
> +(defun notmuch-hello-cyclerecent-next ()
> +  "Cycle through the most recently-searched queries, going forwards"
> +  (interactive)
> +  (notmuch-hello-cyclerecent 1))
> +
> +(defun notmuch-hello-cyclerecent-prev ()
> +  "Cycle through the most recently-searched queries, going backwards"
> +  (interactive)
> +  (notmuch-hello-cyclerecent -1))
> +
> +(defun notmuch-hello-cyclerecent (d) ()
> +
> +  (when notmuch-hello-recent-searches ; if no recent searches, do nothing
> +    (let ((N (length notmuch-hello-recent-searches)))
> +      (setq notmuch-hello-cyclerecent-index
> +            (% (+ notmuch-hello-cyclerecent-index d N) N))) ; update the index
> +
> +    (widget-value-set notmuch-hello-search-widget
> +                      (nth notmuch-hello-cyclerecent-index notmuch-hello-recent-searches))
> +    (widget-setup))
> +)
> +
>  (defun notmuch-hello-search (search)
>    (let ((search (notmuch-hello-trim search)))
>      (notmuch-hello-remember-search search)
> @@ -455,13 +483,19 @@ Complete list of currently available key bindings:
>  
>  	(widget-insert "\nSearch: ")
>  	(setq notmuch-hello-search-bar-marker (point-marker))
> -	(widget-create 'editable-field
> -		       ;; Leave some space at the start and end of the
> -		       ;; search boxes.
> -		       :size (max 8 (- (window-width) notmuch-hello-indent
> -				       (length "Search: ")))
> -		       :action (lambda (widget &rest ignore)
> -				 (notmuch-hello-search (widget-value widget))))
> +	(setq notmuch-hello-search-widget
> +              (widget-create 'editable-field
> +                             ;; Leave some space at the start and end of the
> +                             ;; search boxes.
> +                             :size (max 8 (- (window-width) notmuch-hello-indent
> +                                             (length "Search: ")))
> +                             :action (lambda (widget &rest ignore)
> +                                       (notmuch-hello-search (widget-value widget)))
> +                             :keymap (let ((map (make-sparse-keymap)))
> +                                       (set-keymap-parent map widget-field-keymap)
> +                                       (define-key map (kbd "<C-up>")   'notmuch-hello-cyclerecent-prev)
> +                                       (define-key map (kbd "<C-down>") 'notmuch-hello-cyclerecent-next)
> +                                       map)))
>  	(widget-insert "\n")
>  
>  	(when notmuch-hello-recent-searches
> @@ -535,6 +569,7 @@ Complete list of currently available key bindings:
>  	(widget-insert "Type a search query and hit RET to view matching threads.\n")
>  	(when notmuch-hello-recent-searches
>  	  (widget-insert "Hit RET to re-submit a previous search. Edit it first if you like.\n")
> +	  (widget-insert "In the search box, C-up/C-down cycles through the recent searches.\n")
>  	  (widget-insert "Save recent searches with the `save' button.\n"))
>  	(when notmuch-saved-searches
>  	  (widget-insert "Edit saved searches with the `edit' button.\n"))
> -- 
> 1.7.4.4
> 
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch

Thread: