-- Leo's gemini proxy

-- Connecting to idiomdrottning.org:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini; lang=en

Deferring Email with Notmuch and Emacs


I use an email called Notmuch and Emacs.


I can hit a button to make an email go away temporarily and it asks for a date and it’ll return on that day.


Here is the elisp code that I’ve stuck in my .emacs.


(defun notmuch-search-defer ()
 (interactive)
 (notmuch-search-tag `(,(string-trim-right (shell-command-to-string
                        (concat "date '++deferred_%Y-%m-%d' --date \""
                            (read-from-minibuffer "If not now, when? ") "\"")))))
 (notmuch-search-tag '("+deferred"))
 (notmuch-search-archive-thread))

(defun notmuch-show-defer ()
 (interactive)
 (notmuch-show-tag `(,(string-trim-right (shell-command-to-string
                      (concat "date '++deferred_%Y-%m-%d' --date \""
                          (read-from-minibuffer "If not now, when? ") "\"")))))
 (notmuch-show-tag '("+deferred"))
 (notmuch-show-archive-message-then-next-or-next-thread))

I’ve bound them to the key ‘e’ like so:


(define-key notmuch-search-mode-map "e" 'notmuch-search-defer)
(define-key notmuch-show-mode-map "e" 'notmuch-show-defer)

They’re not really gone, they’re in the archive. Searching for tag:deferred shows you all of these. You’ll need that if you accidentally put in today’s date (which happens if you hit enter) or a date in the past.


The script that brings them back is a shellscript that my crontab runs daily:


0 1 * * * /home/sandra/skami/sh/daily.sh

It does other stuff too, but here’s the relevant part:


#!/bin/sh
lastrun=2019-12-17
today=$(date +%Y-%m-%d)
chores () {
    notmuch tag +inbox +unread +personal -new -deferred_$lastrun -deferred -- tag:deferred_$lastrun
}


while [ $today != $lastrun ]
do
    lastrun=$(date +%Y-%m-%d --date "$lastrun +1 day")
    chores
done

sed -i 's/^lastrun=.*/lastrun='$(date +%Y-%m-%d)/ $0

This shell needs exec privs and also write access to itself because it edits itself (the last line edits the second line which sets lastrun). This is so that if the script misses a day (because of computer off or similar) it’ll get caught up the next time daily.sh is run. I’ve put it in my window manager’s start up file so it starts when I first log into the computer too, even if my computer was off during the crontab hour.


This isn’t for procrastination and endlessly bouncing email off to the future. That’d be heartbreaking. It’s for when I actually can’t do the thing they’re asking because it’s not the right day. For example movie tickets but the movie isn’t until Wednesday.


The only way to get rid of an email is to archive it or delete it. If I can deal with email right away, I do so. This email deferring is meant to support that mindset, not compromise it.


So:


Do I even ever want to respond? If no, I archive it right away (or delete).

Can I answer right away? If yes, I do so. Or I hold off on even checking the email (I don’t have a smart phone so I can only deal with email at my own desk anyway).

Do I need to wait for something outside of my own control in order to use this email properly? Then yes, that’s when I’d use this deferring script.

Do I need to do something that isn’t time dependent? I’ll add it to my todo list and archive normally instead of deferring. And then search up the email as needed.


I have a lot of date specific searches saved, so I can keep my main inbox at zero but then at a glance search up email from the past week or so or specific people last week etc. One search I use all the time is “email that I have sent today” – that’ll find all the threads that I’m actually engaged in, to see if I need to add something to them or refer to information in them.

-- Response ended

-- Page fetched on Wed Apr 24 06:23:15 2024