]> git.cworth.org Git - notmuch-wiki/blobdiff - remoteusage.mdwn
remoteusage: Can this be simplified with the 0.5 release?
[notmuch-wiki] / remoteusage.mdwn
index 0639c31bc1c038ec379318ccfa8e4aa34bb2e9fc..a585bd776cf3494bc9e371071d86acb5b37f97e9 100644 (file)
@@ -35,36 +35,77 @@ 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##
 
-Note that this shell script also pauses briefly after every ten search
+/!\ 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"
-       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
+            $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
@@ -79,23 +120,22 @@ 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 (progn 
+                         (message "Downloading... ")
+                         (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 +147,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
@@ -125,15 +165,3 @@ mismatches between normal usage and this sort of usage. If you're
 using this approach and run into any problems, please feel free to
 list them here. And, of course, if you improve on any of these
 approaches, please do edit this page and let people know!
-                               
-                               
-
-
-
-    
-
-       
-
-
-