Интерактивно введите заголовок, под которым нужно разместить запись, используя захват
Используя шаблоны захвата, подобные приведенному ниже, я могу добавлять записи в различные заголовки в файле. Как я могу вручную ввести заголовок во время захвата, вместо того, чтобы настраивать каждый заголовок для ключа в файле.emacs, как я делаю сейчас?
(setq org-capture-templates
'(
("l" "Log" entry
(file+headline "c:/Org/log.org" "Log")
"\n\n** %?\n<%<%Y-%m-%d %a %T>>"
:empty-lines 1))
5 ответов
Я не верю, что вы можете получить подсказку для заголовка при захвате. Однако вы можете выполнить повторную пересылку из окна захвата, что должно привести к желаемому поведению.
Я бы определил заголовок / файл цели для всех, чтобы, если вы забудете, вы всегда собирали их в одном и том же месте, а затем просто пересылали их после создания. Если вы также установите категорию / тег в этом заголовке, вы сможете легко увидеть пропущенную запись захвата и перефразировать ее по желанию. (Пример ниже)
Тогда вместо того, чтобы закончить с C-c C-c
выбрать для пополнения с C-c C-w
Вам будет предложено выбрать заголовок, в который вы хотите отправить новую запись.
Шаблон захвата, который я использую для этого улова, выглядит следующим образом (адаптировано из настроек захвата Бернта Хансена)
("i"
"Incidents"
entry
(file+headline "~/Work/work.org" "Refile")
"* TODO %^{Ticket} - %^{User}\nSCHEDULED: %^t DEADLINE: %^t\n:PROPERTIES:
\n:DATE: %^U\n:END:\n%^{MANAGER}p%^{HOSTNAME}p%^{LOCATION}p%^{TEL}p\n%c"
:empty-lines 1 :clock-in t :clock-resume t)
(Добавлены разрывы строк, чтобы избежать прокрутки при чтении здесь)
Заголовок настроен следующим образом
* Refile :refile:
:PROPERTIES:
:CATEGORY: Unsorted
:END:
С этим я в конечном итоге все не заправленные задачи отображаются как
Unsorted: Deadline: TODO <Headline> :refile::
В настоящее время я склонен использовать теги в качестве ссылки, если я жду, когда коллеги / менеджеры разберутся с заявкой, или напомню мне поговорить с ними об этом, когда я их увижу, поэтому тег в конце четко выделяется, как и Unsorted. если я пытаюсь вспомнить, в чем проблема (поскольку у меня просто отображается номер дела и имя пользователя, подробности в записи).
Похоже, что в новых версиях org, по крайней мере, для этого можно использовать пользовательские функции в шаблонах захвата.
Вместо:
entry
(file+headline "~/Work/work.org" "Refile")
Ты можешь использовать:
entry
(file+function "~/Work/work.org" function-finding-location)
Где 'function-find-location' - это пользовательская функция, которую вы написали сами, которая может легко запросить заголовок.
Или вы можете пойти еще дальше и определить пользовательскую функцию, которая будет запрашивать как имя файла, так и заголовок (или что-нибудь еще, что вы можете придумать):
entry
(function function-finding-location)
Я действительно не знаю достаточно elisp, чтобы написать эти функции самостоятельно, но это похоже на то, с чего начать. Было бы хорошо, если бы кто-то мог предложить какой-то код. Соответствующая документация здесь:
Я написал функцию, которая будет использоваться с file+function, которая будет запрашивать местоположение при захвате.
Он использует внутреннюю функцию приглашения org-refile, поэтому мы получаем в заголовке дополнения к заголовкам (с максимальным уровнем, переопределяемым на 9). Когда пользователь вводит неизвестный заголовок, он создает его в конце файла.
(defun org-ask-location ()
(let* ((org-refile-targets '((nil :maxlevel . 9)))
(hd (condition-case nil
(car (org-refile-get-location nil nil t t))
(error (car org-refile-history)))))
(goto-char (point-min))
(outline-next-heading)
(if (re-search-forward
(format org-complex-heading-regexp-format (regexp-quote hd))
nil t)
(goto-char (point-at-bol))
(goto-char (point-max))
(or (bolp) (insert "\n"))
(insert "* " hd "\n")))
(end-of-line))
В вашем случае вы используете это так:
(setq org-capture-templates
'(("l" "Log" entry
(file+function "c:/Org/log.org" org-ask-location)
"\n\n** %?\n<%<%Y-%m-%d %a %T>>"
:empty-lines 1))
Во время записи заметки, после окончания записи нажмите C-u C-c C-w
перефразировать под желаемым новым заголовком.
вам также нужно установить эту переменную
(setq org-refile-allow-creating-parent-nodes (quote confirm))
Вы можете установить его t
вместо подтверждения. Но мне нравится это подтверждать, потому что я не часто перехожу к новым целям
Для версии 9.5.x в режиме организации вы можете использовать эту адаптацию кода из первоначальных ответов.
(defun my/org-ask-headline-target (&optional prompt targets)
(let* ((loc-prompt (or prompt "Headline"))
(org-refile-targets (or targets '((nil :maxlevel . 2))))
(hd (condition-case nil
(car (org-refile-get-location loc-prompt nil t))
(error (car org-refile-history)))))
(goto-char (point-min))
(outline-next-heading)
(if (re-search-forward
(format org-complex-heading-regexp-format (regexp-quote hd))
nil t)
(goto-char (point-at-bol))
(goto-char (point-max)))))
в этой версии вам не нужно вставлять\n
, вы можете использовать:empty-lines
(setq org-capture-templates `("t" "Todo" entry
(file+function "/path/to/todo.org" "My Headline" my/org-ask-headline-target)
"* TODO %?"))
но в версии >= 9.5.5C-c C-w
+:refile-targets
имеют тот же результат, и вы можете определить цели для каждого определения шаблона.
(setq org-capture-templates `("t" "Todo" entry
(file+headline "/path/to/todo.org" "My Headline")
"* TODO %?" :refile-targets ((nil :maxlevel . 2))))