Перефразировать дерево структуры в новый файл режима org?

13

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

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

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

Питер
источник
Почему вы хотите сделать новый файл для каждого проекта? Есть небольшие и большие проекты, так что вы можете иметь файл projects.org в качестве своего рода инкубационного файла, который изначально содержит все проекты, и если проект становится настолько большим, что он заслуживает своего собственного файла, вы можете создать его вручную.
Том
Спасибо, Том. Это мое мышление. Большие вещи перемещаются в свои собственные файлы, когда они становятся слишком большими. Я обнаружил флаг, который позволяет мне перейти к другому файлу в моем списке повестки дня, но только под существующим заголовком. Я собираюсь немного покопаться, чтобы посмотреть, смогу ли я просто добавить дерево в новый пустой файл org ...
Peter
1
@ Петр вы можете переместить любое дерево в другой файл. но сначала вам нужно добавить конечный файлorg-agenda-files
kindahero
@kindahero: это вариант по умолчанию? У меня есть файл «test1.org» с деревом, которое я хочу переместить в пустой файл «test2.org», который был сохранен и добавлен в повестку дня с помощью Cc [. Единственные цели refile, которые он дает мне как варианты завершения, взяты из "test1.org".
Питер

Ответы:

1

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

(определить поддерево в новый файл ()
  (Интерактивный)
  «небрежно помогает в перемещении поддерева org в новый файл»
  (org-copy-subtree nil t)
;;; Этот длинный оператор setq получает заголовок первого заголовка для использования в качестве имени по умолчанию для нового файла .org.
(setq первый заголовок
  (С-Temp-буфер
    (Дергать)
    (Начало-оф-буфера)
    (поиск вперед "" ноль ноль 1)
    (setq title-start (point))
    (С истекшим визуальной линии)
    (setq title-end (точка))
    (setq first-heading (буферная подстрока title-start title-end))
  ))
(setq def-filename (concat, первый заголовок ".org"))
(пусть ((insert-default-directory t))
  (Найти-файлы другого окна  
    (read-file-name "Переместить поддерево в файл:" def-filename)
  ))
(Орг-паста-поддерево)
;;; эта последняя команда добавляет новый файл .org в повестку дня
(Орг-Agenda-файл к передней панели)
)

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

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

Брайан З
источник
Ну, я действительно двинулся в другом направлении отсюда, но это делает свое дело. Я спрашивал об этом давным-давно, и приятно видеть ответ. Спасибо за публикацию этого - это работает как шарм. Возможно, я попытаюсь вспомнить, чего я надеялся достичь здесь, и начну использовать это.
Питер
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
Это позволяет мне добавить дерево к существующему дереву в новом файле, но не к пустому, недавно добавленному файлу без существующего содержимого. Я думаю, что это может быть как можно ближе.
Питер
Вы также можете добавить (setq org-refile-allow-creating-parent-nodes (quote confirm))ссылку, указанную в том же блоке кода от Bernt (см. Ссылку выше). Это позволит вам добавлять их как родительские узлы, а не только как подзаголовки. Я не уверен, что вы можете добавить новый файл на ходу, к сожалению.
Джонатан Лич-Пепин
1
Даже с этой строкой файлы в повестке дня не отображаются в качестве целей для обновления. Похоже, я могу только восстановить существующий заголовок.
Питер
1
Как насчет (setq org-refile-use-outline-path 'file)? Это может сделать файлы в качестве целей.
Брейди Трейнор,