X-Git-Url: https://git.cworth.org/git?p=notmuch-wiki;a=blobdiff_plain;f=emacstips.mdwn;h=11495b2f98add6a1cd45b3f154c584581f1ba1d9;hp=7724e0bd13e1fa5ac938830b2c517321120690e6;hb=b989c29efb33a1f4db6322f7b50a9dc919cd1699;hpb=8956c9012b48df4570824f40fdc0188455d4b813 diff --git a/emacstips.mdwn b/emacstips.mdwn index 7724e0b..11495b2 100644 --- a/emacstips.mdwn +++ b/emacstips.mdwn @@ -1,113 +1,22 @@ [[!img notmuch-logo.png alt="Notmuch logo" class="left"]] -# Tips and Tricks for using notmuch with Emacs +# 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 (notmuch-emacs in Debian). This page goes over some usage -tips for using notmuch with Emacs. +Here are some tips and tricks for using Notmuch with Emacs. See the [[Notmuch +Emacs Interface|notmuch-emacs]] page for basics. [[!toc levels=2]] -## Setup - -Have a look at the [Howto](http://notmuchmail.org/howto/) for -prerequisites. Be sure you have done the general setup using the -notmuch cli command! - -To use the Notmuch emacs mode, first add the following line to your -`.emacs` rc file: - - (autoload 'notmuch "notmuch" "notmuch mail" t) - -or if you always want to load notmuch when you start emacs: - - (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`. - -## Navigating & reading mails - -When first starting notmuch in emacs, you will be presented with the -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 -represents a message thread. Hitting the '?' key will show help for -this mode. - -In general, the 'q' will kill the current notmuch buffer and return -you to the previous buffer (sort of like a 'pop'). - -In search mode, navigating to a thread and hitting return will then -open a new buffer in `notmuch-show-mode`, which will show the actual -message contents of the thread. - -## Sending mail - -In any notmuch mode, you can start a new message by hitting the 'm' -key. To reply to a message or thread, just hit the 'r' key. - -When composing new messages, you will be entered in emacs's -`message-mode`, which is a powerful mode for composing and sending -messages. When in message mode, you can type `C-c ?` for help. - -If you would like to use address autocompletion when composing -messages, see [address completion](#address_completion). - -When you are ready to send a message, type `C-c C-c`. By default -message mode will use your sendmail command to send mail, so make sure -that works. One annoying standard configuration of message mode is -that it will hide the sent mail in your emacs frame stack, but it will -not close it. If you type several mails in an emacs session they will -accumulate and make switching between buffers more annoying. You can -avoid that behavior by adding `(setq message-kill-buffer-on-exit t)` -in your `.emacs` file -(or doing `M-x customize-variablemessage-kill-buffer-on-exit`) -which will really close the mail window after sending it. +## Issues with Emacs 24 -## Attaching files +If notmuch-show-mode behaves badly for you in emacs 24.x try adding one of -Using the `M-x mml-attach-file` command, you can attach any file to be -sent with your mail. By default this command is bound to the menu item -*Attachments--Attach File* with the key binding `C-c C-a`. The -variable `mml-dnd-attach-options` (`M-x -customize-variablemml-dnd-attach-options`) can be set to -allow the prompting for various attachment options (such as -inline/attachment) if you want to do that. + (setq gnus-inhibit-images nil) -For those who prefer a more graphical interface, you can also simply -drag and drop files from a file manager into a mail composition window -to have them attached. In Ubuntu this works without any modifications -if files are dragged from the file manager. +or -And for those who prefer working from command line, the following -script opens new emacs window with empty message and attaches files -mentioned as script arguments. (Note: The script expects that you have -`(server-start)` in your `.emacs` file.) + (require 'gnus-art) - #!/bin/sh - attach_cmds="" - while [ $# -gt 0 ]; do - fullpath=$(readlink --canonicalize "$1") - attach_cmds="$attach_cmds (mml-attach-file \"$fullpath\")" - shift - done - emacsclient -a '' -c -e "(progn (compose-mail) $attach_cmds)" +to your .emacs file. ## Controlling external handlers for attachements @@ -117,21 +26,15 @@ adding a .mailcap file in your home directory. Here is an example: application/pdf; /usr/bin/mupdf %s; test=test "$DISPLAY" != ""; description=Portable Document Format; nametemplate=%s.pdf application/x-pdf; /usr/bin/mupdf %s; test=test "$DISPLAY" != ""; description=Portable Document Format; nametemplate=%s.pdf -## Issues with Emacs 24 - -If notmuch-show-mode behaves badly for you in emacs 24.x try adding one of - - (setq gnus-inhibit-images nil) - -or - - (require 'gnus-art) - -to your .emacs file. +## Overwriting the sender address ------ +If you want to always use the same sender address, then the following +defadvice can help you. -# Advanced tips and tweaks + (defadvice notmuch-mua-reply (around notmuch-fix-sender) + (let ((sender "Max Monster ")) + ad-do-it)) + (ad-activate 'notmuch-mua-reply) ## Initial cursor position in notmuch 0.15 hello window @@ -315,7 +218,7 @@ 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))) + :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 @@ -371,10 +274,72 @@ With that in place, you need a `.msmtprc` with the accounts configured for the domains you want to send out using specific SMTP servers and the rest will go to the default account. +## sending mail using smtpmail + + + +If setting up local `sendmail` or `msmtp` is not feasible or desirable, +the Emacs `smtpmail` package can be used to send email by talking to remote +SMTP server via TCP connection. It is pretty easy to configure: + +1. Emacs variable `message-send-mail-function` has not been set + + Initially, Emacs variable `message-send-mail-function` has value of + `sendmail-query-once`. When (notmuch) message mode is about to send email, + `sendmail-query-once` will ask how emacs should send email. Typing `smtp` + will configure `smtpmail` and Emacs may prompt for SMTP settings. + +1. `M-x customize-group RET smtpmail` + + As a minimum, 'Smtpmail Smtp Server' needs to be set. + + After doing that, continue with `M-x load-library RET message` and + `M-x customize-variable RET message-send-mail-function`. + In the customization buffer select `message-smtpmail-send-it`. + +1. Set some variables in .emacs or in [notmuch init file](/notmuch-emacs#notmuch_init_file) + + (setq smtpmail-smtp-server "smtp.server.tld" ;; <-- edit this !!! + ;; smtpmail-smtp-service 25 ;; 25 is default -- uncomment and edit if needed + ;; smtpmail-stream-type 'starttls + ;; smtpmail-debug-info t + ;; smtpmail-debug-verb t + message-send-mail-function 'message-smtpmail-send-it) + +Note that emacs 24 or newer is required for `smtpmail-stream-type` +(and smtp authentication) to be effective. + +More information for smtpmail is available: + +* In Emacs: `M-x info-display-manual smtpmail` +* [EmacsWiki Page](http://www.emacswiki.org/emacs/SendingMail) + + ## Address completion when composing There are currently three solutions to this: +### notmuch address + +Starting with Notmuch 0.21, there is a builtin command to perform +autocompletion directly within Notmuch. Starting with 0.22, it is +configured by default, so if you have previously configured another +completion mechanism, you may want to try out the new internal +method. Use `M-x customize-variable RET notmuch-address-command` and +reset the value to "internal address completion" (`'internal` in +lisp). + +If you are not yet running 0.22, you can still use it by adding a +wrapper around the command called, say, `notmuch-address`: + + #!/bin/sh + exec notmuch address from:"$*" + +Then you can set the `notmuch-address-command` to `notmuch-address` +(if it is in your `$PATH` of course, otherwise use an absolute path). + ### bbdb [bbdb](http://bbdb.sourceforge.net) is a contact database for emacs @@ -392,9 +357,14 @@ available: http://commonmeasure.org/~jkr/git/notmuch_addresses.git`) (slower, but no compilation required so good for testing the setup) + * The C-based [notmuch-addrlookup](https://github.com/aperezdc/notmuch-addrlookup-c) by [Adrian Perez](http://perezdecastro.org/), which is faster but needs to be compiled. + + git clone https://github.com/aperezdc/notmuch-addrlookup-c + cd notmuch-addrlookup-c + make + * The vala-based - [addrlookup](http://github.com/spaetz/vala-notmuch) (faster, but - needs compiling). The addrlookup binary needs to be compiled. + [addrlookup](http://github.com/spaetz/vala-notmuch) The addrlookup binary needs to be compiled. Grab `http://github.com/spaetz/vala-notmuch/raw/static-sources/src/addrlookup.c` and build it with: @@ -410,7 +380,7 @@ available: from notmuch. It also includes a vim plugin. You can perform tab-completion using any of these programs. -Just add the following to your [notmuch init file](#notmuch_init_file): +Just add the following to your [notmuch init file](/notmuch-emacs#notmuch_init_file): (require 'notmuch-address) (setq notmuch-address-command "/path/to/address_fetching_program") @@ -444,7 +414,7 @@ Enter the cloned repository and create a build directory: You will find the akonadimailsearch binary in the build/src directory. Copy it to ~/bin . You can now add the following settings to your -[notmuch init file](#notmuch_init_file): +[notmuch init file](/notmuch-emacs#notmuch_init_file): (require 'notmuch-address) (setq notmuch-address-command "~/bin/akonadimailsearch") @@ -493,11 +463,14 @@ part. installed, it will shadow the fixed version of easypg included with emacs. +- If you wish `mml-secure-encrypt` to encrypt also for the sender, then + `M-x customize-variable mml2015-encrypt-to-self` might suit your need. + ## Reading and verifying encrypted and signed messages Encrypted and signed mime messages can be read and verified with: - (notmuch-crypto-process-mime t) + (setq notmuch-crypto-process-mime t) Decrypting or verifying inline pgp messages can be done by selecting an the inline pgp area and and using: @@ -573,7 +546,7 @@ See also the **Usage:** section in `gnus-alias.el`. ## Resending (or bouncing) messages -Add the following to your [notmuch init file](#notmuch_init_file) to be able +Add the following to your [notmuch init file](/notmuch-emacs#notmuch_init_file) to be able to resend the current message in show mode. (define-key notmuch-show-mode-map "b" @@ -585,7 +558,7 @@ to resend the current message in show mode. ## `notmuch-hello` refresh status message -Add the following to your [notmuch init file](#notmuch_init_file) to get a +Add the following to your [notmuch init file](/notmuch-emacs#notmuch_init_file) to get a status message about the change in the number of messages in the mail store when refreshing the `notmuch-hello` buffer. @@ -615,7 +588,7 @@ when refreshing the `notmuch-hello` buffer. Mailman mailing list software rewrites and rewraps long message subjects in a way that causes TABs to appear in the middle of the subject and header -lines. Add this to your [notmuch init file](#notmuch_init_file) to replace +lines. Add this to your [notmuch init file](/notmuch-emacs#notmuch_init_file) to replace tabs with spaces in subject lines: (defun notmuch-show-subject-tabs-to-spaces () @@ -735,3 +708,65 @@ refine, next hunk etc all work. 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) + +## Interfacing with Patchwork + +[Patchwork](http://jk.ozlabs.org/projects/patchwork/) is a web-based system for +tracking patches sent to a mailing list. While the Notmuch project doesn't use +it, many other open source projects do. Having an easy way to get from a patch +email in your favorite mail client to the web page of the patch in the Patchwork +instance is a cool thing to have. Here's how to abuse the notmuch stash feature +to achieve this. (Don't know stash? See `notmuch-show-stash-mlarchive-link`, +bound to `c l` in `notmuch-show`.) + +The trick needed is turning the email Message-ID into a unique Patchwork ID +assigned by Patchwork. We'll use the `pwclient` command-line tool to achieve +this. You'll first need to get that working and configured for the Patchwork +instance you're using. That part is beyond this tip here; please refer to +Patchwork documentation. + +Check your configuration on the command-line, for example: + + /path/to/pwclient -p -n 5 -f "%{id}" + +Note that the -f format argument may require a reasonably new version of the +client. Once you have the above working, you can `M-x customize-variable RET +notmuch-show-stash-mlarchive-link-alist RET`. + +Add a new entry with "Function returning the URL:" set to: + + (lambda (message-id) + (concat "http://patchwork.example.com/patch/" + (nth 0 + (process-lines "/path/to/pwclient" "search" + "-p" "the-project" + "-m" (concat "<" message-id ">") + "-n" "1" + "-f" "%{id}")))) + +Replacing `http://patchwork.example.com/patch/`, `/path/to/pwclient`, and +`the-project` appropiately. You should now be able to stash the Patchwork URL +using `c l`. + +Going further, if the patch has been committed, you can get the commit hash with +this: + + (lambda (message-id) + (nth 0 + (process-lines "/path/to/pwclient" "search" + "-p" "the-project" + "-m" (concat "<" message-id ">") + "-n" "1" + "-f" "%{commit_ref}"))) + +And finally, if the project has a web interface to its source repository, you +can turn the commit hash into a URL pointing there, for example: + + (lambda (message-id) + (concat "http://cgit.example.com/the-project/commit/?id=" + (nth 0 + (process-lines "/path/to/pwclient" "search" + "-p" "the-project" + "-m" (concat "<" message-id ">") + "-n" "1" + "-f" "%{commit_ref}"))))