回答:
function
これを行うには、ターゲットフォームを使用できる必要があります。
(defun my/org-file-by-date ()
"Create an Org file with current time as name."
(find-file (format-time-string "~/org/%Y-%m-%d--%H-%M-%S.org")))
(add-to-list 'org-capture-templates
'("x" "Template Name" plain
(function my/org-file-by-date)
"Capture template contents"))
編集2:実は、file
フォームなどに渡されたコードはキャプチャ時まで評価されないため、これを行うにはよりコンパクトな方法があります。例については、ErikSjöstrandの回答を参照してください。
編集1:キャプチャインターフェイスを経由せずに同様の機能を取得するには、これらと同様の機能を使用できます。
(defun my/org-file-by-date-with-inline-skeleton ()
"Create Org file from skeleton with current time as name."
(interactive)
(find-file (format-time-string "~/org/%Y-%m-%d--%H-%M-%S.org"))
(insert "Skeleton contents"))
(defun my/org-file-by-date-with-file-skeleton ()
"Create Org file from skeleton file with current time as name."
(interactive)
(let ((filename (format-time-string "~/org/%Y-%m-%d--%H-%M-%S.org")))
(copy-file "path/to/skeleton/file" filename)
(find-file filename)))
そのための組み込み機能はないようです(編集:はい、あります。以下を参照してください)。キャプチャ機能の内部を掘り下げる必要のない最も簡単な解決策は、キャプチャorg-default-notes-file
時にの値をバインドすることです。
(defun my-org-capture-advice (func &rest args)
(let ((org-default-notes-file
(format-time-string "~/org/%Y-%m-%d--%H-%M-%S.org")))
(apply func args)))
(advice-add 'org-capture :around #'my-org-capture-advice)
このアドバイスは非常に早い段階で行われるため、どのテンプレートを使用するかはまだわかりません。ファイルの名前がキャプチャテンプレートによって異なる場合は、おそらくアドバイスが必要になりますorg-capture-set-target-location
。
編集:function
テンプレートターゲットは、それを達成するためのより良い方法です。例については、Aaronの回答を参照してください。
org-capture
関数を呼び出すために通常行うことと同じですC-c c
。
org-capture-templates
キャプチャするファイルを指定しない場合、選択したファイルは希望どおりにフォーマットされます。
org-capture-templates
他の関数を定義せずにすべてをリストに保持する方法は次のとおりです。org-directory
ファイルを保存するディレクトリに変更できます。
(add-to-list 'org-capture-templates
'("x" "Template name" plain
(file (expand-file-name
(format-time-string "%Y-%m-%d--%H-%M-%S.org")
org-directory))
"This string is inserted in the capture"))