Get text-mode calendar and TODO lists with Calcurse

Vincent Danen recommends Calcurse, a lightweight calendaring and TODO application for command-line purists.

For those of us who love TUI (Text User Interface) applications like Mutt (for email), Irssi (for IRC), or elinks/lynx/w3m (for web/HTML viewing) there is another really neat TUI application for calendars and TODO lists. The Calcurse application is a text-mode TODO and calendar application that, like other TUI programs, is great for those who spend a lot of time in the terminal or want an application that is easily accessible while on the road (securely and in low-bandwidth situations via SSH). While other calendaring and TODO applications exist, many of which are networked and can sync with each other, Calcurse is lightweight, fast, and elegant for command-line purists.

It has an interesting interface that shows a calendar, upcoming appointments, and a TODO list in a single screen, when in interactive mode. There is no mouse involved, so data entry and manipulation is all done by keyboard shortcuts (which are conveniently displayed at the bottom of the screen).

Calcurse can also be used to display TODO items and appointments without ever firing up the interactive TUI. For instance, to display the appointments for the upcoming week, use:

$ calcurse -d 7
 - 12:00 -> 14:00
        meeting with Bob
 - 08:00 -> 16:00
        hands-on training

This makes Calcurse even more interesting, because you can use it to send you daily reminders via email (or updates sent to a web page, or whatever you can script) by displaying upcoming appointments via a cron job. Likewise, TODO items can be displayed in the same fashion:

calcurse -t
to do:
2. pick up eggs on way home
3. update docs for app

By specifying a number to the -t option, you can limit what Calcurse displays; perhaps a daily cron job to show items of importance: 1 (highest) is useful, so using calcurse -t1 here will work, with it emailing you or sending you an SMS of the output.

You can also use regular expressions to search appointments and TODOs from the command line, which makes it easy to use keywords as labels in your data that can then be searched on (i.e., using clean fridge @home or talk to bob @phone could be used and then using calcurse -t -S '@home$ to display all TODO items that have @home at the end of the string).

The interactive interface itself, while quite rudimentary, can be changed to suit your needs. For instance, if you are like me and have more TODOs than appointments, you can make the program use the largest portion of the screen for TODO items, with the smaller pane for appointments.

Click to enlarge.

Calcurse is pretty slick. Other features of note include the importing of iCal feeds and the exporting of iCal or pcal data. You can attach notes to appointments and edit them with your favourite text editor.

The only down side to Calcurse is that it offers no easy to way to add items outside of the interactive interface, only quick short cuts to displaying them. While Calcurse can send out reminders thanks to it's background daemon support, there is no way to hook it up to a mail account in order to receive new appointments or TODOs; something that would be useful to email the app to add new items. There is also no quick command-line option to adding new events.

What would be nice to see is a way for it to do just that; you could use the TUI to clean up or change appointments or tasks, and edit notes associated with them, but use command-line options to display or add new appointments/TODOs. If Calcurse could do that, it could very well be my calendaring application of choice.


Vincent Danen works on the Red Hat Security Response Team and lives in Canada. He has been writing about and developing on Linux for over 10 years and is a veteran Mac user.

Editor's Picks