Mac – org-mode command to create new file from subtree

emacsorg-mode

In Emacs org-mode, is there a command like new-file-from-subtree?

As I envision it, this command would cut the subtree from the current file, paste the subtree into a new buffer, then save the new buffer with the name of the subtree.

Best Answer

I don't believe such a command currently exists. However the following will do the trick:

(require 'org-element)

(defun zin/org-file-from-subtree (&optional name)
  "Cut the subtree currently being edited and create a new file
from it.

If called with the universal argument, prompt for new filename,
otherwise use the subtree title."
  (interactive "P")
  (org-back-to-heading)
  (let ((filename (cond
                   (current-prefix-arg
                    (expand-file-name
                     (read-file-name "New file name: ")))
                   (t
                    (concat
                     (expand-file-name
                      (org-element-property :title
                                            (org-element-at-point))
                      default-directory)
                     ".org")))))
    (org-cut-subtree)
    (find-file-noselect filename)
    (with-temp-file filename
      (org-mode)
      (yank))))

As is, it will not promote the current heading to level 1, it will retain the existing depth. (Promotion should be doable as well, but would require more complex code). It also gives the option of prompting for a new filename, using C-u.

Related Question