X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=emacstips.mdwn;h=074c593dfa27286c12a67b67f553bbe69a6f509f;hb=663edf5a4de7595f9e2a480db608f6b1ad537245;hp=ef96e00210a201767b12bb162a4235bef2f8c9f2;hpb=b02f174fe4dfc0bf7e0cb73bcf53354d9c4d38de;p=notmuch-wiki diff --git a/emacstips.mdwn b/emacstips.mdwn index ef96e00..074c593 100644 --- a/emacstips.mdwn +++ b/emacstips.mdwn @@ -1,14 +1,13 @@ - +# Tips and Tricks for using notmuch with Emacs -[[!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 +**notmuch.el**, an [emacs](http://www.gnu.org/software/emacs/) major +mode for interacting with notmuch. It is included in the notmuch +package. This page goes over some usage tips for using notmuch with +Emacs. [[!toc levels=2]] -The main Notmuch message reading client is **notmuch.el**, which is an -[emacs](http://www.gnu.org/software/emacs/) major mode, and is -included in the notmuch package. - ## Setup To use the Notmuch emacs mode, first add the following line to your @@ -105,29 +104,26 @@ is an option to collect those to a separate file (which is only loaded when `notmuch` is invoked). To do this, write, for example a file called `~/.emacs.d/my-notmuch.el`: - ;; my-notmuch.el -- my notmuch mail configuration - ;; + ;;; my-notmuch.el -- my notmuch mail configuration + ;;; - ;; add here stuff required to be configured *before* - ;; notmuch is loaded; + ;;; 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") + ;; 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* - ;; notmuch is loaded; - - ;(setq user-mail-address (notmuch-user-primary-email) - ; user-full-name (notmuch-user-name)) + ;;; add here stuff required to be configured *after* + ;;; notmuch is loaded; - ; uncomment & modify if you want to use external smtp server to send mail - ; (setq smtpmail-smtp-server "smtp.server.tld" - ; message-send-mail-function 'message-smtpmail-send-it) + ;; uncomment & modify if you want to use external smtp server to send mail + ;; (setq smtpmail-smtp-server "smtp.server.tld" + ;; message-send-mail-function 'message-smtpmail-send-it) -Then, adto `.emacs`: +Then, add to `.emacs`: (autoload 'notmuch "~/.emacs.d/my-notmuch" "notmuch mail" t) @@ -148,10 +144,10 @@ In notmuch versions up to 0.11.x (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: +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 +changed to this: (define-key notmuch-show-mode-map "S" (lambda () @@ -162,12 +158,27 @@ the above needs to be changed to this: 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) +Starting from notmuch 0.12 use `notmuch-search-tag-thread` instead: + + (define-key notmuch-search-mode-map "S" + (lambda () + "mark messages in thread as spam" + (interactive) + (notmuch-show-tag-thread "+spam" "-inbox"))) + +Starting from notmuch 0.13 use `notmuch-search-tag` -- it has a little +different usage syntax: + + (define-key notmuch-search-mode-map "S" + (lambda () + "mark messages in thread as spam" + (interactive) + (notmuch-search-tag '("+spam" "-inbox")))) The definition above makes use of a lambda function, but you could also define a separate function first: - (defun notmuch-show-tag-spam() + (defun notmuch-show-tag-spam () "mark message as spam" (interactive) (notmuch-show-add-tag "spam") @@ -187,7 +198,7 @@ key: (notmuch-show-remove-tag "deleted") (notmuch-show-add-tag "deleted")))) -And version for notmuch 0.12 (not released yet) +And version for notmuch 0.12 (define-key notmuch-show-mode-map "d" (lambda () @@ -197,6 +208,34 @@ And version for notmuch 0.12 (not released yet) (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 @@ -420,3 +459,37 @@ part. 2011-02-02. Note that if you have the Debian package easypg installed, it will shadow the fixed version of easypg included with emacs. + +## Multiple identities using gnus-alias + +gnus-alias allows you to define multiple identities when using +message-mode. You can specify the from address, organization, extra +headers (including Bcc), extra body text, and signature for each +identity. Identities are chosen based on a set of rules. When you are +in message mode, you can switch identities using gnus-alias. + +Here is an example configuration. + + ;; Define two identities, "home" and "work" + (setq gnus-alias-identity-alist + '(("home" + nil ;; Does not refer to any other identity + "John Doe " + nil ;; No organization header + nil ;; No extra headers + nil ;; No extra body text + "~/.signature") + ("work" + nil + "John Doe " + "Example Corp." + (("Bcc" . "john.doe@example.com")) + nil + "~/.signature.work"))) + ;; Use "home" identity by default + (setq gnus-alias-default-identity "home") + ;; Define rules to match work identity + (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)