5.3 KiB
mu-guile: guile-bindings for mu
Starting from version 0.9.7, mu
had early, experimental bindings for the
GNU/Guile programming language, which is a version of the Scheme programming
language, specifically designed for extending existing programs.
mu
version 0.9.8 has much improved bindings, and they are documented, with
many examples. You can find more examples in the guile/examples
directory of
the mu
source package.
It must be said that Scheme (and in general, languages from the Lisp-family) initially may look a bit 'strange' – all these parentheses etc.; so please bear with us.
Some examples
Here are some examples; we don't provide too much explanation how they do what they do, but the manual takes you through that, step-by-step.
Messages per weekday
#!/bin/sh
exec guile -s $0 $@
!#
(use-modules (mu) (mu message) (mu stats) (mu plot))
(mu:initialize)
;; create a list like (("Mon" . 13) ("Tue" . 23) ...)
(define weekday-table
(mu:day-numbers->names
(sort
(mu:tabulate-messages
(lambda (msg)
(tm:wday (localtime (mu:date msg)))))
(lambda (a b) (< (car a) (car b))))))
(for-each
(lambda (elm)
(format #t "~a: ~a\n" (car elm) (cdr elm)))
weekday-table)
Which might get us something like:
Sun: 2278 Mon: 2991 Tue: 3077 Wed: 2734 Thu: 2796 Fri: 2343 Sat: 1856
Drawing graphs
We can also draw graphs from this, by adding the following to the script:
;; plain-text graph
(mu:plot (weekday-table) "Messages per weekday" "Day" "Messages" #t)
;; GUI graph
(mu:plot (weekday-table) "Messages per weekday" "Day" "Messages")
This gives us the following:
plain text graph
Messages per weekday Messages 3200 ++---+--------+---------+--------+---------+---------+--------+---++ | + + "/tmp/filel8NGRf" using 2:xticlabels(1) ****** | 3000 ++ * * ++ | *********** * | | * ** * | 2800 ++ * ** * ********* ++ | * ** ************ * | 2600 ++ * ** ** ** * ++ | * ** ** ** * | | * ** ** ** * | 2400 ++ * ** ** ** *********** ++ *********** ** ** ** ** * | 2200 *+ ** ** ** ** ** * ++ * ** ** ** ** ** * | * ** ** ** ** ** * | 2000 *+ ** ** ** ** ** * ++ * + ** + ** + ** + ** + ** + *********** 1800 ******************************************************************** Sun Mon Tue Wed Thu Fri Sat Day
GUI graph
Export contacts to mutt
mu
provides mu cfind
to get contact information from the database; it's
fast, since it uses cached contact data. But sometimes, we may want to get a
bit more advanced. For examples, suppose I want a list of names and e-mail
addresses of people that were seen at least 20 times since 2010, in the
mutt
address book format.
We could get such a list with something like the following:
#!/bin/sh
exec guile -s $0 $@ !#
(use-modules (mu) (mu message) (mu contact))
(mu:initialize)
;; Get a list of contacts that were seen at least 20 times since 2010
(define (selected-contacts)
(let ((addrs '())
(start (car (mktime (car (strptime "%F" "2010-01-01")))))
(minfreq 20))
(mu:for-each-contact
(lambda (contact)
(if (and (mu:email contact)
(>= (mu:frequency contact) minfreq)
(>= (mu:last-seen contact) start))
(set! addrs (cons contact addrs)))))
addrs))
(for-each
(lambda (contact)
(format #t "~a\n" (mu:contact->string contact "mutt-alias")))
(selected-contacts))
License & Copyright
mu4e was designed and implemented by Dirk-Jan C. Binnema, and is Free Software, licensed under the GNU GPLv3
#+html:<hr/><div align="center">© 2011-2012 Dirk-Jan C. Binnema</div>
<script type="text/javascript">
var gaJsHost = (("https:" = document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src
'" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-578531-1");
pageTracker._trackPageview();
</script>