Get organized at the Linux command line with Calcurse

Keep up with your calendar and to-do list with Calcurse.
252 readers like this.
Poll: Upcoming open source conferences

by Dafne Cholet. CC BY-SA 2.0.


Do you need complex, feature-packed graphical or web applications to get and stay organized? I don't think so. The right command line tool can do the job and do it well.

Of course, uttering the words command and line together can strike fear into the hearts of some Linux users. The command line, to them, is terra incognita.

Organizing yourself at the command line is easy with Calcurse. Calcurse brings a graphical look and feel to a text-based interface. You get the simplicity and focus of the command line married to ease of use and navigation.

Let's take a closer look at Calcurse, which is open sourced under the BSD License.

Getting the software

If compiling code is your thing (it's not mine, generally), you can grab the source code from the Calcurse website. Otherwise, get the binary installer for your Linux distribution. You might even be able to get Calcurse from your Linux distro's package manager. It never hurts to check.

Compile or install Calcurse (neither takes all that long), and you're ready to go.

Using Calcurse

Crack open a terminal window and type calcurse.

Calcurse's main screen

Calcurse's interface consists of three panels:

  • Appointments (the left side of the screen)
  • Calendar (the top right)
  • To-do list (the bottom right)

Move between the panels by pressing the Tab key on your keyboard. To add a new item to a panel, press a. Calcurse walks you through what you need to do to add the item.

One interesting quirk is that the Appointment and Calendar panels work together. You add an appointment by tabbing to the Calendar panel. There, you choose the date for your appointment. Once you do that, you tab back to the Appointments panel. I know …

Press a to set a start time, a duration (in minutes), and a description of the appointment. The start time and duration are optional. Calcurse displays appointments on the day they're due.

Entering an appointment in Calcurse

Here's what a day's appointments look like:

Calcurse appointment list

The to-do list works on its own. Tab to the ToDo panel and (again) press a. Type a description of the task, then set a priority (1 is the highest and 9 is the lowest). Calcurse lists your uncompleted tasks in the ToDo panel.

Entering a task in Calcurse

If your task has a long description, Calcurse truncates it. You can view long descriptions by navigating to the task using the up or down arrow keys on your keyboard, then pressing v.

Calcurse to-do item

Calcurse saves its information in text files in a hidden folder called .calcurse in your home directory—for example, /home/scott/.calcurse. If Calcurse stops working, it's easy to find your information.

Other useful features

Other Calcurse features include the ability to set recurring appointments. To do that, find the appointment you want to repeat and press r in the Appointments panel. You'll be asked to set the frequency (for example, daily or weekly) and how long you want the appointment to repeat.

You can also import calendars in ICAL format or export your data in either ICAL or PCAL format. With ICAL, you can share your data with other calendar applications. With PCAL, you can generate a Postscript version of your calendar.

There are also a number of command line arguments you can pass to Calcurse. You can read about them in the documentation.

While simple, Calcurse does a solid job of helping you keep organized. You'll need to be a bit more mindful of your tasks and appointments, but you'll be able to focus better on what you need to do and where you need to be.

That idiot Scott Nesbitt ...
I'm a long-time user of free/open source software, and write various things for both fun and profit. I don't take myself all that seriously and I do all of my own stunts.


This is a nice overview. For seven years now I've used calcurse as my only calendar. It is highly reliable. Having everything in a simple plain text file is really nice. It makes it super easy to go back and find things, make fixes, or just review one's past activities.

calcurse is really simple to get started with, but there are some nifty and powerful features one can easily miss. For instance, calcurse can output a nicely formatted, non-interactive list of upcoming appointments; you can even customize this output to appear just as you want it to. (This is separate from the ical or pcal exports; this just prints a nice list to your terminal window. I have the command, with my preferred formatting flags, aliased.)

Also, there are ways to sync calcurse with other calendar applications via a CalDAV server.

Billy, if you're willing to write that article, I think it would make a great follow-up to this one.

In reply to by billy larlad (not verified)

The first draft of the article included mention of syncing with a CalDAV server. But since I've never been able to properly test it, I removed that mention.

And I second Ben Cotton on encouraging you to write a follow-up article focusing on Calcurse's nifty and powerful features one can easily miss. You can learn more about that process on our Write for us page. Feel free to name drop Ben or myself :-)

In reply to by billy larlad (not verified)

I am definitely going to try this out. I did not know it existed, Scott, so thanks for writing about it. It is available in the standard Fedora repo so it can be easily installed.

Nice article.

I've used remind for many years. There is a gui version, remind-gui, that makes it easy to look at a calendar and insert new reminders. You can also have multiple calendars. The default data set is contained in .reminders, but you can create others, like say, .vacations, and interact with it with 'tkremind .vacations'.
You can also use it on the command line. For example, I have an alias, next6w, that displays the reminders for the next 6 weeks: 'remind -c+6 -w85,0,0 /home/gregp/.reminders'. This prints a calendar-like structure in the console, and if I wanted I could send it to a file: 'next6w > my6wcal'

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.