X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=emacstips.mdwn;h=887f2429184270dda437578fa18a990987e31a95;hb=5607447c06ac11eac7fe2c991a76e41d316e08a4;hp=e63ab3137f9d45fc2a3802bc043523392050fb13;hpb=cc2a074c714f142a1ea6f62583d111575fb95995;p=notmuch-wiki diff --git a/emacstips.mdwn b/emacstips.mdwn index e63ab31..887f242 100644 --- a/emacstips.mdwn +++ b/emacstips.mdwn @@ -3,13 +3,17 @@ One of the more popular notmuch message reading clients is **notmuch.el**, an [emacs](http://www.gnu.org/software/emacs/) major mode for interacting with notmuch. It is included in the notmuch -package. This page goes over some usage tips for using notmuch with -Emacs. +package (notmuch-emacs in Debian). This page goes over some usage +tips for using notmuch with Emacs. [[!toc levels=2]] ## Setup +Have a look at the [Howto](http://notmuchmail.org/howto/) for +prerequisites. Be sure you have done the general setup using the +notmuch cli command! + To use the Notmuch emacs mode, first add the following line to your `.emacs` rc file: @@ -25,8 +29,11 @@ notmuch` from within a running emacs. ## Navigating & reading mails When first starting notmuch in emacs, you will be presented with the -notmuch "hello" page. From here you can do searches, see lists of -recent searches, saved searches, message tags, help information, etc. +notmuch "hello" page. If it exits with an error after writing +"Welcome to notmutch. You have" you need to do the basic notmuch setup +first (see above). +From here you can do searches, see lists of recent +searches, saved searches, message tags, help information, etc. Executing a search will open a new buffer in `notmuch-search-mode` displaying the search results. Each line in the search results @@ -579,3 +586,71 @@ buffer. (setq notmuch-hello-refresh-count new-count)))) (add-hook 'notmuch-hello-refresh-hook 'notmuch-hello-refresh-status-message) + +## Replacing tabs with spaces in subject and header + +Mailman mailing list software rewrites and rewraps long message subjects in +a way that causes TABs to appear in the middle of the subject and header +lines. Add this to your `.emacs` to replace tabs with spaces in subject +lines: + + (defun notmuch-show-subject-tabs-to-spaces () + "Replace tabs with spaces in subject line." + (goto-char (point-min)) + (when (re-search-forward "^Subject:" nil t) + (while (re-search-forward "\t" (line-end-position) t) + (replace-match " " nil nil)))) + + (add-hook 'notmuch-show-markup-headers-hook 'notmuch-show-subject-tabs-to-spaces) + +And in header lines (this will only work with the yet to be released +notmuch version 0.15): + + (defun notmuch-show-header-tabs-to-spaces () + "Replace tabs with spaces in header line." + (setq header-line-format + (notmuch-show-strip-re + (replace-regexp-in-string "\t" " " (notmuch-show-get-subject))))) + + (add-hook 'notmuch-show-hook 'notmuch-show-header-tabs-to-spaces) + +## Hiding unread messages in notmuch-show + +I like to have an inbox saved search, but only show unread messages when they +view a thread. This takes two steps: + +1. Apply +[this patch from Mark Walters](http://notmuchmail.org/pipermail/notmuch/2012/010817.html) +to add the `notmuch-show-filter-thread` function. +1. Add the following hook to your emacs configuration: + + (defun expand-only-unread-hook () (interactive) + (let ((unread nil) + (open (notmuch-show-get-message-ids-for-open-messages))) + (notmuch-show-mapc (lambda () + (when (member "unread" (notmuch-show-get-tags)) + (setq unread t)))) + (when unread + (let ((notmuch-show-hook (remove 'expand-only-unread-hook notmuch-show-hook))) + (notmuch-show-filter-thread "tag:unread"))))) + + (add-hook 'notmuch-show-hook 'expand-only-unread-hook) + +## Changing the color of a saved search based on some other search + +I like to have a saved search for my inbox, but have it change color when there +are thread with unread messages in the inbox. I accomplish this with the +following code in my emacs config: + + (defun color-inbox-if-unread () (interactive) + (save-excursion + (goto-char (point-min)) + (let ((cnt (car (process-lines "notmuch" "count" "tag:inbox and tag:unread")))) + (when (> (string-to-number cnt) 0) + (save-excursion + (when (search-forward "inbox" (point-max) t) + (let* ((overlays (overlays-in (match-beginning 0) (match-end 0))) + (overlay (car overlays))) + (when overlay + (overlay-put overlay 'face '((:inherit bold) (:foreground "green"))))))))))) + (add-hook 'notmuch-hello-refresh-hook 'color-inbox-if-unread)