I want to know how I can customize the single character commands on start of org-headings.

For example, if I hit "a" on an org-heading, it invokes "archive".

Where is this defined?;)

1 Answer 1


They are defined in org-speed-commands which you can customize. The manual says:

17.3 Speed Keys

Single keystrokes can execute custom commands in an Org file when point is on a headline. Without the extra burden of a meta or modifier key, Speed Keys can speed navigation or execute custom commands. Besides faster navigation, Speed Keys may come in handy on small mobile devices that do not have full keyboards. Speed Keys may also work on TTY devices known for their problems when entering Emacs key chords.

By default, Org has Speed Keys disabled. To activate Speed Keys, set the variable ‘org-use-speed-commands’ to a non-‘nil’ value. To trigger a Speed Key, point must be at the beginning of an Org headline, before any of the stars.

Org comes with a pre-defined list of Speed Keys. To add or modify Speed Keys, customize the option ‘org-speed-commands’. For more details, see the variable’s docstring. With Speed Keys activated, ‘M-x org-speed-command-help’, or ‘?’ when point is at the beginning of an Org headline, shows currently active Speed Keys, including the user-defined ones.

and C-h v org-speed-commands says:

org-speed-commands is a variable defined in ‘org-keys.el’.

Its value is shown below.

Alist of speed commands.

The car of each entry is a string with a single letter, which
must be assigned to ‘self-insert-command’ in the global map.

The cdr is either a command to be called interactively, a
function to be called, or a form to be evaluated.

An entry that is just a list with a single string will be
interpreted as a descriptive headline that will be added when
listing the speed commands in the Help buffer using the ‘?’ speed

  This variable may be risky if used as a file-local variable.
  This variable was introduced, or its default value was changed, in
  version 9.5 of the Org package that is part of Emacs 28.1.
  You can customize this variable.

(("Outline Navigation")
 ("n" org-speed-move-safe 'org-next-visible-heading)
 ("p" org-speed-move-safe 'org-previous-visible-heading)
 ("f" org-speed-move-safe 'org-forward-heading-same-level)
 ("b" org-speed-move-safe 'org-backward-heading-same-level)
 ("F" . org-next-block)
 ("B" . org-previous-block)
 ("u" org-speed-move-safe 'outline-up-heading)
 ("j" . org-goto)
 ("g" org-refile
 ("Outline Visibility")
 ("c" . org-cycle)
 ("C" . org-shifttab)
 (" " . org-display-outline-path)
 ("s" . org-toggle-narrow-to-subtree)
 ("k" . org-cut-subtree)
 ("=" . org-columns)
 ("Outline Structure Editing")
 ("U" . org-metaup)
 ("D" . org-metadown)
 ("r" . org-metaright)
 ("l" . org-metaleft)
 ("R" . org-shiftmetaright)
 ("L" . org-shiftmetaleft)
 ("i" progn
  (forward-char 1)
  (call-interactively 'org-insert-heading-respect-content))
 ("^" . org-sort)
 ("w" . org-refile)
 ("a" . org-archive-subtree-default-with-confirmation)
 ("@" . org-mark-subtree)
 ("#" . org-toggle-comment)
 ("Clock Commands")
 ("I" . org-clock-in)
 ("O" . org-clock-out)
 ("Meta Data Editing")
 ("t" . org-todo)
 ("," org-priority)
 ("0" org-priority 32)
 ("1" org-priority 65)
 ("2" org-priority 66)
 ("3" org-priority 67)
 (":" . org-set-tags-command)
 ("e" . org-set-effort)
 ("E" . org-inc-effort)
 ("W" lambda
  (interactive "sMinutes before warning: ")
 ("Agenda Views etc")
 ("v" . org-agenda)
 ("/" . org-sparse-tree)
 ("o" . org-open-at-point)
 ("?" . org-speed-command-help)
 ("<" org-agenda-set-restriction-lock 'subtree)
 (">" org-agenda-remove-restriction-lock))
  • ... and yet another question, another answer and more deafening silence... I wonder why I bother.
    – NickD
    Dec 19, 2023 at 22:19
  • I knew there was something I had forgotten. Deeply sorry for this. I will be more awake. Thanks a bunch, again. Jan 15 at 20:30
  • I've suggested this before but let me try again: go to all your questions and review them all, particularly the ones that have been answered but have not been accepted by you. Check whether you should accept any of them and if not, give feedback: why are they not satisfactory in your view? It may be that after a bit of back and forth, a satisfactory answer can be provided: a win/win for both you and the person who answers. After all, that's how the site is supposed to work.
    – NickD
    Jan 15 at 21:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.