Org Mode: Cutting the current list item (including nested lists) with a speed command
Posted: - Modified: | emacs, org
: Limited my-org-cut-subtree-or-list-item
to Inbox.org and news.org.
Defining shortcuts in org-speed-commands
is
handy because you can use these single-key
shortcuts at the beginning of a subtree. With a
little modification, they'll also work at the
beginning of list items.
(defun my-org-use-speed-commands-for-headings-and-lists ()
"Activate speed commands on list items too."
(or (and (looking-at org-outline-regexp) (looking-back "^\**" nil))
(save-excursion (and (looking-at (org-item-re)) (looking-back "^[ \t]*" nil)))))
(setq org-use-speed-commands 'my-org-use-speed-commands-for-headings-and-lists)
I want k
to be an org-speed-commands
that cuts
the current subtree or list item. This is handy
when I'm cleaning up the Mastodon toots in my
weekly review or getting rid of outline items that
I no longer need. By default, k
is mapped to
org-cut-subtree
, but it's easy to override.
(defun my-org-cut-subtree-or-list-item (&optional n)
"Cut current subtree or list item."
(cond
; limit this to only Inbox.org and news.org
((not (string-match (regexp-opt '("Inbox.org" "news.org"))
(or (buffer-file-name) "")))
(message "Let's only cut things in Inbox.org or news.org")) ; do nothing
((and (looking-at org-outline-regexp) (looking-back "^\**" nil))
(org-cut-subtree n))
((looking-at (org-item-re))
(kill-region (org-beginning-of-item) (org-end-of-item)))))
(with-eval-after-load 'org
(setf (alist-get "k" org-speed-commands nil nil #'string=)
#'my-org-cut-subtree-or-list-item))
So now, if I put my cursor before "1." below and press k
:
- this
1. is a
- nested
2. list
- with levels
it will turn into:
- this
- list
- with levels
You can find out a little more about Org Mode speed commands in the Org manual: (info "(org) Speed Keys")
.
This is part of my Emacs configuration.
You can e-mail me at sacha@sachachua.com.