GNU Emacs
Org
TODO Items

TODO Items

Org mode does not maintain TODO lists as separate documents(note: Of course, you can make a document that contains only long lists of TODO items, but this is not required.). Instead, TODO items are an integral part of the notes file, because TODO items usually come up while taking notes! With Org mode, simply mark any entry in a tree as being a TODO item. In this way, information is not duplicated, and the entire context from which the TODO item emerged is always present.

Of course, this technique for managing TODO items scatters them throughout your notes file. Org mode compensates for this by providing methods to give you an overview of all the things that you have to do.

Basic TODO Functionality

Any headline becomes a TODO item when it starts with the word TODO, for example:

*** TODO Write letter to Sam Fortune

The most important commands to work with TODO entries are:

C-c C-t (org-todo)

Rotate the TODO state of the current item among

,-> (unmarked) -> TODO -> DONE --.
'--------------------------------'

If TODO keywords have fast access keys (see Fast access to TODO states), prompt for a TODO keyword through the fast selection interface; this is the default behavior when org-use-fast-todo-selection is non-nil.

The same state changing can also be done "remotely" from the agenda buffer with the t command key (see Commands in the Agenda Buffer).

S-RIGHT S-LEFT

Select the following/preceding TODO state, similar to cycling. Useful mostly if more than two TODO states are possible (see Extended Use of TODO Keywords). See also Packages that conflict with Org mode, for a discussion of the interaction with shift-selection. See also the variable org-treat-S-cursor-todo-selection-as-state-change.

C-c / t (org-show-todo-tree)

View TODO items in a sparse tree (see Sparse Trees). Folds the entire buffer, but shows all TODO items—with not-DONE state—and the headings hierarchy above them. With a prefix argument, or by using C-c / T, search for a specific TODO. You are prompted for the keyword, and you can also give a list of keywords like KWD1|KWD2|... to list entries that match any one of these keywords. With a numeric prefix argument N, show the tree for the Nth keyword in the variable org-todo-keywords. With two prefix arguments, find all TODO states, both un-done and done.

M-x org-agenda t (org-todo-list)

Show the global TODO list. Collects the TODO items (with not-DONE states) from all agenda files (see Agenda Views) into a single buffer. The new buffer is in Org Agenda mode, which provides commands to examine and manipulate the TODO entries from the new buffer (see Commands in the Agenda Buffer). See The global TODO list, for more information.

S-M-RET (org-insert-todo-heading)

Insert a new TODO entry below the current one.

Changing a TODO state can also trigger tag changes. See the docstring of the option org-todo-state-tags-triggers for details.

Extended Use of TODO Keywords

By default, marked TODO entries have one of only two states: TODO and DONE. Org mode allows you to classify TODO items in more complex ways with TODO keywords (stored in org-todo-keywords). With special setup, the TODO keyword system can work differently in different files.

Note that tags are another way to classify headlines in general and TODO items in particular (see Tags).

TODO keywords as workflow states

You can use TODO keywords to indicate different, possibly sequential states in the process of working on an item, for example(note: Changing the variable org-todo-keywords only becomes effective after restarting Org mode in a buffer.):

(setq org-todo-keywords
      '((sequence "TODO" "FEEDBACK" "VERIFY" "|" "DONE" "DELEGATED")))

The vertical bar separates the TODO keywords (states that need action) from the DONE states (which need no further action). If you do not provide the separator bar, the last state is used as the DONE state.

With this setup, the command C-c C-t cycles an entry from TODO to FEEDBACK, then to VERIFY, and finally to DONE and DELEGATED. You may also use a numeric prefix argument to quickly select a specific state. For example C-3 C-c C-t changes the state immediately to VERIFY. Or you can use S-RIGHT and S-LEFT to go forward and backward through the states. If you define many keywords, you can use in-buffer completion (see Completion) or a special one-key selection scheme (see Fast access to TODO states) to insert these words into the buffer. Changing a TODO state can be logged with a timestamp, see Tracking TODO state changes, for more information.

TODO keywords as types

The second possibility is to use TODO keywords to indicate different types of action items. For example, you might want to indicate that items are for "work" or "home". Or, when you work with several people on a single project, you might want to assign action items directly to persons, by using their names as TODO keywords. This type of functionality is actually much better served by using tags (see Tags), so the TODO implementation is kept just for backward compatibility.

Using TODO types, it would be set up like this:

(setq org-todo-keywords '((type "Fred" "Sara" "Lucy" "|" "DONE")))

In this case, different keywords do not indicate states, but rather different types. So the normal work flow would be to assign a task to a person, and later to mark it DONE. Org mode supports this style by adapting the workings of the command C-c C-t=(note: This is also true for the =t command in the agenda buffer.). When used several times in succession, it still cycles through all names, in order to first select the right type for a task. But when you return to the item after some time and execute C-c C-t again, it will switch from any name directly to DONE. Use prefix arguments or completion to quickly select a specific name. You can also review the items of a specific TODO type in a sparse tree by using a numeric prefix to C-c / t. For example, to see all things Lucy has to do, you would use C-3 C-c / t. To collect Lucy's items from all agenda files into a single buffer, you would use the numeric prefix argument as well when creating the global TODO list: C-3 M-x org-agenda t.

Multiple keyword sets in one file

Sometimes you may want to use different sets of TODO keywords in parallel. For example, you may want to have the basic TODO/DONE, but also a workflow for bug fixing, and a separate state indicating that an item has been canceled—so it is not DONE, but also does not require action. Your setup would then look like this:

(setq org-todo-keywords
      '((sequence "TODO" "|" "DONE")
        (sequence "REPORT" "BUG" "KNOWNCAUSE" "|" "FIXED")
        (sequence "|" "CANCELED")))

The keywords should all be different, this helps Org mode keep track of which subsequence should be used for a given entry. In this setup, C-c C-t only operates within a sub-sequence, so it switches from DONE to (nothing) to TODO, and from FIXED to (nothing) to REPORT. Therefore you need a mechanism to initially select the correct sequence. In addition to typing a keyword or using completion (see Completion), you may also apply the following commands:

C-u C-u C-c C-t, C-S-RIGHT, C-S-LEFT

These keys jump from one TODO sub-sequence to the next. In the above example, C-u C-u C-c C-t or C-S-RIGHT would jump from TODO or DONE to REPORT, and any of the words in the second row to CANCELED. Note that the C-S- key binding conflict with shift-selection (see Packages that conflict with Org mode).

S-RIGHT, S-LEFT

S-LEFT and S-RIGHT walk through all keywords from all sub-sequences, so for example S-RIGHT would switch from DONE to REPORT in the example above. For a discussion of the interaction with shift-selection, see Packages that conflict with Org mode.

Fast access to TODO states

If you would like to quickly change an entry to an arbitrary TODO state instead of cycling through the states, you can set up keys for single-letter access to the states. This is done by adding the selection character after each keyword, in parentheses(note: All characters are allowed except @, ^ and !, which have a special meaning here.). For example:

(setq org-todo-keywords
      '((sequence "TODO(t)" "|" "DONE(d)")
        (sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)")
        (sequence "|" "CANCELED(c)")))

If you then press C-c C-t followed by the selection key, the entry is switched to this state. SPC can be used to remove any TODO keyword from an entry.

Setting up keywords for individual files

It can be very useful to use different aspects of the TODO mechanism in different files. For file-local settings, you need to add special lines to the file which set the keywords and interpretation for that file only. For example, to set one of the two examples discussed above, you need one of the following lines, starting in column zero anywhere in the file:

#+TODO: TODO FEEDBACK VERIFY | DONE CANCELED

You may also write #+SEQ_TODO to be explicit about the interpretation, but it means the same as #+TODO, or

#+TYP_TODO: Fred Sara Lucy Mike | DONE

A setup for using several sets in parallel would be:

#+TODO: TODO(t) | DONE(d)
#+TODO: REPORT(r) BUG(b) KNOWNCAUSE(k) | FIXED(f)
#+TODO: | CANCELED(c)

To make sure you are using the correct keyword, type #+ into the buffer and then use M-TAB to complete it (see Completion).

Remember that the keywords after the vertical bar—or the last keyword if no bar is there—must always mean that the item is DONE, although you may use a different word. After changing one of these lines, use C-c C-c with point still in the line to make the changes known to Org mode(note: Org mode parses these lines only when Org mode is activated after visiting a file. C-c C-c with point in a line starting with #+ is simply restarting Org mode for the current buffer.).

Faces for TODO keywords

Org mode highlights TODO keywords with special faces: org-todo for keywords indicating that an item still has to be acted upon, and org-done for keywords indicating that an item is finished. If you are using more than two different states, you might want to use special faces for some of them. This can be done using the variable org-todo-keyword-faces. For example:

(setq org-todo-keyword-faces
      '(("TODO" . org-warning) ("STARTED" . "yellow")
        ("CANCELED" . (:foreground "blue" :weight bold))))

While using a list with face properties as shown for CANCELED should work, this does not always seem to be the case. If necessary, define a special face and use that. A string is interpreted as a color. The variable org-faces-easy-properties determines if that color is interpreted as a foreground or a background color.

TODO dependencies

The structure of Org files—hierarchy and lists—makes it easy to define TODO dependencies. Usually, a parent TODO task should not be marked as done until all TODO subtasks, or children tasks, are marked as done. Sometimes there is a logical sequence to (sub)tasks, so that one subtask cannot be acted upon before all siblings above it have been marked as done. If you customize the variable org-enforce-todo-dependencies, Org blocks entries from changing state to DONE while they have TODO children that are not DONE. Furthermore, if an entry has a property ORDERED, each of its TODO children is blocked until all earlier siblings are marked as done. Here is an example:

* TODO Blocked until (two) is done
** DONE one
** TODO two

* Parent
:PROPERTIES:
:ORDERED:  t
:END:
** TODO a
** TODO b, needs to wait for (a)
** TODO c, needs to wait for (a) and (b)

You can ensure an entry is never blocked by using the NOBLOCKING property (see Properties and Columns):

* This entry is never blocked
:PROPERTIES:
:NOBLOCKING: t
:END:
C-c C-x o (org-toggle-ordered-property)

Toggle the ORDERED property of the current entry. A property is used for this behavior because this should be local to the current entry, not inherited from entries above like a tag (see Tags). However, if you would like to track the value of this property with a tag for better visibility, customize the variable org-track-ordered-property-with-tag.

C-u C-u C-u C-c C-t

Change TODO state, regardless of any state blocking.

If you set the variable org-agenda-dim-blocked-tasks, TODO entries that cannot be marked as done because of unmarked children are shown in a dimmed font or even made invisible in agenda views (see Agenda Views).

You can also block changes of TODO states by using checkboxes (see Checkboxes). If you set the variable org-enforce-todo-checkbox-dependencies, an entry that has unchecked checkboxes is blocked from switching to DONE.

If you need more complex dependency structures, for example dependencies between entries in different trees or files, check out the module org-depend.el in the org-contrib repository.

Progress Logging

To record a timestamp and a note when changing a TODO state, call the command org-todo with a prefix argument.

C-u C-c C-t (org-todo)

Prompt for a note and record a the time of the TODO state change. The note is inserted as a list item below the headline, but can also be placed into a drawer, see Tracking TODO state changes.

If you want to be more systematic, Org mode can automatically record a timestamp and optionally a note when you mark a TODO item as DONE, or even each time you change the state of a TODO item. This system is highly configurable, settings can be on a per-keyword basis and can be localized to a file or even a subtree. For information on how to clock working time for a task, see Clocking Work Time.

Closing items

The most basic automatic logging is to keep track of when a certain TODO item was marked as done. This can be achieved with(note: The corresponding in-buffer setting is: #+STARTUP: logdone.)

(setq org-log-done 'time)

Then each time you turn an entry from a TODO (not-done) state into any of the DONE states, a line CLOSED: [timestamp] is inserted just after the headline. If you turn the entry back into a TODO item through further state cycling, that line is removed again. If you turn the entry back to a non-TODO state (by pressing C-c C-t SPC for example), that line is also removed, unless you set org-closed-keep-when-no-todo to non-nil. If you want to record a note along with the timestamp, use(note: The corresponding in-buffer setting is: #+STARTUP: lognotedone.)

(setq org-log-done 'note)

You are then prompted for a note, and that note is stored below the entry with a Closing Note heading.

Tracking TODO state changes

You might want to automatically keep track of when a state change occurred and maybe take a note about this change. You can either record just a timestamp, or a time-stamped note. These records are inserted after the headline as an itemized list, newest first(note: See the variable org-log-states-order-reversed.). When taking a lot of notes, you might want to get the notes out of the way into a drawer (see Drawers). Customize the variable org-log-into-drawer to get this behavior—the recommended drawer for this is called LOGBOOK=(note: Note that the =LOGBOOK drawer is unfolded when pressing SPC in the agenda to show an entry—use C-u SPC to keep it folded here.). You can also overrule the setting of this variable for a subtree by setting a LOG_INTO_DRAWER property.

Since it is normally too much to record a note for every state, Org mode expects configuration on a per-keyword basis for this. This is achieved by adding special markers ! (for a timestamp) or @ (for a note with timestamp) in parentheses after each keyword. For example, with the setting

(setq org-todo-keywords
      '((sequence "TODO(t)" "WAIT(w@/!)" "|" "DONE(d!)" "CANCELED(c@)")))

You not only define global TODO keywords and fast access keys, but also request that a time is recorded when the entry is set to DONE, and that a note is recorded when switching to WAIT or

CANCELED 15. The setting for WAIT is even more special: the ! after the slash means that in addition to the note taken when entering the state, a timestamp should be recorded when leaving the WAIT state, if and only if the target state does not configure logging for entering it. So it has no effect when switching from WAIT to DONE, because DONE is configured to record a timestamp only. But when switching from WAIT back to TODO, the /! in the WAIT setting now triggers a timestamp even though TODO has no logging configured.

You can use the exact same syntax for setting logging preferences local to a buffer:

#+TODO: TODO(t) WAIT(w@/!) | DONE(d!) CANCELED(c@)

To record a timestamp without a note for TODO keywords configured with @, just type C-c C-c to enter a blank note when prompted.

In order to define logging settings that are local to a subtree or a single item, define a LOGGING property in this entry. Any non-empty LOGGING property resets all logging settings to nil. You may then turn on logging for this specific tree using STARTUP keywords like lognotedone or logrepeat, as well as adding state specific settings like TODO(!). For example:

* TODO Log each state with only a time
  :PROPERTIES:
  :LOGGING: TODO(!) WAIT(!) DONE(!) CANCELED(!)
  :END:
* TODO Only log when switching to WAIT, and when repeating
  :PROPERTIES:
  :LOGGING: WAIT(@) logrepeat
  :END:
* TODO No logging at all
  :PROPERTIES:
  :LOGGING: nil
  :END:

Tracking your habits

Org has the ability to track the consistency of a special category of TODO, called "habits." To use habits, you have to enable the habit module by customizing the variable org-modules.

A habit has the following properties:

  1. The habit is a TODO item, with a TODO keyword representing an open state.
  2. The property STYLE is set to the value habit (see Properties and Columns).
  3. The TODO has a scheduled date, usually with a .+ style repeat interval. A ++ style may be appropriate for habits with time constraints, e.g., must be done on specific days of week (++1w), or a + style for an unusual habit that can have a backlog, e.g., weekly reports. See Repeated tasks for more details about repeat intervals.
  4. The TODO may also have minimum and maximum ranges specified by using the syntax .+2d/3d, which says that you want to do the task at least every three days, but at most every two days.
  5. State logging for the DONE state is enabled (see Tracking TODO state changes), in order for historical data to be represented in the consistency graph. If it is not enabled it is not an error, but the consistency graphs are largely meaningless.

To give you an idea of what the above rules look like in action, here's an actual habit with some history:

** TODO Shave
   SCHEDULED: <2009-10-17 Sat .+2d/4d>
   :PROPERTIES:
   :STYLE:    habit
   :LAST_REPEAT: [2009-10-19 Mon 00:36]
   :END:
   - State "DONE"       from "TODO"       [2009-10-15 Thu]
   - State "DONE"       from "TODO"       [2009-10-12 Mon]
   - State "DONE"       from "TODO"       [2009-10-10 Sat]
   - State "DONE"       from "TODO"       [2009-10-04 Sun]
   - State "DONE"       from "TODO"       [2009-10-02 Fri]
   - State "DONE"       from "TODO"       [2009-09-29 Tue]
   - State "DONE"       from "TODO"       [2009-09-25 Fri]
   - State "DONE"       from "TODO"       [2009-09-19 Sat]
   - State "DONE"       from "TODO"       [2009-09-16 Wed]
   - State "DONE"       from "TODO"       [2009-09-12 Sat]

What this habit says is: I want to shave at most every 2 days—given by the SCHEDULED date and repeat interval—and at least every 4 days. If today is the 15th, then the habit first appears in the agenda (see Agenda Views) on Oct 17, after the minimum of 2 days has elapsed, and will appear overdue on Oct 19, after four days have elapsed.

What's really useful about habits is that they are displayed along with a consistency graph, to show how consistent you've been at getting that task done in the past. This graph shows every day that the task was done over the past three weeks, with colors for each day. The colors used are:

Blue
If the task was not to be done yet on that day.
Green
If the task could have been done on that day.
Yellow
If the task was going to be overdue the next day.
Red
If the task was overdue on that day.

In addition to coloring each day, the day is also marked with an asterisk if the task was actually done that day, and an exclamation mark to show where the current day falls in the graph.

There are several configuration variables that can be used to change the way habits are displayed in the agenda.

org-habit-graph-column

The buffer column at which the consistency graph should be drawn. This overwrites any text in that column, so it is a good idea to keep your habits' titles brief and to the point.

org-habit-preceding-days

The amount of history, in days before today, to appear in consistency graphs.

org-habit-following-days

The number of days after today that appear in consistency graphs.

org-habit-show-habits-only-for-today

If non-nil, only show habits in today's agenda view. The default value is t. Pressing C-u K in the agenda toggles this variable.

Lastly, pressing K in the agenda buffer causes habits to temporarily be disabled and do not appear at all. Press K again to bring them back. They are also subject to tag filtering, if you have habits which should only be done in certain contexts, for example.

Priorities

If you use Org mode extensively, you may end up with enough TODO items that it starts to make sense to prioritize them. Prioritizing can be done by placing a priority cookie into the headline of a TODO item right after the TODO keyword, like this:

*** TODO [#A] Write letter to Sam Fortune

By default, Org mode supports three priorities: A, B, and C. A is the highest priority. An entry without a cookie is treated as equivalent if it had priority B. Priorities make a difference only for sorting in the agenda (see Weekly/daily agenda). Outside the agenda, they have no inherent meaning to Org mode. The cookies are displayed with the face defined by the variable org-priority-faces, which can be customized.

You can also use numeric values for priorities, such as

*** TODO [#1] Write letter to Sam Fortune

When using numeric priorities, you need to set org-priority-highest, org-priority-lowest and org-priority-default to integers, which must all be strictly inferior to 65.

Priorities can be attached to any outline node; they do not need to be TODO items.

C-c \, (org-priority)

Set the priority of the current headline. The command prompts for a priority character A, B or C. When you press SPC instead, the priority cookie, if one is set, is removed from the headline. The priorities can also be changed "remotely" from the agenda buffer with the \, command (see Commands in the Agenda Buffer).

S-UP (org-priority-up); S-DOWN (org-priority-down)

Increase/decrease the priority of the current headline(note: See also the option org-priority-start-cycle-with-default.). Note that these keys are also used to modify timestamps (see Creating Timestamps). See also Packages that conflict with Org mode, for a discussion of the interaction with shift-selection.

You can change the range of allowed priorities by setting the variables org-priority-highest, org-priority-lowest, and org-priority-default. For an individual buffer, you may set these values (highest, lowest, default) like this (please make sure that the highest priority is earlier in the alphabet than the lowest priority):

#+PRIORITIES: A C B

Or, using numeric values:

#+PRIORITIES: 1 10 5

Breaking Down Tasks into Subtasks

It is often advisable to break down large tasks into smaller, manageable subtasks. You can do this by creating an outline tree below a TODO item, with detailed subtasks on the tree(note: To keep subtasks out of the global TODO list, see the option org-agenda-todo-list-sublevels.). To keep an overview of the fraction of subtasks that have already been marked as done, insert either [/] or [%] anywhere in the headline. These cookies are updated each time the TODO status of a child changes, or when pressing C-c C-c on the cookie. For example:

* Organize Party [33%]
** TODO Call people [1/2]
*** TODO Peter
*** DONE Sarah
** TODO Buy food
** DONE Talk to neighbor

If a heading has both checkboxes and TODO children below it, the meaning of the statistics cookie become ambiguous. Set the property COOKIE_DATA to either checkbox or todo to resolve this issue.

If you would like to have the statistics cookie count any TODO entries in the subtree (not just direct children), configure the variable org-hierarchical-todo-statistics. To do this for a single subtree, include the word recursive into the value of the COOKIE_DATA property.

* Parent capturing statistics [2/20]
  :PROPERTIES:
  :COOKIE_DATA: todo recursive
  :END:

If you would like a TODO entry to automatically change to DONE when all children are done, you can use the following setup:

(defun org-summary-todo (n-done n-not-done)
  "Switch entry to DONE when all subentries are done, to TODO otherwise."
  (let (org-log-done org-todo-log-states)   ; turn off logging
    (org-todo (if (= n-not-done 0) "DONE" "TODO"))))

(add-hook 'org-after-todo-statistics-hook #'org-summary-todo)

Another possibility is the use of checkboxes to identify (a hierarchy of) a large number of subtasks (see Checkboxes).

Checkboxes

Every item in a plain list16 (see Plain Lists) can be made into a checkbox by starting it with the string [ ]. This feature is similar to TODO items (see TODO Items), but is more lightweight. Checkboxes are not included into the global TODO list, so they are often great to split a task into a number of simple steps. Or you can use them in a shopping list.

Here is an example of a checkbox list.

* TODO Organize party [2/4]
  - [-] call people [1/3]
    - [ ] Peter
    - [X] Sarah
    - [ ] Sam
  - [X] order food
  - [ ] think about what music to play
  - [X] talk to the neighbors

The [2/4] and [1/3] in the first and second line are cookies indicating how many checkboxes present in this entry have been checked off, and the total number of checkboxes present. This can give you an idea on how many checkboxes remain, even without opening a folded entry. The cookies can be placed into a headline or into (the first line of) a plain list item. Each cookie covers checkboxes of direct children structurally below the headline/item on which the cookie appears(note: Set the variable org-checkbox-hierarchical-statistics if you want such cookies to count all checkboxes below the cookie, not just those belonging to direct children.). You have to insert the cookie yourself by typing either [/] or [%]. With [/] you get an n out of m result, as in the examples above. With [%] you get information about the percentage of checkboxes checked (in the above example, this would be [50%] and [33%], respectively). In a headline, a cookie can count either checkboxes below the heading or TODO states of children, and it displays whatever was changed last. Set the property COOKIE_DATA to either checkbox or todo to resolve this issue.

If the current outline node has an ORDERED property, checkboxes must be checked off in sequence, and an error is thrown if you try to check off a box while there are unchecked boxes above it.

A checkbox can be in one of the three states:

  1. not checked [ ]
  2. partially checked [-]
  3. checked [X]

Checkboxes work hierarchically, so if a checkbox item has children that are checkboxes, toggling one of the children checkboxes makes the parent checkbox reflect if none, some, or all of the children are checked.

If all child checkboxes are not checked, the parent checkbox is also not checked.

- [ ] call people
  - [ ] Peter
  - [ ] Sarah

If some but not all child checkboxes are checked, the parent checkbox is partially checked.

- [-] call people
  - [X] Peter
  - [ ] Sarah

If all child checkboxes are checked, the parent checkbox is also checked.

- [X] call people
  - [X] Peter
  - [X] Sarah

The following commands work with checkboxes:

C-c C-c (org-toggle-checkbox)

Toggle checkbox status or—with prefix argument—checkbox presence at point. With a single prefix argument, add an empty checkbox or remove the current one(note: C-u C-c C-c on the first item of a list with no checkbox adds checkboxes to the rest of the list.). With a double prefix argument, set it to [-], which is considered to be an intermediate state.

C-c C-x C-b (org-toggle-checkbox)

Toggle checkbox status or—with prefix argument—checkbox presence at point. With double prefix argument, set it to [-], which is considered to be an intermediate state.

  • If there is an active region, toggle the first checkbox in the region and set all remaining boxes to the same status as the first. With a prefix argument, add or remove the checkbox for all items in the region.
  • If point is in a headline, toggle checkboxes in the region between this headline and the next—so not the entire subtree.
  • If there is no active region, just toggle the checkbox at point.
C-c C-x C-r (org-toggle-radio-button)

Toggle checkbox status by using the checkbox of the item at point as a radio button: when the checkbox is turned on, all other checkboxes on the same level will be turned off. With a universal prefix argument, toggle the presence of the checkbox. With a double prefix argument, set it to [-].

C-c C-c can be told to consider checkboxes as radio buttons by setting #+ATTR_ORG: :radio t right before the list or by calling M-x org-list-checkbox-radio-mode to activate this minor mode.

M-S-RET (org-insert-todo-heading)

Insert a new item with a checkbox. This works only if point is already in a plain list item (see Plain Lists).

C-c C-x o (org-toggle-ordered-property)

Toggle the ORDERED property of the entry, to toggle if checkboxes must be checked off in sequence. A property is used for this behavior because this should be local to the current entry, not inherited like a tag. However, if you would like to track the value of this property with a tag for better visibility, customize org-track-ordered-property-with-tag.

C-c # (org-update-statistics-cookies)

Update the statistics cookie in the current outline entry. When called with a C-u prefix, update the entire file. Checkbox statistic cookies are updated automatically if you toggle checkboxes with C-c C-c and make new ones with M-S-RET. TODO statistics cookies update when changing TODO states. If you delete boxes/entries or add/change them by hand, use this command to get things back into sync.

Footnotes

  1. 15

    It is possible that Org mode records two timestamps when you are using both org-log-done and state change logging. However, it never prompts for two notes: if you have configured both, the state change recording note takes precedence and cancel the closing note.

    Backrefs: 1

  2. 16

    With the exception of description lists. But you can allow it by modifying org-list-automatic-rules accordingly.

    Backrefs: 1

Manual
Org Mode 9.7.39
Source
View upstream