Add support for imenu

Jani Nikula jani at nikula.org
Tue May 23 09:45:12 PDT 2017


On Tue, 23 May 2017, Damien Cassou <damien at cassou.me> wrote:
> Please find attached a patch adding imenu support in both search 
> and show modes.

I would appreciate a commit message explaining what the patch is about,
written to someone who doesn't know what imenu is, or how it could be
applicable in search and show modes.

Please also look into using git send-email if possible, instead of
attaching the patch.

BR,
Jani.


>
> -- 
> Damien Cassou
> http://damiencassou.seasidehosting.st
>
> "Success is the ability to go from one failure to another without
> losing enthusiasm." --Winston Churchill
> From aa29c3e4227ad95e940a047494ef5367eaa57596 Mon Sep 17 00:00:00 2001
> From: Damien Cassou <damien at cassou.me>
> Date: Tue, 23 May 2017 17:19:57 +0200
> Subject: [PATCH] Add imenu support in notmuch-show and notmuch-search
>
> ---
>  emacs/notmuch-show.el | 22 +++++++++++++++++++++-
>  emacs/notmuch.el      | 27 ++++++++++++++++++++++++---
>  2 files changed, 45 insertions(+), 4 deletions(-)
>
> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
> index c670160..b7d6429 100644
> --- a/emacs/notmuch-show.el
> +++ b/emacs/notmuch-show.el
> @@ -1516,7 +1516,11 @@
>  \\{notmuch-show-mode-map}"
>    (setq notmuch-buffer-refresh-function #'notmuch-show-refresh-view)
>    (setq buffer-read-only t
> -	truncate-lines t))
> +	truncate-lines t)
> +  (setq imenu-prev-index-position-function
> +        #'notmuch-show-imenu-prev-index-position-function)
> +  (setq imenu-extract-index-name-function
> +        #'notmuch-show-imenu-extract-index-name-function))
>  
>  (defun notmuch-tree-from-show-current-query ()
>    "Call notmuch tree with the current query"
> @@ -2455,6 +2459,22 @@    (list (completing-read "Mime type to use (default text/plain): "
>  			  (mailcap-mime-types) nil nil nil nil "text/plain")))
>    (notmuch-show-apply-to-current-part-handle #'notmuch-show--mm-display-part mime-type))
>  
> +(defun notmuch-show-imenu-prev-index-position-function ()
> +  "Move point to previous message in notmuch-show buffer.
> +This function is used as a value for
> +`imenu-prev-index-position-function'."
> +  (if (bobp)
> +      nil
> +    (notmuch-show-previous-message)
> +    t))
> +
> +(defun notmuch-show-imenu-extract-index-name-function ()
> +  "Return imenu name for line at point.
> +This function is used as a value for
> +`imenu-extract-index-name-function'.  Point should be at the
> +beginning of the line."
> +  (buffer-substring-no-properties (line-beginning-position) (line-end-position)))
> +
>  (provide 'notmuch-show)
>  
>  ;;; notmuch-show.el ends here
> diff --git a/emacs/notmuch.el b/emacs/notmuch.el
> index 40b9fab..90af68e 100644
> --- a/emacs/notmuch.el
> +++ b/emacs/notmuch.el
> @@ -374,7 +374,11 @@   (setq notmuch-buffer-refresh-function #'notmuch-search-refresh-view)
>    (set (make-local-variable 'scroll-preserve-screen-position) t)
>    (add-to-invisibility-spec (cons 'ellipsis t))
>    (setq truncate-lines t)
> -  (setq buffer-read-only t))
> +  (setq buffer-read-only t)
> +  (setq imenu-prev-index-position-function
> +        #'notmuch-search-imenu-prev-index-position-function)
> +  (setq imenu-extract-index-name-function
> +        #'notmuch-search-imenu-extract-index-name-function))
>  
>  (defun notmuch-search-get-result (&optional pos)
>    "Return the result object for the thread at POS (or point).
> @@ -1094,8 +1098,8 @@       (bury-buffer))
>  
>      ;; Find the first notmuch buffer.
>      (setq first (loop for buffer in (buffer-list)
> -		     if (notmuch-interesting-buffer buffer)
> -		     return buffer))
> +		      if (notmuch-interesting-buffer buffer)
> +		      return buffer))
>  
>      (if first
>  	;; If the first one we found is any other than the starting
> @@ -1104,6 +1108,23 @@ 	(unless (eq first start)
>  	  (switch-to-buffer first))
>        (notmuch))))
>  
> +;;;; Imenu Support
> +
> +(defun notmuch-search-imenu-prev-index-position-function ()
> +  "Move point to previous message in notmuch-search buffer.
> +This function is used as a value for
> +`imenu-prev-index-position-function'."
> +  (notmuch-search-previous-thread))
> +
> +(defun notmuch-search-imenu-extract-index-name-function ()
> +  "Return imenu name for line at point.
> +This function is used as a value for
> +`imenu-extract-index-name-function'.  Point should be at the
> +beginning of the line."
> +  (let ((subject (notmuch-search-find-subject))
> +	(author (notmuch-search-find-authors)))
> +    (format "%s (%s)" subject author)))
> +
>  (setq mail-user-agent 'notmuch-user-agent)
>  
>  (provide 'notmuch)
> -- 
> 2.9.4
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> https://notmuchmail.org/mailman/listinfo/notmuch


More information about the notmuch mailing list