manage events and tasks using simple text files

etm is an acronym for event and task manager.

In contrast to most calendar/todo applications, creating items (events, tasks, and so forth) in etm does not require filling out fields in a form. Instead, items are created as free-form text entries using a simple, intuitive format and stored in plain text files. Please see sample entries below for examples.

This source code for this project is available from this website, the Python Software Foundation and GitHub. Packages are also available for several linux distributions including Arch, Debian and Ubuntu.

Please also note the video tutorial, etm-Introduction, listed below. The User Manual is available below and at GitHub wiki.

An etm discussion forum is available at Google Groups.

[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]CHANGES2017-08-10 16:40 17K 
[TXT]LearningtoUseRegularExpressions.html2010-02-06 13:59 46K 
[TXT]UserManual.html2017-08-10 16:39 142K 
[   ]UserManual.pdf2017-08-10 16:39 317K 
[   ]cheatsheet.pdf2014-06-13 15:12 93K 
[DIR]colors/2017-08-10 16:43 -  
[DIR]docs/2016-10-04 16:50 -  
[VID]etm-Introduction.mov2014-06-07 15:21 17M 
[   ]etm.pdf2016-10-04 16:50 281K 
[TXT] 06:34 1.2K 
[   ]etmtk-3.2.30.tar.gz2017-03-31 10:04 322K 
[   ]etmtk-3.2.30.zip2017-03-31 09:35 331K 
[   ]etmtk-3.2.31.tar.gz2017-08-10 16:43 322K 
[   ]etmtk-3.2.31.zip2017-08-10 16:40 331K 
[DIR]images/2017-08-10 16:43 -  
[DIR]languages/2017-08-10 16:43 -  
[TXT]version.txt2017-08-10 16:39 35  

Screen shots

Combined views in 3.1.0+

Internationalization in 3.1.20+

Custom colors in 3.1.35+

Idle timer in 3.1.43+

Countdown timer in 3.1.60+

Snooze message alert in 3.2.0+

Sample entries

Items in etm begin with a type character such as an asterisk (event) and continue on one or more lines either until the end of the file is reached or another line is found that begins with a type character. The beginning type character for each item is followed by the item summary and then, perhaps, by one or more @key value pairs. The order in which such pairs are entered does not matter.


Python 2.7.x or python >= 3.3.0 is required.

Installing etm

From PyPi - the Python Software Foundation Package Index

If you have pip installed on your system you can install etm with the single command:

sudo pip install etmtk

and later update to the latest version with

sudo pip install -U etmtk

Alternatively, easy_install can be used in a similar manner:

sudo easy_install etmtk


sudo easy_install -U etmtk

From source

The following python packages are required for etm but are not included in the python standard library:

Tk and the python module tkinter are also required but are typically already installed on most modern operating systems. If needed, installation instructions are given at

Download 'etmtk-x.x.x.tar.gz' from this site, unpack the tarball, cd to the resulting directory and do the normal

sudo python install

for a system installation. You can then run from any directory either

$ etm ?

for information about command line usage or

$ etm

to open the etm gui.

Alternatively, you can avoid doing a system installation and simply run either

$ python etm ?


$ python etm


$ ./etm

from this directory.

Optionally Install Git (preferred) or Mercurial

With either program installed, etm will automatically commit any change made to any data file. You can see the history of your changes either to a specific file or to any file from the GUI and, of course, you have the entire range of possibilities for showing changes, restoring previous versions and so forth from the command line.


Download Git from

Install git and then in a terminal enter your personal information

$ git config --global "John Doe"
$ git config --global

the editor you would like to use

$ git config --global core.editor vim

and the diff program

$ git config --global merge.tool vimdiff

Usage information can be obtained in several ways from the terminal

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

Finally, Pro Git by Scott Chacon is available to read or download at:

If you have been using Mercurial and would like to give Git a try, you can import your etm Mercurial records into Git as follows:

$ cd
$ git clone git://
$ git init new_temp_repo
$ cd new_temp_repo
$ ~/fast-export/ -r /path/to/etm/datadir
$ git checkout HEAD

If an "unnamed head" error is reported, try adding --force to the end of the fast-export line.

At this point, you should have a copy of your etm datadir in new_temp_repo along with a directory, .git, that you can copy to the root of your etm datadir where it will join its Mercurial counterpart, .hg. You can then delete new_temp_repo.

You can now open etmtk.cfg for editing and change the setting for vcs_system to

vcs_system: git


Download Mercurial from

install it and then create the file ~/.hgrc, if it doesn't already exist, with at least the following two lines:

username = Your Name <your email address>

New etm users

By default, etm will use the directory


The first time you run etm it will create, if necessary, the following:


If the data directory needs to be created, then the following structure will be added:


The files sample.txt and holidays.txt contain illustrative data entries and the *.cfg files contain illustrative configuration entries.

The following entry will also be inserted in etmtk.cfg:

    - - personal
      - true
      - personal
    - - sample
      - true
      - sample
    - - shared
      - true
      - shared

to illustrate the use of calendars.

Previous etm users

The first time you run etm, it will copy your current configuration settings from ~/.etm/etm.cfg to ~/.etm/etmtk.cfg. You can make any changes you like to the latter file without affecting the former.

You can switch back and forth between etm_qt and etm. Any changes made to your data files by either one will be compatible with the other one.


Please share your ideas in the discussion group at GoogleGroups.

Version numbers

etm's version numbering uses the major.minor.patch format where each of the three components is an integer:

When the major version number is incremented, both the minor version number and patch number are reset to zero. Similarly, when the minor version number is incremented, the patch number is reset to zero. All increments are by one.


Copyright (c) 2009-2016 . All rights reserved.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.