jaromail

a commandline tool to easily and privately handle your e-mail
git clone git://parazyd.org/jaromail.git
Log | Files | Refs | Submodules | README

commit 82e4069c80174893eed77c7355b263cb790d75ae
parent b8a9447fd7a805d1affc386d7420ec953d6834a1
Author: Jaromil <jaromil@dyne.org>
Date:   Fri, 15 Apr 2016 11:45:38 +0200

dropped alot for mutt-kz, which is now detected and activated

Diffstat:
Mbuild/build-gnu.sh | 13+++++++++++--
Msrc/jaro | 38++++++++++++++++----------------------
Msrc/mutt/formats | 3++-
Msrc/zlibs/email | 19++++++++++++++++++-
Msrc/zlibs/filters | 6++++++
Msrc/zlibs/helpers | 65++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
Msrc/zlibs/maildirs | 2+-
Msrc/zlibs/stats | 13+++++++------
8 files changed, 113 insertions(+), 46 deletions(-)

diff --git a/build/build-gnu.sh b/build/build-gnu.sh @@ -33,7 +33,7 @@ debian_req() { case $distro in debian) deps=(fetchmail msmtp mutt pinentry-curses) - deps+=(wipe notmuch sqlite3 alot abook elinks) + deps+=(wipe notmuch sqlite3 abook elinks) deps+=(gcc make libglib2.0-dev) print "Building on Debian" @@ -54,7 +54,6 @@ debian_req() { which wipe || sudo yum install wipe which abook || sudo yum install abook which notmuch || sudo yum install notmuch - which alot || sudo yum install alot print "Checking build dependencies" which gcc || sudo yum install gcc @@ -80,6 +79,16 @@ debian_req() { print "All dependencies installed" } +[[ "$target" = "mutt-kz" ]] && { + pushd src/mutt-kz + print "Compiling Mutt patched for notmuch ... " + print + ./configure --enable-notmuch --enable-sidebar --enable-hcache --enable-gpgme --enable-imap --enable-pop && + make + popd + print OK +} + { test "$target" = "fetchaddr" } || { test "$target" = "all" } && { pushd src diff --git a/src/jaro b/src/jaro @@ -22,7 +22,7 @@ # this source code; if not, write to: # Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -VERSION=4.2 +VERSION=4.3-dev DATE=Apr/2016 JAROMAILEXEC=$0 @@ -896,37 +896,31 @@ EOF # ;; *) # unknown command, pass it to autostart func "no command, autostart" - + func "subcommand: $subcommand" + if [[ "$subcommand" = "__default" ]]; then + open_folder + exitcode=$? # argument passed: determine if an email - if isemail "$subcommand"; then + elif isemail "$subcommand"; then notice "Composing message to: ${@}" # its an email, TODO see if we have it in our addressbook _mutt ${=@} exitcode=0 # or a directory of file - elif [[ -r "$subcommand" ]]; then + elif maildircheck "$subcommand"; then # is it a maildir? then open - maildircheck ${subcommand} - [[ $? = 0 ]] && { - _mutt -f ${subcommand} - exitcode=0 - } - # is it a regular file? then attach it - [[ -f "$subcommand" ]] && { + open_folder "$subcommand" + exitcode=$? + elif maildircheck "$MAILDIRS/$subcommand"; then + open_folder "$MAILDIRS/$subcommand" + exitcode=$? + elif [[ -f "$subcommand" ]]; then + # is it a regular file? then ;attach it _mutt -a ${=@} exitcode=0 - } - # or the name of a folder in Jaro Mail - elif [[ -r "$MAILDIRS/$subcommand" ]]; then - maildircheck "$MAILDIRS/$subcommand" && { - notice "Opening folder ${subcommand=}" - _mutt -f "$MAILDIRS/${subcommand}" - exitcode=0 - } else - - # just open mutt on first unread folder - _mutt -Z + # just open; mutt on first unread folder + open_folder exitcode=$? fi diff --git a/src/mutt/formats b/src/mutt/formats @@ -12,7 +12,8 @@ set folder_format="%N %3C %d %2l (%5s) %f" set message_format="From: <%a>, Sub: %s" -set index_format="%?M?_%M_ ?%Z %2C %.13d (%-$FCOL.${FCOL}F) %-$SCOL.${SCOL}s %?M?_%M_&(%c/%l?" +# set index_format="%?M?_%M_ ?%Z %2C %.13d (%-$FCOL.${FCOL}F) %-$SCOL.${SCOL}s %?M?_%M_&(%c/%l?" +set index_format="%2C %Z %?GI?%GI& ? %[%d/%b] %-16.16F (%4c) %?M?(%3M)& ? %s %>" set pager_format="%Z %C/%m %d (%F) %s (%c/%l) %|-" diff --git a/src/zlibs/email b/src/zlibs/email @@ -574,6 +574,23 @@ set imap_pass = "${password}" # set imap_peek = yes EOF unset password + + # when peeking and using mutt-kz use the sidebar + is_mutt_kz && { + cat <<EOF > "$MAILDIRS/.mutt/notmuch" +set sidebar_width = 25 +set sidebar_visible = yes + +color sidebar_new white default +color progress default magenta + +bind index p sidebar-prev +bind index n sidebar-next +bind index <space> sidebar-open +bind index S sidebar-toggle +EOF + } + # when peeking don't mark unread messages as Old # and sort date received with no threading (latest up) # also set the spoolfile name to INBOX (imap's default) @@ -590,7 +607,7 @@ EOF sched +3 " rm -f $MAILDIRS/.mutt/muttpass touch $MAILDIRS/.mutt/muttpass -${=rm} -f $tmp" # zero the tmp passfile after a second +${=rm} -f $_pass_tmp" # zero the tmp passfile after a second _mutt -f ${iproto}://${ilogin}@${imap}:${imap_port}/${folder} diff --git a/src/zlibs/filters b/src/zlibs/filters @@ -537,6 +537,9 @@ source '$MAILDIRS/.mutt/muttpass' # mailboxes in order of priority source '$MAILDIRS/.mutt/mboxes' + +# extra settings for mutt-kz (notmuch enabled) +source '$MAILDIRS/.mutt/notmuch' EOF @@ -599,6 +602,9 @@ EOF # this one is empty and sources files in temp when necessary rm -f "$MAILDIRS/.mutt/muttpass" touch "$MAILDIRS/.mutt/muttpass" + rm -f "$MAILDIRS/.mutt/notmuch" + touch "$MAILDIRS/.mutt/notmuch" + # just the header, will be completed later rm -f $MAILDIRS/.mutt/mboxes diff --git a/src/zlibs/helpers b/src/zlibs/helpers @@ -220,25 +220,64 @@ edit_file() { return $? } +is_mutt_kz() { + rm -f "$MAILDIRS/.mutt/notmuch" + touch "$MAILDIRS/.mutt/notmuch" + kz=`mutt -v | awk '/Configure options.*enable-notmuch/ { print $0 }'` + if [[ "$kz" = "" ]]; then + return 1 + else + act "Notmuch powered mutt-kz detected, enabling extra features" + return 0 + fi +} + ##################### ## Open a mail folder open_folder() { - notice "Opening folder ${PARAM[1]}" - - if maildircheck "${MAILDIRS}/${PARAM[1]}"; then - _mutt -f "$MAILDIRS/${PARAM[1]}" - exitcode=$? - - elif maildircheck "${PARAM[1]}"; then - _mutt -f "${PARAM[1]}" - exitcode=$? + notice "Opening folder: $*" + # parse if mutt-kz + + is_mutt_kz && { + # enable mutt-kz extra functions for notmuch integration + + cat <<EOF > "$MAILDIRS/.mutt/notmuch" +set sidebar_width = 25 +set sidebar_visible = yes + +color sidebar_new white default +color progress default magenta + +bind index p sidebar-prev +bind index n sidebar-next +bind index <space> sidebar-open +bind index S sidebar-toggle + +bind index / vfolder-from-query +bind pager / vfolder-from-query + +set index_format="%2C %Z %?GI?%GI& ? %[%d/%b] %-16.16F (%4c) %?M?(%3M)& ? %s %>" +# for tags at end of index add %?g?%g? +set virtual_spoolfile = yes +virtual-mailboxes \ +"INBOX" "notmuch://?query=tag:inbox" \ +" Today" "notmuch://?query= date:1d.. and tag:inbox" \ +" Last week" "notmuch://?query= date:1w.. and tag:inbox" \ +" Last month" "notmuch://?query=date:1M.. and tag:inbox" \ +\ +"ATTACHMENTS" "notmuch://?query=attachment:* and tag:inbox" \ +" Today" "notmuch://?query=attachment:* and date:1d.. and tag:inbox" \ +" Last week" "notmuch://?query=attachment:* and date:1w.. and tag:inbox" \ +" Last month" "notmuch://?query=attachment:* and date:1M.. and tag:inbox" +EOF + } + if [[ "$1" = "" ]]; then + _mutt -Z else - error "No maildir found: ${PARAM[1]}" - exitcode=1 - + _mutt -f "$1" fi - return $exitcode + return $? } ############## diff --git a/src/zlibs/maildirs b/src/zlibs/maildirs @@ -29,7 +29,7 @@ typeset -h formail_cache # no in all other cases maildircheck() { { test -r "$1" } || { - error "Maildir not existing: $1" + func "Maildir not existing: $1" return 1 } { test -w "$1" } || { error "Directory not writable: $1" diff --git a/src/zlibs/stats b/src/zlibs/stats @@ -67,10 +67,10 @@ stats() { folder*) _folder="" - + for i in `cat`; do _folder=${i[(ws:/:)-3]} - + # find maildir prefixes # pfx="${_folder[(ws:.:)1]}" # is it a new prefix? @@ -81,7 +81,8 @@ stats() { ;; *) - error "Stats type not specified" + error "Stats type not specified, available:" + error "domain, email, name, folder" return 1 ;; esac @@ -104,7 +105,7 @@ stats() { print " $v\t$sbar $k" done notice "Total: ${#count}" - + return 0 } @@ -206,7 +207,7 @@ EOF cat <<EOF >> $table </tbody> -</table> +</table> EOF cp $WORKDIR/.stats/visualize/header.html \ $WORKDIR/.stats/index.html @@ -230,7 +231,7 @@ EOF { test $? != 0 } && { error "Error creating temporary timecloud database." return 1 } - + for m in ${maildirs}; do for f in `${=find} $MAILDIRS/${m} -type f`; do timestamp=`fetchdate ${f} "%Y-%m-%d"`