use dialog to pick maildir if multiple exist
authorJohannes Weißl <jargon@molb.org>
Wed, 1 Dec 2010 05:36:10 +0000 (06:36 +0100)
committerJohannes Weißl <jargon@molb.org>
Wed, 1 Dec 2010 05:36:10 +0000 (06:36 +0100)
needs whiptail or dialog

muttjump

index f7f6586f8072b94630fdc747d465aa9c42d08733..efdfb207fd32470a9e1d63c2471f8b30a3cf92f5 100755 (executable)
--- a/muttjump
+++ b/muttjump
@@ -54,6 +54,8 @@ NMZMAIL=${NMZMAIL:-nmzmail}
 SCREEN=${SCREEN:-screen}
 FORMAIL=${FORMAIL:-formail}
 REFORMAIL=${REFORMAIL:-reformail}
 SCREEN=${SCREEN:-screen}
 FORMAIL=${FORMAIL:-formail}
 REFORMAIL=${REFORMAIL:-reformail}
+WHIPTAIL=${WHIPTAIL:-whiptail --noitem}
+DIALOG=${DIALOG:-dialog}
 
 function die () {
     echo -e >&2 "$0: $1"
 
 function die () {
     echo -e >&2 "$0: $1"
@@ -85,6 +87,13 @@ if ! is_callable $MUTT ; then
     die "$MUTT is not in PATH, set MUTT variable"
 fi
 
     die "$MUTT is not in PATH, set MUTT variable"
 fi
 
+DIALOG_PROG=""
+if is_callable $WHIPTAIL ; then
+    DIALOG_PROG=$WHIPTAIL
+elif is_callable $DIALOG ; then
+    DIALOG_PROG=$DIALOG
+fi
+
 case $MUTTJUMP_MODE in
     limit|search)
         ;;
 case $MUTTJUMP_MODE in
     limit|search)
         ;;
@@ -109,20 +118,18 @@ msgid_clean=$(echo "$msgid" | sed 's/^<\(.*\)>$/\1/')
 # try to locate path of message using a mail search engine
 case $MUTTJUMP_INDEXER in
     mairix)
 # try to locate path of message using a mail search engine
 case $MUTTJUMP_INDEXER in
     mairix)
-        orig_msgfile=$($MAIRIX -r "m:$msgid_clean" | head -n1)
+        orig_msgfiles=$($MAIRIX -r "m:$msgid_clean")
         ;;
     mu)
         ;;
     mu)
-        orig_msgfile=$($MU find -f l "i:$msgid_clean" |
-            grep -v "^\*\*" | head -n1)
+        orig_msgfiles=$($MU find -f l "i:$msgid_clean" | grep -v "^\*\*")
         ;;
     mu-old)
         ;;
     mu-old)
-        orig_msgfile=$($MU find -f p "m:$msgid_clean" | head -n1)
+        orig_msgfiles=$($MU find -f p "m:$msgid_clean")
         ;;
     nmzmail)
         nmzmail_results=$(mktemp -d)
         ;;
     nmzmail)
         nmzmail_results=$(mktemp -d)
-        echo "+message-id:$msgid" | $NMZMAIL -n 1 -r "$nmzmail_results"
-        msgfile=$(find "$nmzmail_results" -type l | head -n1)
-        orig_msgfile=$(readlink "$msgfile")
+        echo "+message-id:$msgid" | $NMZMAIL -r "$nmzmail_results"
+        orig_msgfiles=$(find "$nmzmail_results" -type l -exec readlink {} \;)
         rm -rf "$nmzmail_results"
         ;;
     "")
         rm -rf "$nmzmail_results"
         ;;
     "")
@@ -133,12 +140,24 @@ case $MUTTJUMP_INDEXER in
         ;;
 esac
 
         ;;
 esac
 
-if [ -z "$orig_msgfile" -o ! -e "$orig_msgfile" ] ; then
+if [ -z "$orig_msgfiles" ] ; then
     die "no message with msgid $msgid found!"
 fi
 
     die "no message with msgid $msgid found!"
 fi
 
-# get containing maildir of $orig_msgfile
-orig_maildir=$(dirname "$(dirname "$orig_msgfile")")
+count=$(echo "$orig_msgfiles" | wc -l)
+if [ $count -gt 1 -a -n "$DIALOG_PROG" ] ; then
+    choices=$(echo "$orig_msgfiles" | while read line ;
+        do echo -e "$(dirname "$(dirname "$line")")\n." ; done)
+    maxwidth=$(echo "$choices" | wc -L)
+    orig_maildir=$($DIALOG_PROG --clear --title "More than one mailbox found" \
+        --menu "Select mailbox:" $((count+8)) $((maxwidth+16)) \
+        $count $choices 3>&2 2>&1 1>&3-)
+else
+    orig_msgfile=$(echo "$orig_msgfiles" | head -n1)
+    # get containing maildir of $orig_msgfile
+    orig_maildir=$(dirname "$(dirname "$orig_msgfile")")
+fi
+
 if [ ! -d "$orig_maildir/cur" ] ; then
     die "directory $(quote "$orig_maildir") doesn't exist or is no Maildir"
 fi
 if [ ! -d "$orig_maildir/cur" ] ; then
     die "directory $(quote "$orig_maildir") doesn't exist or is no Maildir"
 fi

Benjamin Mako Hill || Want to submit a patch?