#!/bin/zsh #dep:perl notify-send DEFAULT=raw ICON=/usr/share/icons/Adwaita/48x48/actions/mail-message-new.png opt() { if [ -n "$1" ]; then return 0 else return 1 fi } contains() { arr=$1 value=$2 [[ ${${(P)arr}[(ie)$value]} -lt ${#${(P)arr}} ]] } zparseopts -D -E h=help -help=help \ r=raw -raw=raw \ n=number -number=number \ p=pretty -pretty=pretty if [ -n "$help" ]; then cat <<HELP Usage: newmails [OPTIONS] [MAILDIR] Options: -h --help Show this help -r --raw Show full paths to new mail files (default) -n --number Only show number of new mails -p --pretty Show formatted output of new mails (TODO) HELP exit 0 fi local md=${MAILDIR:-${MAIL:-$HOME/Mail}} local cache=${XDG_CACHE_HOME:-$HOME/.cache}/seen-mails newmails=$(find $md/ -type f -a \ \( -regex ".*:2,[PRTDF]*" \) -exec realpath \{\} \;) decode(){ perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | \ sed -e 's/&/\&/' -e 's/</\</' -e 's/>/\>/' } from() { formail -zcb -xFrom | tail -n 1 | decode } subject() { formail -zcb -xSubject | decode } if opt $number; then echo -n $newmails | wc -l exit 0 fi if opt $pretty; then touch $cache seen=$(<$cache) truncate --size 0 $cache notify-send --icon=$ICON "$( echo -n $newmails | while read mail; do if ! contains seen $mail; then echo -n "<b>$(from < $mail):</b> $(subject < $mail)<br>" fi echo $mail >> $cache done )" exit 0 fi #otherwise echo -n $newmails