X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=emacstips.mdwn;h=3a1a3dde0b3513b542dd6c071b91044d67c995ca;hb=ac053aadb3be86f206612b19868eaa08350bb8dd;hp=8c8e1688c54fcefb33e7851cf6e6065806b0f337;hpb=fc1b4c2d10ae9f39a49edaa47a09af97f7bcdbc5;p=notmuch-wiki diff --git a/emacstips.mdwn b/emacstips.mdwn index 8c8e168..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 @@ -103,11 +104,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. @@ -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 @@ -457,10 +481,14 @@ 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)`. + * 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) @@ -624,25 +678,25 @@ 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) + (add-hook 'notmuch-show-hook 'notmuch-show-header-tabs-to-spaces) ## Hiding unread messages in notmuch-show @@ -694,3 +748,50 @@ To have clickable buttons for notmuch messages and threads, add the following to ("\\(?: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 + + (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)