calcurse is an open source, text-based calendar and scheduling application. The software keeps track of events, appointments and everyday tasks.
The software is lightweight, fast and reliable. It’s designed for the console or terminal, locally or on a remote machine.
A configurable notification system reminds users of upcoming deadlines, the curses based interface can be customized to suit user needs, and a very powerful set of command line options can be used to filter and format appointments, making it suitable for use in scripts.
The project’s GitHub offers zip and tar.gz files. And their website offers links to packages for most popular Linux distributions including Ubuntu, Fedora, openSUSE, Debian, and Arch Linux. There’s also packages for OpenBSD, FreeBSD, NetBSD as well as Mac OS X.
You may not get the latest version if you use a distribution’s package. So it’s often best to download the source package from the project’s website (at the time of writing, calcurse-4.3.0.tar.gz) and compile it yourself.
$ tar zxvf calcurse-4.3.0.tar.gz
$ cd calcurse
$ ./configure && make -j4
$ sudo make install
the -j flag speeds up compilation for systems with multi-core processors.
calcurse runs in 2 modes: interactive or non-interactive mode.
In the interactive mode you view your own personal organizer with a text-based interface.
The screen is divided into 3 panels: appointments, calendar, and TODO. At the bottom of the screen, there’s a notification bar, and a status bar. The panels are navigated using the the tab key.
In the calendar panel, days with non-recurrent items have a different color as days containing recurrent items only. There’s lots of flexibility. For example, there’s support for punctual appointments (which have no end time), recurring appointments, todo items with a defined priority or an undefined priority, powerful duration strings, Vim-like copy/paste, and much more.
All of calcurse’s parameters are configurable from the Configuration menu available when pressing C. You are then driven to a submenu with six possible choices: general options, layout options, sidebar, colour theme, and keys configuration. The sidebar option lets you change the width of the calendar / todo panels.
I’ll illustrate one of these choices, the layout configuration. As the image below shows, the user can choose the layout of the 3 panels.
The default layout has calendar panel at the top-right corner of the terminal, the todo panel at the bottom-right corner, and the appointment panel is displayed on the left hand-side of the screen.
Non-interactive mode permits to easily build reminders just by adding calcurse with appropriate command line arguments inside a cron tab or within a shell init script. This means the desired information will be displayed, and after that, calcurse simply quits and you are returned back to the shell prompt.
There’s a powerful set of command line options available. There’s filter switches which restrict the set of items read from the appointments file. You can grep, query, filter, and much more.
Say you want to know your appointments for the next 7 days. Enter at a shell:
One of the areas open source software could sometimes do better is user documentation. calcurse provides an online help system invoked by pressing the ? key. All of the commands are documented within this help system. It’s useful for newcomers as it gives help on calcurse’s specific features and key bindings.
When the daemon mode is enabled in the notification configuration menu calcurse stays in background when the user interface is not running. In background mode, calcurse checks for upcoming appointments and runs the user-defined notification command when necessary.
The software is written in the C programming language.
- Hooks – run scripts when loading/saving data, e.g. to put your calendar data under version control. This feature can be used to automatically make Git commits or synchronize with a server when the data files are written. The project provides some example scripts.
- Experimental CalDAV support – synchronize calcurse with your mobile devices or another computer. This is a Python script that synchronizes calcurse with a CalDAV server.
- Support for services requiring OAuth2 authentication such as Google Calendar.
- Support for various types of appointments and TODO items, including all-day events and recurring appointments (daily, weekly, monthly and yearly).
- Weekly calendar view with the display of the week number and colored slices indicating appointment times.
- Fast and customizable curses-based interface.
- Regex-based searches.
- Powerful non-interactive command line interface useful for scripts.
- User-definable key bindings. The default keys will be familiar to vi users.
- Fully user-configurable notification system (ability to send mails or anything else that could remind you of your upcoming appointments).
- Cut and paste feature, move items from one day to another.
- Attach notes to appointments, events and todos.
- Moon phase calculation.
- Import capabilities with support for iCalendar format. Data in icalendar format as described in the rfc2445 specification can be imported.
- Export capabilities with support for iCalendar and pcal formats.
- Attach notes to each calendar element, and to edit them with your favorite text editor.
- Support for non-color terminals.
- Support for internationalization (i18n) with texts in English, French, German, Dutch, Spanish, and Italian.
- UTF-8 support.
calcurse is designed to be lean, fast, and easy-to-use. It’s a wonderful text-based calendar and scheduling tool.