[Unix] Maildir, mutt and vim

I'm a huge fan of mutt mail reader and Maildir.

My mutt spawn vim in console, and I can chat with anyone as fast, as in any faddish messenger.

Maildir is cool.

The following bash script I use to print info about new emails in Maildir (From and Subject):

#!/bin/bash
if [ ! -z "$(ls -A ~/Maildir/new/)" ]; then
    cat ~/Maildir/new/* | grep "^\(From\|Subject\):"
fi

(Adjust it to your folders.)

This script prints new email counts in each Maildir folder:

#!/bin/bash
cd ~/Maildir
find . -name new | sort |
while read LINE;
        do
        files=$(find "$LINE" -type f -name '*' -print | wc -l)
        if [ "$files" != "0" ]; then
                echo $LINE - $files | sed 's/\/new//g'
        fi
done

Sample result:

./.Archives - 4
./.mail-lists - 2
./notifications - 1
./.SPAM - 8
./.Trash - 105

Now about mailing lists I'm subscribed to. Can I see a statistics, what today's trends are?

 % cd ~/Maildir/.mail-lists/cur

 % cat * | grep "^Subj"  | sort | uniq -c | sort -n

     10 Subject: Re: [Tinycc-devel] Unable to find include directories by tcc on
     12 Subject: Re: Any missed features?
     12 Subject: Re: [Tinycc-devel] manually inlining functions
     12 Subject: Re: [Tinycc-devel] [PATCH 3/3] stdatomic: stdatomic.h header
     12 Subject: Re: [Tinycc-devel] -Werror=X (but ugly)
     12 Subject: Re: [Tinycc-devel] x86_64 tcc doesn't set sign bit on NaNs
     13 Subject: Re: [Tinycc-devel] Outdated .def files
     14 Subject: Re: Check witness validity with benchexec?
     14 Subject: Re: Help testing release candidate / mc-4.8.27-rc1
     17 Subject: Re: [Tinycc-devel] [PATCH] stdatomic: ld/st/xchg/cmpxchg on simple
     21 Subject: Re: [Tinycc-devel] issues/questions with stddef.h which comes with
     24 Subject: Re: [Tinycc-devel] enforced immutability - proposed research project
     29 Subject: Re: [Tinycc-devel] Linking system dylibs on macOS 11+
     32 Subject: Re: [Tinycc-devel] Segfault on arm64 when making a function call
     53 Subject: [cwn] Attn: Development Editor, Latest OCaml Weekly News

What activity on github's projects I'm subscribed to?

 % cd ~/Maildir/.mail-lists/cur

 % cat * | grep "^To.*github"  | sort | uniq -c | sort -n

    229 To: sosy-lab/sv-benchmarks 
    238 To: 9fans/plan9port 
    328 To: MiniZinc/libminizinc 
    438 To: stp/stp 
    684 To: vprover/vampire 
    714 To: klee/klee 
   1301 To: tlaplus/tlaplus 
   2732 To: angr/angr 
   4455 To: Z3Prover/z3 
   5358 To: CVC4/CVC4 
   9311 To: diffblue/cbmc 
   9331 To: cvc5/cvc5 

 % cat * | grep "^Subj"  | sort | uniq -c | sort -n

     63 Subject: Re: [Z3Prover/z3] [Consolidated] soundness issues, invalid models,
     66 Subject: Re: [diffblue/cbmc] Adds documentation about function contracts
     67 Subject: Re: [vprover/vampire] Induction with recursive functions (#259)
     71 Subject: Re: [CVC4/CVC4] Optimizer for BitVectors (#6213)
     72 Subject: Re: [diffblue/cbmc] Allow checks to be performed inside quantifier
     78 Subject: Re: [diffblue/cbmc] Cache dereferences during symex to avoid
     86 Subject: Re: [Z3Prover/z3] [Consolidated] issues affecting
     97 Subject: Re: [Z3Prover/z3] [Consolidated] issues with
    104 Subject: Re: [CVC4/CVC4] Replace old sygus term reconstruction algorithm with
    109 Subject: Re: [diffblue/cbmc] Add support for assigns clauses on loops (#6249)
    119 Subject: Re: [CVC4/CVC4] Add Solver.java to the Java API (#6196)
    134 Subject: Re: [CVC4/CVC4] Refactor / reimplement statistics (#6162)
    137 Subject: Re: [Z3Prover/z3] Add move semantics to c++ api (#5156)
    141 Subject: [Z3Prover/z3] Pre-release Nightly - Nightly
    144 Subject: [aimacode/aima-exercises] Request to get Community solution for
    233 Subject: Re: [tlaplus/tlaplus] Trace explorer fixes and enhancements (#588)

Can you do this in your favorite email client? Or maybe google mail, god forbid me?

I also use mairix as a search engine for my Maildir emails. (The only issue with it is that it can't handle utf-8.)

I probably should upgrade to mu

Anyway, call this Python script from mutt ('|' (Pipe to command), then type ./search.py). The 'From' field of the email message you're currently at will be passed to the script:

#!/usr/bin/env python3

import fileinput, os

for line in fileinput.input():
    if line.startswith ("From:"):
        line=line.split()
        s=line[-1]
        if s[0]=='<' and s[-1]=='>':
            s=s[1:]
            s=s[:-1]
        print (s)
        os.system ("mairix -f ~/mail/.mairixrc tf:" + s)
        exit(0)

print ("Error, can't parse this: ",line)

Depending on mairix's config file, all your correspondence with that email will be gathered in 'Search' folder, which can be browsed in mutt.


List of my other blog posts. My company.

Yes, I know about these lousy Disqus ads. Please use adblocker. I would consider to subscribe to 'pro' version of Disqus if the signal/noise ratio in comments would be good enough.