]> git.cworth.org Git - notmuch-wiki/blobdiff - emacstips.mdwn
note API change for tag macro hint.
[notmuch-wiki] / emacstips.mdwn
index 082c57290d5ab214b91b6d097a9d14bb192ba099..e73c1f5538a46791d3508f571a9147ecc2e257a9 100644 (file)
@@ -87,7 +87,7 @@ mentioned as script arguments. (Note: The script expects that you have
         #!/bin/sh
         attach_cmds=""
         while [ "$1" ]; do
-            fullpath=$(readlink --canonicalize $1)
+            fullpath=$(readlink --canonicalize "$1")
             attach_cmds="$attach_cmds (mml-attach-file \"$fullpath\")"
             shift
         done
@@ -139,6 +139,8 @@ for making quick tag key bindings.  For instance, here's an example
 of how to make a key binding to add the "spam" tag and remove the
 "inbox" tag in notmuch-show-mode:
 
+In notmuch versions up to 0.11.x
+
         (define-key notmuch-show-mode-map "S"
           (lambda ()
             "mark message as spam"
@@ -146,9 +148,22 @@ of how to make a key binding to add the "spam" tag and remove the
             (notmuch-show-add-tag "spam")
             (notmuch-show-remove-tag "inbox")))
 
+Starting from notmuch 0.12 (not released yet) 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 changed to this:
+
+        (define-key notmuch-show-mode-map "S"
+          (lambda ()
+            "mark message as spam"
+            (interactive)
+            (notmuch-show-tag-message "+spam" "-inbox")))
+
 You can do the same for threads in `notmuch-search-mode` by just
 replacing "show" with "search" in the called functions.
 
+(Starting from notmuch 0.12 use `notmuch-search-tag-thread` instead)
+
 The definition above makes use of a lambda function, but you could
 also define a separate function first:
 
@@ -159,6 +174,8 @@ also define a separate function first:
           (notmuch-show-remove-tag "inbox")))
         (define-key notmuch-show-mode-map "S" 'notmuch-show-tag-spam)
 
+(See above for analogy how to apply this for notmuch 0.12 and later)
+
 Here's a more complicated example of how to add a toggle "deleted"
 key:
 
@@ -170,6 +187,44 @@ key:
                 (notmuch-show-remove-tag "deleted")
               (notmuch-show-add-tag "deleted"))))
 
+And version for notmuch 0.12 (not released yet)
+
+        (define-key notmuch-show-mode-map "d"
+          (lambda ()
+            "toggle deleted tag for message"
+            (interactive)
+            (notmuch-show-tag-message
+              (if (member "deleted" (notmuch-show-get-tags))
+                  "-deleted" "+deleted"))))
+
+## Adding many tagging keybindings
+
+If you want to have have many tagging keybindings, you can save the typing
+the few lines of  boilerplate for every binding (for versions before 0.12,
+you will need to change notmuch-show-apply-tag-macro).
+
+    (eval-after-load 'notmuch-show
+      '(define-key notmuch-show-mode-map "`" 'notmuch-show-apply-tag-macro))
+
+    (setq notmuch-show-tag-macro-alist
+      (list
+       '("m" "+notmuch::patch" "+notmuch::moreinfo" "-notmuch::needs-review")
+       '("n" "+notmuch::patch" "+notmuch::needs-review" "-notmuch::pushed")
+       '("o" "+notmuch::patch" "+notmuch::obsolete"
+             "-notmuch::needs-review" "-notmuch::moreinfo")
+       '("p" "-notmuch::pushed" "-notmuch::needs-review"
+         "-notmuch::moreinfo" "+pending")
+       '("P" "-pending" "-notmuch::needs-review" "-notmuch::moreinfo" "+notmuch::pushed")
+       '("r" "-notmuch::patch" "+notmuch::review")
+       '("s" "+notmuch::patch" "-notmuch::obsolete" "-notmuch::needs-review" "-notmuch::moreinfo" "+notmuch::stale")
+       '("t" "+notmuch::patch" "-notmuch::needs-review" "+notmuch::trivial")
+       '("w" "+notmuch::patch" "+notmuch::wip" "-notmuch::needs-review")))
+
+    (defun notmuch-show-apply-tag-macro (key)
+      (interactive "k")
+      (let ((macro (assoc key notmuch-show-tag-macro-alist)))
+        (apply 'notmuch-show-tag-message (cdr macro))))
+
 ## Restore reply-to-all key binding to 'r'
 
 Starting from notmuch 0.12 the 'r' key is bound to reply-to-sender instead of
@@ -313,12 +368,16 @@ emacswiki.
 
 ## <span id="address_completion">Address completion when composing</span>
 
-There are currently two solutions to this:
+There are currently three solutions to this:
+
+### bbdb
 
 [bbdb](http://bbdb.sourceforge.net) is a contact database for emacs
 that works quite nicely together with message mode, including
 address autocompletion.
 
+### notmuch database as an address book
+
 You can also use the notmuch database as a mail address book itself.
 To do this you need a command line tool that outputs likely address
 candidates based on a search string.  There are currently three
@@ -347,6 +406,19 @@ You can perform tab-completion using any of these programs. Just add the followi
         (setq notmuch-address-command "/path/to/address_fetching_program")
         (notmuch-address-message-insinuate)
 
+### Google Contacts
+
+[GooBook](http://code.google.com/p/goobook/) is a command-line tool for
+accessing Google Contacts. Install and set it up according to its documentation.
+
+To use GooBook with notmuch, use this wrapper script and set it up like the
+programs above.
+
+        #!/bin/sh
+        goobook query "$*" | sed 's/\(.*\)\t\(.*\)\t.*/\2 \<\1\>/' | sed '/^$/d'
+
+You can add the sender of a message to Google Contacts by piping the message
+(`notmuch-show-pipe-message`) to `goobook add`.
 
 ## How to sign/encrypt messages with gpg
 
@@ -371,7 +443,7 @@ part.
 
 ### Troubleshooting message-mode gpg support
 
-- If you have trouble with expired subkeys, you may have encounted
+- If you have trouble with expired subkeys, you may have encountered
   emacs bug #7931.  This is fixed in git commit 301ea744c on
   2011-02-02.  Note that if you have the Debian package easypg
   installed, it will shadow the fixed version of easypg included with