]> git.cworth.org Git - obsolete/notmuch-wiki/blobdiff - emacstips.mdwn
Update news & manpages to notmuch version 0.16
[obsolete/notmuch-wiki] / emacstips.mdwn
index 90b7a2553ae65a2fce61dcdbe1875aac5c775463..09c4b77cec2b30850d4dc03d2dc748c22023785b 100644 (file)
@@ -31,7 +31,7 @@ notmuch` from within a running emacs.
 When first starting notmuch in emacs, you will be presented with the
 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).  
+first (see above).
 From here you can do searches, see lists of recent
 searches, saved searches, message tags, help information, etc.
 
@@ -103,11 +103,11 @@ mentioned as script arguments. (Note: The script expects that you have
 
 If notmuch-show-mode behaves badly for you in emacs 24.x try adding one of
 
-       (setq gnus-inhibit-images nil)
+        (setq gnus-inhibit-images nil)
 
 or
 
-       (require 'gnus-art)
+        (require 'gnus-art)
 
 to your .emacs file.
 
@@ -124,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*
@@ -147,6 +147,29 @@ Then, add to `.emacs`:
 
         (autoload 'notmuch "~/.emacs.d/my-notmuch" "notmuch mail" t)
 
+## Initial cursor position in notmuch 0.15 hello window
+
+In notmuch version 0.15 emacs client the handling of cursor position in
+notmuch hello window has been simplified to a version which suits best
+most cases.
+
+Initially the cursor is positioned at the beginning of buffer.
+
+Some users liked the "ancient" version where cursor was moved to the
+first `Saved searches` button.
+
+Add the following code to your notmuch emacs configuration file in
+case you want this behaviour:
+
+        (add-hook 'notmuch-hello-refresh-hook
+                  (lambda ()
+                    (if (and (eq (point) (point-min))
+                             (search-forward "Saved searches:" nil t))
+                        (progn
+                          (forward-line)
+                          (widget-forward 1))
+                      (if (eq (widget-type (widget-at)) 'editable-field)
+                          (beginning-of-line)))))
 
 ## Add a key binding to add/remove/toggle a tag
 
@@ -164,9 +187,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"
@@ -275,12 +298,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\)
 
@@ -427,7 +457,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](https://github.com/domo141/nottoomuch/blob/master/nottoomuch-addresses.rst).
     This tools maintains it's own address "database" gathered from email
     files notmuch knows and search from that "database" is done by `fgrep(1)`.
 
@@ -454,9 +484,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:
 
@@ -502,7 +532,7 @@ identities using gnus-alias.
 
 Looking into `gnus-alias.el` gives a bit more information...
 
-### Example Configuration 
+### Example Configuration
 
 Here is an example configuration.
 
@@ -540,7 +570,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.
@@ -594,22 +624,90 @@ 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))))
+        (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)
+        (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)))))
+        (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)
+
+## 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.
+
+## Linking to notmuch messages from org-mode
+
+Support for linking to notmuch messages is distributed with org-mode,
+but as a contrib file, so you might have to work a bit to load it.
+
+In Debian and derivatives,
+
+       (add-to-list 'load-path "/usr/share/org-mode/lisp")
+
+Then
+
+       (require 'org-notmuch)
+
+In general it is nice to have a key for org-links (not just for notmuch). For example
 
-       (add-hook 'notmuch-show-hook 'notmuch-show-header-tabs-to-spaces)
+    (define-key global-map "\C-cl" 'org-store-link)