Org-mode. Добавление свойства CREATED
2026-10-12
·
3 мин. для прочтения
Org-mode. Добавление свойства CREATED
Содержание
1 Общая информация
- Мы хотим автоматически фиксировать время создания пункта в Org-mode.
- Будем добавлять свойство
CREATED.
2 Использование org-capture
При создании задачи через
org-captureможно добавить временную метку прямо в шаблон захвата.В шаблоне используйте специальные escape-последовательности:
%U: вставит активную временную метку (например,<2026-10-12 Mon>).%T: вставит метку с датой и временем.%t: вставит только дату.
Пример шаблона:
(setq org-capture-templates '(("t" "Task" entry (file+headline "inbox.org" "Tasks") "* TODO %^{Задача}\n CREATED: %U\n %?")))При создании задачи в свойство
CREATEDавтоматически запишется текущая дата и время.
3 Автоматизация для ручного ввода
- Можно добавлять время создания при генерации заголовка вручную (
M-S-RET). - Удобно использовать встроенный модуль
org-expiryизorg-contrib. - Он позволяет автоматически добавлять свойство
CREATEDпри создании нового заголовка:(require 'org-expiry) (setopt org-expiry-created-property-name "CREATED" ; Name of property when an item is created org-expiry-inactive-timestamps t ; Don't have everything in the agenda view ) (defun ecf/insert-created-timestamp() "Insert a CREATED property using org-expiry.el for TODO entries" ;; Org-journal по-своему интерпретирует CREATED (unless (derived-mode-p 'org-journal-mode) (org-expiry-insert-created) (org-back-to-heading) (org-end-of-line) ;; (insert " ") )) ;;;; Whenever a TODO entry is created, I want a timestamp ;;;; Advice org-insert-todo-heading to insert a created timestamp using org-expiry (defadvice org-insert-todo-heading (after ecf/created-timestamp-advice activate) "Insert a CREATED property using org-expiry.el for TODO entries" (ecf/insert-created-timestamp) ) ;;;; Make it active (ad-activate 'org-insert-todo-heading) (require 'org-capture) (defadvice org-capture (after ecf/created-timestamp-advice activate) "Insert a CREATED property using org-expiry.el for TODO entries" ;; Test if the captured entry is a TODO, if so insert the created ;; timestamp property, otherwise ignore (when (member (org-get-todo-state) org-todo-keywords-1) (ecf/insert-created-timestamp))) (ad-activate 'org-capture) ;;;; Add feature to allow easy adding of tags in a capture window (defun ecf/add-tags-in-capture() (interactive) "Insert tags in a capture window without losing the point" (save-excursion (org-back-to-heading) (org-set-tags))) ;;;; Bind this to a reasonable key (define-key org-capture-mode-map "\C-c\C-t" 'ecf/add-tags-in-capture)
4 Интерактивная команда
- Можно сделать интерактивную команду и повесить её на клавиатурное сочетание.
- Вызывать её только тогда, когда нужно.
- Функция вставляет свойство
CREATEDс текущей датой и временем в текущий заголовок и привязывается к клавише.(defun ecf/org-set-created (&optional force) "Set CREATED property in current Org heading. With prefix argument FORCE (C-u), overwrite existing value." (interactive "P") (org-back-to-heading) (let ((existing (org-entry-get nil "CREATED"))) (if (and existing (not force)) (message "CREATED already set: %s (C-u to overwrite)" existing) (org-set-property "CREATED" (format-time-string "[%Y-%m-%d %a %H:%M]")) (message "CREATED set")))) (with-eval-after-load 'org (define-key org-mode-map (kbd "C-c C-.") #'ecf/org-set-created)) [%Y-%m-%d %a %H:%M]— неактивная метка (в квадратных скобках), не попадает в Agenda.org-set-propertyсам создаст блок:PROPERTIES:, если его нет.
