12

Я только начинаю работать с org-mode и представляю себе рабочий процесс, с помощью которого я записываю новые задачи и заметки в файл входящих сообщений org-mode. Для задач, которые превращаются в проекты, я хотел бы представить их в новом файле режима организации, который затем добавляется в мою повестку дня.

Руководство по режиму org описывает перезапись дерева в основном так, как я ищу, за исключением того, что оно только позволяет перезаписать раздел в том же файле. То, что я хотел бы сделать, это взять это дерево и перенести его в новый файл (а затем предпочтительно добавить файл в список повестки дня).

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

2 ответа2

5

Чтобы добавить другие буферы режима org в список refile, вам нужно добавить следующую строку в ваш файл .emacs. Я взял это из конфигурации Брента Хансена (см. Здесь)

; Targets include this file and any file contributing to the agenda - up to 9 levels deep
(setq org-refile-targets (quote ((nil :maxlevel . 9)
                                 (org-agenda-files :maxlevel . 9))))

Только (org-agenda-files :maxlevel .9) действительно необходимо, другая часть устанавливает максимальное количество уровней для повторного использования.

1

Вот функция быстрого и грязного elisp, которая может быть изменена по вашему желанию.

(defun subtree-to-new-file ()
  (interactive)
  "sloppily assists in moving an org subtree to a new file"
  (org-copy-subtree nil t)
;;; This long setq statement gets the title of the first heading, to use as a default filename for the new .org file.
(setq first-heading
  (with-temp-buffer
    (yank)
    (beginning-of-buffer)
    (search-forward " " nil nil 1)
    (setq title-start (point))
    (end-of-visual-line)
    (setq title-end (point))
    (setq first-heading (buffer-substring title-start title-end))
  ))
(setq def-filename (concat first-heading ".org"))
(let ((insert-default-directory t))
  (find-file-other-window  
    (read-file-name "Move subtree to file:" def-filename)
  ))
(org-paste-subtree)
;;; this final command adds the new .org file to the agenda
(org-agenda-file-to-front)
)

Вы можете быстро попробовать этот код, вставив его в буфер *scratch* и нажав Ctrl+j. Затем перейдите к поддереву в файле режима org и нажмите Alt+x, чтобы M-x subtree-to-new-file .

Если вы хотите, чтобы он использовался каждый раз, когда вы используете emacs, и совершенно незнаком с elisp, проще всего было бы вставить этот код куда-нибудь в ваш файл конфигурации .emacs и сохранить его. Вы также можете добавить строку до или после функции, чтобы назначить ей привязку клавиш. Самый простой способ сделать это (но, возможно, не самый лучший) будет выглядеть примерно так: (global-set-key "\C-xw" 'subtree-to-new-file) .

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