X-Git-Url: https://git.cworth.org/git?p=notmuch-wiki;a=blobdiff_plain;f=emacstips.mdwn;h=fd8d0efbcad5b9de402b5288a56e36c7ea475a07;hp=85476256af6b982c8e9c10c11afb8f5f230b6c9e;hb=a48ddbaa8a891995104a76cc48a93c55407f565e;hpb=ca2e7982461b887c281a3fa7af401941a676b5d2 diff --git a/emacstips.mdwn b/emacstips.mdwn index 8547625..fd8d0ef 100644 --- a/emacstips.mdwn +++ b/emacstips.mdwn @@ -29,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 @@ -100,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. @@ -121,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* @@ -144,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 @@ -161,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" @@ -272,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\(notmuch-fcc-dirs\)\|\(message-directory\) @@ -424,10 +457,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: @@ -449,11 +486,37 @@ 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 +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: @@ -499,7 +562,7 @@ identities using gnus-alias. Looking into `gnus-alias.el` gives a bit more information... -### Example Configuration +### Example Configuration Here is an example configuration. @@ -537,7 +600,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. @@ -591,22 +654,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)