Always See Your Next Appointment in Your Status Bar
If you use Google Calendar, here’s a neat trick to quickly see your next appointment in a dashboard, status bar, or similar. I use it with i3status, but it works just as well with any dashboard tool.
Setup time: 20 min
I have it configured to only show one event, and only if it starts in the next 24 hours, but you can configure this as you like.
gcalcli
– Command Line Tool for Google Calendar
First, install gcalcli
.
Try it out by running gcalcli agenda
.
This will prompt you to login.
After you have logged in you should get a list of upcoming appointments with times.
Try gcalcli agenda
again.
This time you should not have to login (this is important, since we want to use gcalcli
for automatic scripting).
If you’re having issues, consult the documentation in the repository.
Use Crontab to Fetch Next Event to a File
Now, run crontab -e
and edit your crontab file to contain the following entry:
# Get today's agenda, starting now and going to the end of the day.
# Keep first line only.
# Delete the date.
# Avoid the long space between time and title, repalce by colon.
# Add a message at the bottom, will show if there are no events in the selected period.
*/5 * * * * gcalcli --refresh --nocolor agenda --military --nostarted --nodeclined --tsv "`date -Iminutes`" "`date -Iminutes -d '+1 day'`" | sed -s '/00:00.*00:00/d' | awk 'BEGIN{FS="\t"}{print $2 "-" $4 ": " $5}' | head -1 > /tmp/next_appointment.txt.tmp && rm /tmp/next_appointment.txt ; mv /tmp/next_appointment.txt.tmp /tmp/next_appointment.txt
This is crude, but robust.
The gcalcli
command will give you all upcoming events that fulfill the following:
- start in the next 24 hours,
- has not yet started (to hide ongoing all-day or long-running events),
- you haven’t declined.
Then, all-day events are deleted with the first sed
command (they are displayed as running from midnight to midnight).
After that, the output is formatted with awk
, and the first event is extracted with head -1
.
The output redirected to a temporary file, any existing file is removed, and the tempfile is moved to it’s place.
Showing The Appointment in i3status
Add the following to your .i3status.conf
file:
read_file gcal {
format = "%content"
format_bad = "%title: no cal file"
path = "/tmp/next_appointment.txt"
Max_characters = 60
}
Configuring To Suit You
Some configurations you might want to make this suit you better:
- Change time window.
See where it says
'+1 day'
? Change that as you like, you can use'+12 hours'
or'+1 week'
, for example. I chose 1 day for UI purposes – I can show only the time and not the day of the event without any confusion. - Use 12-hour format or 24-hour format.
For 24-hour format, use the
--military
flag. For 12-hour format, use the--no-military
flag1. - You can format the text some other way than
<START_TIME>-<END_TIME>: <TITLE>
, by modifying theawk
command.
That’s It
I find it very relaxing to have my next appointment available at a glance. Most importantly, it helps me relax knowing how much time I have to for myself before I’m needed somewhere. This works well, since I only put things in my calendar which are events that happen at particular times, or slices of time for specific work I have carved out and need to respect. I don’t use my calendar for regular TODOs. I work by a version of the David Allen “Getting Things Done” method (commonly called GTD), which emphasizes this.
Hopefully it will be fixed soon.
-
Okay, this actually doesn’t seem to work at the moment. See this issue: https://github.com/insanum/gcalcli/issues/563 ↩