X-Git-Url: https://git.cworth.org/git?p=notmuch-wiki;a=blobdiff_plain;f=emacstips.mdwn;h=58641771798bd3f61bb34bd8b6bf7613f4f8fb77;hp=3bf06fd7f5939dc5750f78a10013f04b2f6e6436;hb=219490b75a85ca18d449168575a0c7538e71612e;hpb=116177d39d3b332911c143f073d0275b23e3a07a diff --git a/emacstips.mdwn b/emacstips.mdwn index 3bf06fd..5864177 100644 --- a/emacstips.mdwn +++ b/emacstips.mdwn @@ -6,7 +6,7 @@ Emacs Interface|notmuch-emacs]] page for basics. [[!toc levels=2]] -## Issues with Emacs 24 +## Issues with Emacs 24 (unsupported since notmuch 0.31 (2020-09-05)) If notmuch-show-mode behaves badly for you in emacs 24.x try adding one of @@ -26,6 +26,53 @@ 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 +### Convert ".pdf" and ".docx" to text and pop to buffer + +Add the following (hacky but effective!) code to `.emacs.d/notmuch-config.el`; +the overwritten `defcustom` will change action when pressing RET on top of an +attachment; ".pdf" and ".docx" attachments are converted to text (using +"pdf2text" and "docx2txt.pl" commands to do the conversion), saving to file +(the default action of `notmuch-show-part-button-default-action`) is offered +to attachments of other types. + + (defun user/mm-pipe-- (handle cmd) + ;; conveniently, '-' '-' a args to pdftotext and docx2txt.pl work fine + ;; fixme: naming inconsistency (fn name and buffer name) + (let ((buffer (get-buffer-create "*attachment-to-text*"))) + (with-current-buffer buffer + (setq buffer-read-only nil) + (erase-buffer)) + (with-temp-buffer + ;; "based on mm-pipe-part in mm-decode.el" + (mm-with-unibyte-buffer + (mm-insert-part handle) + (mm-add-meta-html-tag handle) + (let ((coding-system-for-write 'binary)) + (call-process-region (point-min) (point-max) + cmd nil buffer nil "-" "-")))) + (pop-to-buffer buffer) + (goto-char (point-min)) + (text-mode) + (visual-line-mode) + (view-mode))) + + (defun user/notmuch-show-pop-attachment-to-buffer () + ;; "based on notmuch-show-apply-to-current-part-handle" + (interactive) + (let ((handle (notmuch-show-current-part-handle))) + ;;(message "%s" handle) + (unwind-protect + (pcase (car (nth 1 handle)) + ("application/pdf" + (user/mm-pipe-- handle "pdftotext")) + ("application/vnd.openxmlformats-officedocument.wordprocessingml.document" + (user/mm-pipe-- handle "docx2txt.pl")) + (_ (notmuch-show-save-part))) + (kill-buffer (mm-handle-buffer handle))))) + + (setq notmuch-show-part-button-default-action + #'user/notmuch-show-pop-attachment-to-buffer) + ## Overwriting the sender address If you want to always use the same sender address, then the following @@ -94,7 +141,7 @@ above. To get this behaviour on 0.17+ do the following: (define-key notmuch-search-mode-map "S" (lambda (&optional beg end) "mark thread as spam" - (interactive (notmuch-search-interactive-region)) + (interactive (notmuch-interactive-region)) (notmuch-search-tag (list "+spam" "-inbox") beg end))) The analogous functionality in notmuch-tree is currently missing. @@ -252,7 +299,7 @@ an external browser. This can be done by `(notmuch-show-view-part)`, bound to This command will try to view the message part the point is on with an external viewer. The mime-type of the part will determine what viewer will be used. Typically a 'text/html' part will be send to your -browser. +browser. The configuration for this is kept in so called `mailcap` files. (typically the file is `~/.mailcap` or `/etc/mailcap`) If the @@ -459,8 +506,17 @@ address. 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 -`message-setup-hook` in your `.emacs` file: +`C-c C-m s p` and `C-c C-m c p`. + +In Emacs 28 you will be asked whether to sign the message using the +sender and are offered to remember your choice. In Emacs 27 you will +get a slightly misleading error and have to manually add the following +line to you init file. Older Emacsen just do this unconditionally. + + (setq mml-secure-openpgp-sign-with-sender t) + +To sign outgoing mail by default, use the `message-setup-hook` in your +init file: ;; Sign messages by default. (add-hook 'message-setup-hook 'mml-secure-sign-pgpmime) @@ -583,8 +639,8 @@ Here is an example configuration. ;; 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")) + (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) @@ -608,12 +664,12 @@ 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) +[message-templ](http://git.tethera.net/message-templ.git) (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) +[example.emacs.el](https://git.tethera.net/message-templ.git/tree/example.emacs.el) for some simple examples of usage. ## Resending (or bouncing) messages @@ -747,16 +803,29 @@ 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$"))) + (let ((m (directory-files-recursively p "^ol-notmuch.el$"))) (if m (add-to-list 'load-path (file-name-directory (car m))))))) Then - (require 'org-notmuch) + (require 'ol-notmuch) In general it is nice to have a key for org-links (not just for notmuch). For example - (define-key global-map "\C-cl" 'org-store-link) + (define-key global-map "\C-c l" 'org-store-link) + +If you're using `use-package` the package can be loaded using the following: + +```emacs-lisp +(use-package ol-notmuch + :ensure t + :bind + ("C-c l" . org-store-link)) +``` + +Note the package was renamed from `org-notmuch` to `ol-notmuch` in recent +versions of org-mode. If you're using an old version of notmuch you might want +to `(require 'org-notmuch)` instead. ## Viewing diffs in notmuch @@ -864,3 +933,37 @@ 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). + +## Applying patches to git repositories + +The `notmuch-extract-thread-patches` and +`notmuch-extract-message-patches` commands from the `elpa-mailscripts` +package in Debian (and its derivatives) can do this for you. + +## Allow content preference based on message context + +The preference for which sub-part of a multipart/alternative part is shown is +globally set. For example, if you prefer showing the html version over the text +based, you can set: + + (setq notmuch-multipart/alternative-discouraged '("text/plain" "text/html")) + +However, sometimes you might want to adapt your preference depending on the +context. You can override the default settings on a per-message basis by +providing a function that has access to the message and which returns the +discouraged type list. For example: + + (defun my/determine-discouraged (msg) + (let* ((headers (plist-get msg :headers)) + (from (or (plist-get headers :From) ""))) + (cond + ((string-match "whatever@mail.address.com" from) + '("text/plain")) + (t + '("text/html" "multipart/related"))))) + + (setq notmuch-multipart/alternative-discouraged + 'my/determine-discouraged) + +This would discourage text/html and multipart/related generally, but discourage +text/plain should the message be sent from whatever@mail.address.com.