X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=remoteusage.mdwn;h=337a2fc8f1520fe68b39e74927fcf7aef66e4f12;hb=31054bedc3cebcb7b2c44b87ca4b6e98296c6e2f;hp=0639c31bc1c038ec379318ccfa8e4aa34bb2e9fc;hpb=5b1a6635fa818d5a7f033419d557b939068c2c6d;p=notmuch-wiki diff --git a/remoteusage.mdwn b/remoteusage.mdwn index 0639c31..337a2fc 100644 --- a/remoteusage.mdwn +++ b/remoteusage.mdwn @@ -35,36 +35,72 @@ good page on how to set it up. if your connection is too slow, this won't be very pleasant to use, and certainly won't seem transparent.) -##Write a simple wrapper shell script## -Now we will need to write a simple shell script that replaces the -call to the notmuch binary with a call to notmuch over ssh. +##Write a wrapper shell script## +Now we will need to write a simple shell script that does two things: -Note that this shell script also pauses briefly after every ten search +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" - HOST="server_name" - NOTMUCH_REMOTE_BIN="/path/to/notmuch/on/server" - - if [ $1 = "search" ]; then - COUNT=0; - OUT=`$SSH_BIN $USER@$HOST $NOTMUCH_REMOTE_BIN $@` - echo "$OUT" | while read line; do - COUNT=`expr $COUNT + 1` - echo "$line"; - if [ $COUNT = 10 ]; then - sleep 0.1; - fi - done - else - $SSH_BIN $USER@$HOST $NOTMUCH_REMOTE_BIN $@ - fi - + #!/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 + OUT=$($SSH_BIN $USER@$SSH_HOST $NOTMUCH_REMOTE_BIN $@) + echo "$OUT" | while read line; do + echo "$line"; + sleep 0.1; + 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 @@ -79,23 +115,21 @@ Add the following to your .emacs (this is on your client machine): (setq notmuch-command "/path/to/your/remote-notmuch.sh") -At least until 0.3 or 0.4, you will also need to add the following. It -should become unnecessary pretty soon though: +Now add the following, to overwrite the way in which notmuch gets raw +message text. - (setq notmuch-remote-host "user_name@server_name") - - (defadvice notmuch-show-get-filename (around - notmuch-show-get-remote-filename - activate) - (setq ad-return-value (concat "/ssh:" - notmuch-remote-host - ":" - ad-do-it))) - -The purpose of these lines is to allow emacs to have access to the raw -files, via TRAMP, so that it can extract attachments and parse -HTML. Work is afoot to make notmuch handle these tasks itself, so this -part should soon be unecessary. + (defun notmuch-show-get-filename () + (let* ((orig-filename (notmuch-show-get-prop :filename)) + (retvalue (shell-command-to-string (concat + notmuch-command + " --get " + orig-filename)))) + (replace-regexp-in-string "\n" "" retvalue))) + +This will will use the "--get" option of the above +script. Note that it only has to do this for attachments or for +viewing the raw file, and only the first time. After that, it is +cached. ##A tip to speed things up## If you have openssh >= 0.4, you can make use of the "ControlMaster" @@ -107,7 +141,7 @@ Add the following to your ~/.ssh/config file: Host server_name ControlMaster auto - ControlPath ~/.ssh/master0%r@%h:%p + ControlPath ~/.ssh/master-%r@%h:%p You can also se the Host to "*", if you want to use it for all connections. I usually have an interactive ssh connection to my home