]> git.cworth.org Git - notmuch-wiki/commitdiff
Changed remote usage to reflect new caching script.
authorJesse Rosenthal <jrosenthal@jhu.edu>
Wed, 12 May 2010 14:33:12 +0000 (10:33 -0400)
committerJesse Rosenthal <jrosenthal@jhu.edu>
Wed, 12 May 2010 14:33:12 +0000 (10:33 -0400)
remoteusage.mdwn

index 7ca4940f8a7e32989fde3de0bcd73c09d186295c..337a2fc8f1520fe68b39e74927fcf7aef66e4f12 100644 (file)
@@ -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.)
 
 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
 
 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
 be necessary in the furture.
 
     #!/usr/bin/env bash
-    
     SSH_BIN="/path/to/ssh/on/client"
     USER="user_name"
     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"
     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
     else
-        $SSH_BIN $USER@$HOST $NOTMUCH_REMOTE_BIN $@
+        notmuch_run $@
     fi
        
 Save this to a file, "remote-notmuch.sh", in your path.
     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")
 
 
     (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"
 
 ##A tip to speed things up##
 If you have openssh >= 0.4, you can make use of the "ControlMaster"