From: Jesse Rosenthal Date: Wed, 12 May 2010 14:33:12 +0000 (-0400) Subject: Changed remote usage to reflect new caching script. X-Git-Url: https://git.cworth.org/git?p=notmuch-wiki;a=commitdiff_plain;h=31054bedc3cebcb7b2c44b87ca4b6e98296c6e2f Changed remote usage to reflect new caching script. --- diff --git a/remoteusage.mdwn b/remoteusage.mdwn index 7ca4940..337a2fc 100644 --- a/remoteusage.mdwn +++ b/remoteusage.mdwn @@ -35,9 +35,14 @@ 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: + +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 @@ -45,20 +50,55 @@ 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" + 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 + } - if [ $1 = "search" ]; then - OUT=`$SSH_BIN $USER@$HOST $NOTMUCH_REMOTE_BIN $@` - echo "$OUT" | while read line; do - echo "$line"; - sleep 0.1; - done + 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 - $SSH_BIN $USER@$HOST $NOTMUCH_REMOTE_BIN $@ + notmuch_run $@ fi Save this to a file, "remote-notmuch.sh", in your path. @@ -75,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: - - (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. +Now add the following, to overwrite the way in which notmuch gets raw +message text. + + (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"