]> git.cworth.org Git - notmuch-wiki/blobdiff - emacstips.mdwn
new file: news/release-0.21.mdwn
[notmuch-wiki] / emacstips.mdwn
index 7724e0bd13e1fa5ac938830b2c517321120690e6..b158c6d042498eec9d2bbb39015e016c239e871b 100644 (file)
 [[!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.
-
-### <span id="notmuch_init_file"> Notmuch Emacs configuration file: </span>
-
-(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-variable<RET>message-kill-buffer-on-exit<RET>`)
-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-variable<RET>mml-dnd-attach-options<RET>`) 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 <max.monster@example.com>"))
+           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
@@ -392,9 +295,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:
@@ -493,6 +401,9 @@ 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:
@@ -735,3 +646,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 <the-project> -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}"))))