Emacs: Using Org Mode for Todo

By Xah Lee. Date: . Last updated: .

This pages is a tutorial on using emacs org-mode as todo list.

todo list crossout nothing

TODO Heading

To mark a heading as todo item, start it with “TODO”.

* TODO call mom for birthday
* DONE finish coding absca
Ctrl+c Ctrl+t (org-todo)

change heading among 3 states: {TODO, DONE, normal}. It will add the word “TODO” or “DONE” in the heading.

Insert Date Time

Ctrl+c . (org-time-stamp)

Insert an active date stamp. e.g. <2023-02-09 Thu>

Ctrl+u Ctrl+c . (org-time-stamp)

Insert active date and time. e.g. <2023-02-09 Thu 14:45>

Ctrl+c ! (org-time-stamp-inactive)

Insert an inactive date stamp. e.g. [2023-02-09 Thu]

Change Date Time

Shift+ (org-shiftup)

increase any {year, month, day, hour}. (cursor must be on a date.)

Shift+ (org-shiftdown)

decrease any {year, month, day, hour}. (cursor must be on a date.)


Each heading may have keywords, called “tags”. e.g. work, family, urgent, coding.

The syntax for tag is any word between colon, like this: :mom: or :this:that:. They are placed at end of the headline. Like this:

* call mom for bday. :family:...
* finish writing the org-mode tutorial. :emacs:work:

Tag name cannot have space, nor hyphen. Use lowline _

Tags are inherited from parent nodes, in the sense that when you search for a tag, a heading with that tag will show but also all its children, even if the children's headings do not contain that tag.

Insert Tag

Alt+x org-set-tags-commandCtrl+c Ctrl+q

Insert a tag. You can also just type the tag yourself.

Show Headings by Tag

Alt+x org-match-sparse-treeCtrl+c \

Show only headings of a given tag.

Org Mode