X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=emacstips.mdwn;h=47f53e51e6e3d9f827d6e8c4c185810f2d3f5f55;hb=4dd17aeef3ee8db115690c23243bb4510ff416de;hp=11495b2f98add6a1cd45b3f154c584581f1ba1d9;hpb=b989c29efb33a1f4db6322f7b50a9dc919cd1699;p=notmuch-wiki diff --git a/emacstips.mdwn b/emacstips.mdwn index 11495b2..47f53e5 100644 --- a/emacstips.mdwn +++ b/emacstips.mdwn @@ -18,7 +18,7 @@ or to your .emacs file. -## Controlling external handlers for attachements +## Controlling external handlers for attachments You can choose e.g. which pdf viewer to invoke from notmuch-show mode by adding a .mailcap file in your home directory. Here is an example: @@ -372,7 +372,7 @@ available: cc -o addrlookup addrlookup.c `pkg-config --cflags --libs gobject-2.0` -lnotmuch * 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 + This tools maintains its 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/) @@ -437,7 +437,7 @@ address. ## How to sign/encrypt messages with gpg -Messages can by signed using gpg by invoking +Messages can be 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 `C-c C-m s p` and `C-c C-m c p`. To sign outgoing mail by default, use the @@ -455,6 +455,42 @@ Alternatively, you may prefer to use `mml-secure-message-sign-pgpmime` instead of `mml-secure-sign-pgpmime` to sign the whole message instead of just one part. +If you want to automatically encrypt outgoing messages if the keyring +contains a public key for every recipient, you can add something like +that to your `.emacs` file: + + (defun message-recipients () + "Return a list of all recipients in the message, looking at TO, CC and BCC. + + Each recipient is in the format of `mail-extract-address-components'." + (mapcan (lambda (header) + (let ((header-value (message-fetch-field header))) + (and + header-value + (mail-extract-address-components header-value t)))) + '("To" "Cc" "Bcc"))) + + (defun message-all-epg-keys-available-p () + "Return non-nil if the pgp keyring has a public key for each recipient." + (require 'epa) + (let ((context (epg-make-context epa-protocol))) + (catch 'break + (dolist (recipient (message-recipients)) + (let ((recipient-email (cadr recipient))) + (when (and recipient-email (not (epg-list-keys context recipient-email))) + (throw 'break nil)))) + t))) + + (defun message-sign-encrypt-if-all-keys-available () + "Add MML tag to encrypt message when there is a key for each recipient. + + Consider adding this function to `message-send-hook' to + systematically send encrypted emails when possible." + (when (message-all-epg-keys-available-p) + (mml-secure-message-sign-encrypt))) + + (add-hook 'message-send-hook #'message-sign-encrypt-if-all-keys-available + ### Troubleshooting message-mode gpg support - If you have trouble with expired subkeys, you may have encountered @@ -544,6 +580,17 @@ 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-emacs#notmuch_init_file) to be able @@ -617,7 +664,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: @@ -671,6 +718,13 @@ In Debian and derivatives, (add-to-list 'load-path "/usr/share/org-mode/lisp") +In NixOS, using `emacsWithPackages (epkgs: [ epkgs.orgPackages.org-plus-contrib ])`, + + (loop for p in load-path + do (if (file-accessible-directory-p p) + (let ((m (directory-files-recursively p "^org-notmuch.el$"))) + (if m (add-to-list 'load-path (file-name-directory (car m))))))) + Then (require 'org-notmuch) @@ -689,25 +743,27 @@ 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 +and then this function needs to bound to `. d` in the keymap - (define-key 'notmuch-show-mode-map "D" 'my-notmuch-show-view-as-patch) + (define-key 'notmuch-show-part-map "d" 'my-notmuch-show-view-as-patch) ## Interfacing with Patchwork @@ -745,7 +801,7 @@ Add a new entry with "Function returning the URL:" set to: "-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 +`the-project` appropriately. 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 @@ -770,3 +826,16 @@ can turn the commit hash into a URL pointing there, for example: "-m" (concat "<" message-id ">") "-n" "1" "-f" "%{commit_ref}")))) + +## Never forget attachments + +Very often we forget to actually attach the file when we send an email +that's supposed to have an attachment. Did this never happen to you? +If not, then it will. + +There is a hook out there that checks the content of the email for +keywords and warns you before the email is sent out if there's no +attachment. This is currently work in progress, but you can already +add the hook to your `~/.emacs.d/notmuch-config.el` file to test +it. Details available (and feedback welcome) in the [relevant +discussion](https://notmuchmail.org/pipermail/notmuch/2018/026414.html).