X-Git-Url: https://git.cworth.org/git?p=notmuch-wiki;a=blobdiff_plain;f=emacstips.mdwn;h=58641771798bd3f61bb34bd8b6bf7613f4f8fb77;hp=dade16927418fc64d67c5ed6036db5c6bf95a25e;hb=HEAD;hpb=bd9116b218d3e1b6f796e03fb5113b3c6187d985 diff --git a/emacstips.mdwn b/emacstips.mdwn index dade169..288690c 100644 --- a/emacstips.mdwn +++ b/emacstips.mdwn @@ -1,129 +1,75 @@ [[!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. - -## Attaching files - -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. - -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. - -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.) - - #!/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)" - -## 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. - ------ - -# Advanced tips and tweaks +## 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: + + 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 +defadvice can help you. + + (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 @@ -183,7 +129,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. @@ -245,11 +191,15 @@ reply-to-all. Here's how to swap the reply to sender/all bindings in show mode: (define-key notmuch-show-mode-map "r" 'notmuch-show-reply) (define-key notmuch-show-mode-map "R" 'notmuch-show-reply-sender) -And in search mode: +In search mode: (define-key notmuch-search-mode-map "r" 'notmuch-search-reply-to-thread) (define-key notmuch-search-mode-map "R" 'notmuch-search-reply-to-thread-sender) +And in tree mode: + + (define-key notmuch-tree-mode-map "r" (notmuch-tree-close-message-pane-and #'notmuch-show-reply)) + (define-key notmuch-tree-mode-map "R" (notmuch-tree-close-message-pane-and #'notmuch-show-reply-sender)) ## How to do FCC/BCC... @@ -278,6 +228,11 @@ address. Please see the documentation for the variable `notmuch-fcc-dirs` in the customization window for how to arrange this. +The `notmuch-fcc-dirs` variable is only taken into account when mails +are composed using `notmuch-mua-mail`. If you want to use the notmuch +mail user agent by default, the `mail-user-agent` needs to be +customized to use the `notmuch-user-agent`. + ## How to customize `notmuch-saved-searches` When starting notmuch, a list of saved searches and message counts is @@ -307,7 +262,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 @@ -326,51 +281,28 @@ useful to you. ## Viewing HTML messages with an external viewer -The emacs client can display an HTML message inline using either the -`html2text` library or some text browser, like w3m or lynx. This is -controlled by the `mm-text-html-renderer` variable. +The Emacs client can generally display HTML messages inline using one of the +supported HTML renderers. This is controlled by the `mm-text-html-renderer` +variable. -The first option is theorically better, because it can generate -strings formatted for emacs and do whatever you want, e.g., substitute -text inside <b> tags for bold text in the buffer. The library, however -is still in a very early development phase and cannot yet process -properly many elements, like tables and