X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=emacstips.mdwn;h=3a1a3dde0b3513b542dd6c071b91044d67c995ca;hb=ac053aadb3be86f206612b19868eaa08350bb8dd;hp=09c4b77cec2b30850d4dc03d2dc748c22023785b;hpb=8a373c87ebecd8fafea8c95963c99b1d30bc5822;p=notmuch-wiki diff --git a/emacstips.mdwn b/emacstips.mdwn index 09c4b77..3a1a3dd 100644 --- a/emacstips.mdwn +++ b/emacstips.mdwn @@ -1,3 +1,4 @@ +[[!img notmuch-logo.png alt="Notmuch logo" class="left"]] # Tips and Tricks for using notmuch with Emacs One of the more popular notmuch message reading clients is @@ -328,14 +329,37 @@ saved searches displayed can be modified directly from the notmuch interface (using the `[save]` button next to a previous search) or by customising the variable `notmuch-saved-searches`. -An example setting might be: +An example setting for notmuch versions up to 0.17.x might be: (setq notmuch-saved-searches '(("inbox" . "tag:inbox") ("unread" . "tag:inbox AND tag:unread") ("notmuch" . "tag:inbox AND to:notmuchmail.org"))) +Starting from notmuch 0.18 the variable changed. It is backwards +compatible so the above will still work but the new style will be used +if you use customize and there are some new features available. The above would become + + (setq notmuch-saved-searches '((:name "inbox" :query "tag:inbox") + (:name "unread" :query "tag:inbox AND tag:unread") + (:name "notmuch" :query "tag:inbox AND to:notmuchmail.org"))) + +The additional features are the possibility to set the search order +for the search, and the possibility to specify a different query for +displaying the count for the saved-search. For example + + (setq notmuch-saved-searches '((:name "inbox" + :query "tag:inbox" + :count-query "tag:inbox and tag:unread" + :sort-order 'oldest-first))) + +specifies a single saved search for inbox, but the number displayed by +the search will be the number of unread messages in the inbox, and the +sort order for this search will be oldest-first. + Of course, you can have any number of saved searches, each configured -with any supported search terms (see "notmuch help search-terms"). +with any supported search terms (see "notmuch help search-terms"), and +in the new style variable they can each have different count-queries +and sort orders. Some users find it useful to add `and not tag:delete` to those searches, as they use the `delete` tag to mark messages as @@ -441,7 +465,7 @@ address autocompletion. 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 +candidates based on a search string. There are currently four available: * The python tool `notmuch_address.py` (`git clone @@ -461,6 +485,10 @@ available: This tools maintains it's own address "database" gathered from email files notmuch knows and search from that "database" is done by `fgrep(1)`. + * python/sqlite combination [notmuch-abook](https://github.com/guyzmo/notmuch-abook/) + This tools also maintains an address database in sqlite after harvesting + from notmuch. It also includes a vim plugin. + You can perform tab-completion using any of these programs. Just add the following to your .emacs: @@ -482,6 +510,32 @@ programs above. You can add the sender of a message to Google Contacts by piping the message (`notmuch-show-pipe-message`) to `goobook add`. +### Akonadi + + git clone https://github.com/mmehnert/akonadimailsearch + +Install the development packages for kdepim on your system. +Enter the cloned repository and create a build directory: + + mkdir build + cd build + cmake ..; make; + +You will find the akonadimailsearch binary in the build/src directory. +Create a ~/bin/akonadimailsearch.sh file with the following content and make it executable: +(Adjust the path for the akonadimailsearch binary.) + + #!/bin/sh + akonadimailsearch "$@" 2>/dev/null + +As described above, you can now add the following settings to your ~/.emacs file: + + (require 'notmuch-address) + (setq notmuch-address-command "~/bin/akonadimailsearch.sh") + (notmuch-address-message-insinuate) + + + ## How to sign/encrypt messages with gpg Messages can by signed using gpg by invoking @@ -555,7 +609,7 @@ Here is an example configuration. ;; Use "home" identity by default (setq gnus-alias-default-identity "home") ;; Define rules to match work identity - (setq gnus-alias-identity-rules + (setq gnus-alias-identity-rules) '(("work" ("any" "john.doe@\\(example\\.com\\|help\\.example.com\\)" both) "work")) ;; Determine identity when message-mode loads (add-hook 'message-setup-hook 'gnus-alias-determine-identity) @@ -711,3 +765,33 @@ Then In general it is nice to have a key for org-links (not just for notmuch). For example (define-key global-map "\C-cl" 'org-store-link) + +## Viewing diffs in notmuch + +The following code allows you to view an inline patch in diff-mode +directly from notmuch. This means that normal diff-mode commands like +refine, next hunk etc all work. + + (defun my-notmuch-show-view-as-patch () + "View the the current message as a patch." + (interactive) + (let* ((id (notmuch-show-get-message-id)) + (subject (concat "Subject: " (notmuch-show-get-subject) "\n")) + (diff-default-read-only t) + (buf (get-buffer-create (concat "*notmuch-patch-" id "*"))) + (map (make-sparse-keymap))) + (define-key map "q" 'notmuch-kill-this-buffer) + (switch-to-buffer buf) + (let ((inhibit-read-only t)) + (erase-buffer) + (insert subject) + (insert (notmuch-get-bodypart-internal id 1 nil))) + (set-buffer-modified-p nil) + (diff-mode) + (lexical-let ((new-ro-bind (cons 'buffer-read-only map))) + (add-to-list 'minor-mode-overriding-map-alist new-ro-bind)) + (goto-char (point-min)))) + +and then this function needs to bound into the keymap with something like + + (define-key 'notmuch-show-mode-map "D" 'my-notmuch-show-view-as-patch)