X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=emacstips.mdwn;h=1d73550528617ef07b6e3fb00f6159ef7e2cab77;hb=2f342ba031eb9fb6f052de9b0cef22957ab58443;hp=3a1a3dde0b3513b542dd6c071b91044d67c995ca;hpb=ac053aadb3be86f206612b19868eaa08350bb8dd;p=notmuch-wiki diff --git a/emacstips.mdwn b/emacstips.mdwn index 3a1a3dd..1d73550 100644 --- a/emacstips.mdwn +++ b/emacstips.mdwn @@ -18,15 +18,26 @@ notmuch cli command! To use the Notmuch emacs mode, first add the following line to your `.emacs` rc file: - (require 'notmuch) + (autoload 'notmuch "notmuch" "notmuch mail" t) -or you can load the package via autoload: +or if you always want to load notmuch when you start emacs: - (autoload 'notmuch "notmuch" "notmuch mail" t) + (require 'notmuch) Then, either run "emacs -f notmuch", or execute the command `M-x notmuch` from within a running emacs. +### Notmuch Emacs configuration file: + +(Since Notmuch 0.18) + +After notmuch is loaded `notmuch-init-file` (typically + `~/.emacs.d/notmuch-config.el`) is checked out. If such file exists +it is loaded. Most emacs lisp based configuration not suitable via +customization can be put there instead of `~/.emacs`. As this is so new +feature rest of this emacstips file is not yet adjusted to refer this +file instead of .emacs. + ## Navigating & reading mails When first starting notmuch in emacs, you will be presented with the @@ -116,38 +127,6 @@ to your .emacs file. # Advanced tips and tweaks -## Use separate emacs lisp file for notmuch configuration - -Instead of adding notmuch configuration code to `.emacs`, there -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 - ;;; - - ;;; 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 - (require 'notmuch) - - ;;; 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 to debug smtp sending problems - ;; (setq smtpmail-debug-info t) - -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 @@ -174,62 +153,52 @@ case you want this behaviour: ## Add a key binding to add/remove/toggle a tag -The `notmuch-{search,show}-{add,remove}-tag` functions are very useful -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 +The `notmuch-{search,show,tree}-tag` functions are very useful for +making quick tag key bindings. The arguments to these functions have +changed as notmuch has evolved but the following should work on all +versions of notmuch from 0.13 on. These functions take a list of +tag changes as argument. For example, an argument of (list "+spam" +"-inbox) adds the tag spam and deletes the tag inbox. Note the +argument must be a list even if there is only a single tag change +e.g., use (list "+deleted") to add the deleted tag. - (define-key notmuch-show-mode-map "S" - (lambda () - "mark message as spam" - (interactive) - (notmuch-show-add-tag "spam") - (notmuch-show-remove-tag "inbox"))) - -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: +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: (define-key notmuch-show-mode-map "S" (lambda () "mark message as spam" (interactive) - (notmuch-show-tag-message "+spam" "-inbox"))) + (notmuch-show-tag (list "+spam" "-inbox")))) You can do the same for threads in `notmuch-search-mode` by just -replacing "show" with "search" in the called functions. +replacing "show" with "search" in the keymap and called functions, or +for messages in `notmuch-tree-mode` by replacing "show" by "tree". If +you want to tag a whole thread in `notmuch-tree-mode` use +`notmuch-tree-tag-thread` instead of `notmuch-tree-tag`. -Starting from notmuch 0.12 use `notmuch-search-tag-thread` instead: +You may also want the function in search mode apply to the all threads +in the selected region (if there is one). For notmuch prior to 0.17 +this behaviour will occur automatically with the functions given +above. To get this behaviour on 0.17+ do the following: (define-key notmuch-search-mode-map "S" - (lambda () - "mark messages in thread as spam" - (interactive) - (notmuch-show-tag-thread "+spam" "-inbox"))) + (lambda (&optional beg end) + "mark thread as spam" + (interactive (notmuch-search-interactive-region)) + (notmuch-search-tag (list "+spam" "-inbox") beg end))) -Starting from notmuch 0.13 use `notmuch-search-tag` -- it has a little -different usage syntax: +The analogous functionality in notmuch-tree is currently missing. - (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 +The definitions above make use of a lambda function, but you could also define a separate function first: (defun notmuch-show-tag-spam () "mark message as spam" (interactive) - (notmuch-show-add-tag "spam") - (notmuch-show-remove-tag "inbox"))) - (define-key notmuch-show-mode-map "S" 'notmuch-show-tag-spam) + (notmuch-show-add-tag (list "+spam" "-inbox"))) -(See above for analogy how to apply this for notmuch 0.12 and later) + (define-key notmuch-show-mode-map "S" 'notmuch-show-tag-spam) Here's a more complicated example of how to add a toggle "deleted" key: @@ -239,18 +208,8 @@ key: "toggle deleted tag for message" (interactive) (if (member "deleted" (notmuch-show-get-tags)) - (notmuch-show-remove-tag "deleted") - (notmuch-show-add-tag "deleted")))) - -And version for notmuch 0.12 - - (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")))) + (notmuch-show-tag (list "-deleted")) + (notmuch-show-tag (list "+deleted"))))) ## Adding many tagging keybindings