5

В Emacs org-mode есть ли команда, подобная new-file-from-subtree?

Как я предполагаю, эта команда будет вырезать поддерево из текущего файла, вставить поддерево в новый буфер, а затем сохранить новый буфер с именем поддерева.

1 ответ1

4

Я не верю, что такая команда в настоящее время существует. Однако следующее сделает свое дело:

(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))))

Так как он не будет продвигать текущий курс до уровня 1, он сохранит существующую глубину. (Продвижение также должно быть выполнимо, но требует более сложного кода). Это также дает возможность запрашивать новое имя файла, используя C-u .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .