-1. a working notmuch on one computer (let's call that computer
-"server"). The notmuch should be at least version 0.2.
-2. a working notmuch emacs interface on another computer (let's call
-that computer "client")
-3. password-free login (public key authentication) from client to
-server. [Here](http://sial.org/howto/openssh/publickey-auth/) is a
-good page on how to set it up.
-4. a reasonably fast connection. (This isn't really *neccessary*, but
-if your connection is too slow, this won't be very pleasant to use,
-and certainly won't seem transparent.)
-
-##Write a wrapper shell script##
-
-/!\ From reading about `notmuch show --format=raw` in the 0.5 (2010-11-11)
-release's *New command-line features* section of the `NEWS` file, it appears to
-me that step *2.* is no longer needed, and this whole procedure can be
-simplified a lot. But I haven't tested / confirmed this yet.
-
-Now we will need to write a simple shell script that does two things:
-
-1. replaces the call to the notmuch binary with a call to notmuch
-over ssh.
-2. offers, via the "--get" option, a utility for downloading raw
-message text over scp (this is necessary for attachments) and
-caching for future use.
-
-Note that this shell script also pauses briefly after every message
-entries. This is currently necessary so that the emacs process-filter
-doesn't chop off messages. It's an obvious hack, and hopefully won't
-be necessary in the furture.
-
- #!/usr/bin/env bash
- SSH_BIN="/path/to/ssh/on/client"
- USER="user_name"
- SSH_HOST="server_name"
- NOTMUCH_REMOTE_BIN="/path/to/notmuch/on/server"
- CACHE="${HOME}/.notmuch-cache.d"
-
- notmuch_run ()
- {
- if [ $1 = "search" ]; then
- $SSH_BIN $USER@$SSH_HOST $NOTMUCH_REMOTE_BIN $@ | while read line; do
- sleep 0.1
- echo "${line}"
- done
- else
- $SSH_BIN $USER@$SSH_HOST $NOTMUCH_REMOTE_BIN $@
- fi
- }
-
- check_for_file_name ()
- {
- [ -f "${CACHE}/${1}" ]
- }
-
- fetch_file ()
- {
- FILE_DIR="${CACHE}/$(dirname ${1})"
- [ -d "${FILE_DIR}" ] || mkdir -p "${FILE_DIR}"
- scp ${SSH_HOST}:${1} "${FILE_DIR}" > /dev/null 2>&1
- retcode="${?}"
- if [ "${retcode}" -ne "0" ]; then
- echo "Failed to fetch file" 1>&2
- exit ${retcode}
- fi
- }
-
- notmuch_get ()
- {
- [ -d "${CACHE}" ] || mkdir -p "${CACHE}"
-
- check_for_file_name ||
- fetch_file ${1} &&
- printf "${CACHE}/${1}\n"
- }
-
- if [ ${1} = "--get" ]; then
- notmuch_get $2
- else
- notmuch_run $@
- fi
-
-Save this to a file, "remote-notmuch.sh", in your path.
-
-Now you can run "remote-notmuch.sh new". You can call the script
-anything you like. If you don't have a notmuch instance on your client
-computer, you can even call it "notmuch" and have totally transparent
-usage. (Since I run "new" from an emacs keybinding, I've never
-bothered with this renaming.)
-
-##Configure your emacs client##
-
-Add the following to your .emacs (this is on your client machine):
+1. a working notmuch and `sshd` on one computer (let's call that
+computer "server").
+
+2. a working notmuch emacs interface (of the same version as on the
+server), `bash`, and `ssh` on another computer (let's call that computer
+"client")
+
+3. password-free login (public key authentication) from client to
+server. [Here](http://www.debian-administration.org/articles/152) is a
+good page on how to set it up (*).
+
+4. a reasonably fast connection. (This isn't really *necessary*, but if
+your connection is too slow, this won't be very pleasant to use, and
+certainly won't seem transparent.)
+
+(*) If you don't want / cannot use password-free login,
+[[This|remoteusage/aboriginal]] page provides yet another alternative.
+
+## Configure `ssh` on the client computer ##
+
+Add this to your `~/.ssh/config`:
+
+ Host notmuch
+ HostName example.com
+ User remoteuser
+ ControlMaster auto
+ ControlPath ~/.ssh/master-%h@%p:%r
+ ControlPersist 15m
+ IdentityFile ~/.ssh/example.com.id_rsa
+
+Replace `example.com` with your server. Replace `remoteuser` with the
+username on the server.
+
+The `Control*` options keep the connection open in the background to not
+require authentication every time. The `ControlPersist` option defines
+the connection timeout. These aren't strictly necessary, but reduce
+latency.
+
+The `IdentityFile` option may not be necessary depending on how you set
+up public key authentication. This assumes you set up a separate key;
+set the filename accordingly.
+
+Please refer to `ssh_config(5)` man page for details.
+
+## Set up a wrapper shell script on the client computer ##
+
+Save this to a file, for example `remote-notmuch.sh`, in your `PATH`:
+
+ #!/bin/bash
+ printf -v ARGS "%q " "$@"
+ exec ssh notmuch notmuch ${ARGS}
+
+and give it execute permissons: `chmod +x remote-notmuch.sh`
+
+Now you can run `remote-notmuch.sh new`, or other notmuch commands. You
+can call the script anything you like. (You could also call it `notmuch`
+or symlink `~/bin/notmuch` to it for transparent usage.)
+
+## Configure Emacs on the client computer ##
+
+Add this to your `~/.emacs` to tell the Emacs client to use the wrapper
+script: