org-mode 命令从子树创建新文件?

inc*_*man 6 emacs org-mode

在 Emacs 组织模式中,是否有类似的命令new-file-from-subtree

正如我所设想的那样,此命令将从当前文件中剪切子树,将子树粘贴到新缓冲区中,然后使用子树的名称保存新缓冲区。

Jon*_*pin 5

我不相信目前存在这样的命令。但是,以下内容可以解决问题:

(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))))
Run Code Online (Sandbox Code Playgroud)

照原样,它不会将当前航向提升到级别 1,而是会保留现有深度。(推广也应该是可行的,但需要更复杂的代码)。它还提供了提示输入新文件名的选项,使用C-u.