In org-mode, I often have the need to jump to a top-level heading matching some word.
Since an org-mode buffer can be searched just like any other, I can
simply invoke forward search with
C-s, but this will match all
occurrences of the text, instead of limiting the search to headings only.
This makes it hard to search for a phrase like “Travel”, for which I have a top-level heading, but also often occurs elsewhere in my notes.
I have a solution of the following form:
- Launch a regular expression search
- Pre-fill the text input with
^*so that only headings are matched.
First, define a custom search function. It puts the keys
^* in the
“unread command events” list (i.e, a list of events waiting to be seen
by emacs), and then launches interactive forward regular expression search.
(defun stefan/isearch-heading () (interactive) (setq unread-command-events (listify-key-sequence "^* ")) (isearch-mode t t nil t))
Next, we add a keybinding for org-mode:
(defun org-mode-keys () (interactive) (local-set-key (kbd "C-c g") 'stefan/isearch-heading) ) (add-hook 'org-mode-hook 'org-mode-keys)
And that’s it! Pressing
C-c g (for “go”) in org-mode will
now present you with a search prompt. Typing a heading name will take you
there directly, at which point you can choose to expand it with the