]> git.cworth.org Git - obsolete/notmuch-wiki/blobdiff - emacstips.mdwn
emacstips.mdwn: M-x delete-trailing-whitespace
[obsolete/notmuch-wiki] / emacstips.mdwn
index a2c0b24c333a035e846f236cb7ec0183311e635a..fa0810470387b9a5a6effcbe269413c69635e5f0 100644 (file)
@@ -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
@@ -117,14 +124,14 @@ a file called `~/.emacs.d/my-notmuch.el`:
 
         ;;; my-notmuch.el -- my notmuch mail configuration
         ;;;
-        
+
         ;;; add here stuff required to be configured *before*
         ;;; notmuch is loaded;
 
         ;; uncomment and modify in case some elisp files are not found in load-path
         ;; (add-to-list 'load-path "~/vc/ext/notmuch/emacs")
 
-        ;;; load notmuch 
+        ;;; load notmuch
         (require 'notmuch)
 
         ;;; add here stuff required to be configured *after*
@@ -157,9 +164,9 @@ In notmuch versions up to 0.11.x
             (notmuch-show-add-tag "spam")
             (notmuch-show-remove-tag "inbox")))
 
-Starting from notmuch 0.12 the functions `notmuch-show-add-tag` and 
+Starting from notmuch 0.12 the functions `notmuch-show-add-tag` and
 `notmuch-show-remove-tag` have changed to be more versatile and lost
-noninteractive use. When upgrading to 0.12 the above needs to be 
+noninteractive use. When upgrading to 0.12 the above needs to be
 changed to this:
 
         (define-key notmuch-show-mode-map "S"
@@ -268,12 +275,19 @@ And in search mode:
 The Emacs interface to notmuch will automatically add an `Fcc`
 header to your outgoing mail so that any messages you send will also
 be saved in your mail store. You can control where this copy of the
-message is saved by setting the variables `message-directory` (which
-defines a base directory) and `notmuch-fcc-dirs` which defines the
-subdirectory relative to `message-directory` in which to save the
-mail. Enter a directory (without the maildir `/cur` ending which
-will be appended automatically). To customize both variables at the
-same time, use the fancy command:
+message is saved by setting the variable `notmuch-fcc-dirs` which defines the
+subdirectory relative to the `database.path` setting from your
+notmuch configuration in which to save the mail. Enter a directory
+(without the maildir `/cur` ending which will be appended
+automatically). Additional information can be found as usual using:
+
+       M-x describe-variable notmuch-fcc-dirs
+
+An additional variable that can affect FCC settings in some cases is
+`message-directory`. Emacs message-mode uses this variable for
+postponed messages.
+
+To customize both variables at the same time, use the fancy command:
 
         M-x customize-apropos<RET>\(notmuch-fcc-dirs\)\|\(message-directory\)
 
@@ -420,7 +434,7 @@ available:
 
             cc -o addrlookup addrlookup.c `pkg-config --cflags --libs gobject-2.0` -lnotmuch
 
-  * Shell/fgrep/perl combination [nottoomuch-addresses.sh](http://www.iki.fi/too/nottoomuch/nottoomuch-addresses/). 
+  * Shell/fgrep/perl combination [nottoomuch-addresses.sh](http://www.iki.fi/too/nottoomuch/nottoomuch-addresses/).
     This tools maintains it's own address "database" gathered from email
     files notmuch knows and search from that "database" is done by `fgrep(1)`.
 
@@ -447,9 +461,9 @@ You can add the sender of a message to Google Contacts by piping the message
 
 ## How to sign/encrypt messages with gpg
 
-Messages can by signed using gpg by invoking 
+Messages can by signed using gpg by invoking
 `M-x mml-secure-sign-pgpmime` (or `M-x mml-secure-encrypt-pgpmime`).
-These functions are available via the standard `message-mode` keybindings 
+These functions are available via the standard `message-mode` keybindings
 `C-c C-m s p` and `C-c C-m c p`. To sign outgoing mail by default, use the
 `message-setup-hook` in your `.emacs` file:
 
@@ -495,7 +509,7 @@ identities using gnus-alias.
 
 Looking into `gnus-alias.el` gives a bit more information...
 
-### Example Configuration 
+### Example Configuration
 
 Here is an example configuration.
 
@@ -533,7 +547,7 @@ more information (some of these have "extensive documentation"):
         M-x describe-variable RET gnus-alias-default-identity
 
         M-x customize-group RET gnus-alias RET
-          or 
+          or
         M-x gnus-alias-customize RET
 
 The last two do the same thing.
@@ -606,3 +620,54 @@ notmuch version 0.15):
                 (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)
+
+## Linking to notmuch messages and threads from the Circe IRC client
+
+[Circe](https://github.com/jorgenschaefer/circe/wiki) is an IRC client for emacs.
+To have clickable buttons for notmuch messages and threads, add the following to
+`lui-buttons-list` (using, e.g. M-x customize-variable)
+
+    ("\\(?:id\\|mid\\|thread\\):[0-9A-Za-z][0-9A-Za-z.@-]*" 0 notmuch-show 0)
+
+If you have notmuch-pick installed, it works fine for this as well.