The built-in method used by Emacs Org mode to insert new headings does not automatically prepend the inserted heading with TODO, except when C-S-<return>
is pressed. I prefer using C-<return>
for all headings, whether they are to-do tasks or not, to maintain my workflow efficiency. This motivated me to write the function outlined in this article.
The function below can be triggered by pressing C-<return>
to insert a new Org heading. If activated while on a TODO task, it will prefix the inserted heading with TODO, effectively creating a new to-do item. Additionally, for users of evil-mode, the function transitions into insert mode.
;; Function: (my-org-insert-heading-respect-content-and-prepend-todo)
;; Author: James Cherti
;; License: MIT
;; Key binding: Ctrl-Enter
;; URL: https://www.jamescherti.com/emacs-add-todo-keyword-to-new-org-mode-headings/
;;
;; Description: The function inserts a new heading at the current cursor
;; position, and prepends it with "TODO " if activated while on a "TODO" task,
;; thus creating a new to-do item. In addition to that, for those utilizing
;; evil-mode the function transitions the user into insert mode right after the
;; "TODO " insertion.
(defun my-org-insert-heading-respect-content-and-prepend-todo ()
"Insert a new org-mode heading respecting content and prepend it with 'TODO'.
Additionally, ensure entry into insert state when evil-mode is active."
(interactive)
(let ((entry-is-todo (org-entry-is-todo-p)))
(when (bound-and-true-p evil-mode)
(evil-insert-state))
(org-insert-heading-respect-content)
(when entry-is-todo
(just-one-space)
(insert "TODO")
(just-one-space))))
;; Replace the key bindings for inserting headings in Org mode
(define-key org-mode-map (kbd "C-<return>")
'my-org-insert-heading-respect-content-and-prepend-todo)
Code language: Lisp (lisp)