X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=emacstips.mdwn;h=f5b418c6700cec7588040ed85a4b80248ceb528e;hb=618ce49f078599b4616afaaedf98df6fdf7f9b80;hp=24ed641be39b9b0375a2957b5f7c14ba27349799;hpb=d8ec2b443ec10acda34c096650317947e2de65c1;p=notmuch-wiki diff --git a/emacstips.mdwn b/emacstips.mdwn index 24ed641..f5b418c 100644 --- a/emacstips.mdwn +++ b/emacstips.mdwn @@ -218,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 @@ -274,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 @@ -300,7 +362,7 @@ available: git clone https://github.com/aperezdc/notmuch-addrlookup-c cd notmuch-addrlookup-c make - + * The vala-based [addrlookup](http://github.com/spaetz/vala-notmuch) The addrlookup binary needs to be compiled. Grab @@ -318,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") @@ -352,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") @@ -401,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: @@ -479,9 +544,20 @@ The last two do the same thing. See also the **Usage:** section in `gnus-alias.el`. +## Multiple identities (and more) with message-templ + +Another option for multiple identities is +[message-templ](http://pivot.cs.unb.ca/git?p=message-templ.git;a=summary) +(also a available in marmalade). This provides roughly the same +facilities as wanderlust's template facility. + +See +[example.emacs.el](http://pivot.cs.unb.ca/git?p=message-templ.git;a=blob;f=example.emacs.el;hb=HEAD) +for some simple examples of usage. + ## 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" @@ -493,7 +569,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. @@ -523,7 +599,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 () @@ -552,7 +628,7 @@ 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) +[this patch from Mark Walters](https://notmuchmail.org/pipermail/notmuch/2012/010817.html) to add the `notmuch-show-filter-thread` function. 1. Add the following hook to your emacs configuration: @@ -624,22 +700,86 @@ refine, next hunk etc all work. "View the the current message as a patch." (interactive) (let* ((id (notmuch-show-get-message-id)) + (msg (notmuch-show-get-message-properties)) + (part (notmuch-show-get-part-properties)) (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) + (define-key map "q" 'notmuch-bury-or-kill-this-buffer) (switch-to-buffer buf) (let ((inhibit-read-only t)) (erase-buffer) (insert subject) - (insert (notmuch-get-bodypart-internal id 1 nil))) + (insert (notmuch-get-bodypart-text msg part 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) +and then this function needs to bound to `. d` in the keymap + + (define-key 'notmuch-show-part-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}"))))