Having fun with aerc
I recently discovered the aerc mail client and, appealed by its "First class support for working with git and email" [1], decided to try it out.
The quick summary of my experience is that (1) this client is great, but (2) there are a few papercuts that will make folks with slight OCD (e.g. yours truly) cringe.
The great thing with free software is that you can go fix the bugs that annoy you, and I embarked in a journey to get make my experience with aerc even better.
First experience with Go
Call me a dinosaur / snob / boring, but I have happily ignored the "Go is great, you should write in Go" for the last 18 years [2], and was not missing out.
However, aerc being written in Go, I had to take the plunge two weeks ago, go a bit deeper than "Yeah I know Go, it's the thing from Google" and actually read and write some.
The jury is still out, but my early thoughts are that the language is pretty
good, easy to understand and write (as advertised), and has a great compiler
(I need to confirm but it looks like it operates like GCC does with -Werror
,
and I'm a big fan) and a solid ecosystem.
I had a WTF?! moment when I understood that they use upper vs. lower-case to encode symbol visibility (seriously, who does that? why not use whitespaces to delimit blocks while we're at it? ;-p)), but I'm past this now and I am fine with writing Go.
Who cares about unread counters?
So why did I (temporarily) leave my beloved C++ to do Go? Primarily because I quickly noticed a few things when using IMAP to access my (AWS WorkMail) mailbox, especially around unread counters.
I like to have no unread message, so it's important that unread counters are correct; what I particularly don't want is to be told a folder contains some unread message that I cannot find... because there's none! This happened quite regularly.
The IMAP code in aerc is pretty good, and relatively easy to follow, so I took to fixing those annoyances myself. I still have one PR that needs merging (commits), but I'm now at a place where I cannot "trivially" get those counters out-of-sync anymore, a big win. I'll admit that I have broken a few things along the way, but the aerc developer community has been super nice and understanding... and I like to think that I have also been very reactive.
I'll very probably write a bit more about aerc and IMAP, in particular the aspects of the protocol that I discovered and triggered a few WTF!? on my part.
Until then, the TL;DR is that (1) aerc is great and really worth looking at, especially if you're a "terminal person", and (2) free software is really nice, because you can get to fix what you don't like and the community is very welcoming.
--
[1] I spend quite some time using git-send-email for my contributions to GCC.
[2] While writing this, I still thought Go was "new". I guess time flies...