有没有办法用当前时间戳插入 org-mode 模板?
Posted
技术标签:
【中文标题】有没有办法用当前时间戳插入 org-mode 模板?【英文标题】:Is there a way to insert org-mode template with current timestamp? 【发布时间】:2020-11-17 17:32:19 【问题描述】:是否可以通过键入<e
并点击<TAB>
在组织模式下插入模板,这将导致:
:PROPERTIES:
:ERSTELLT: [2020-11-17 Di 21:18]
:END:
通过查看这些参考资料:
Org-mode template expansions for easy code block insertion
Creating Org Mode Structure Templates,
我能够定义自己的模板,但没有时间戳:
:PROPERTIES:
:ERSTELLT:
:END:
插入时间戳的函数是:(org-time-stamp '(16) t)
,但是它会在 org-mode 开始时间进行评估并继续插入相同的时间戳:
(eval-after-load 'org
'(progn
(add-to-list 'org-structure-template-alist
(list "r"
(concat ":PROPERTIES:\n"
":ERSTELLT: " (org-time-stamp '(16) t) "\n"
":END:" )
))))
Emacs 版本:GNU Emacs 26.3 (build 1, i686-w64-mingw32) of 2020-04-03
组织模式版本:9.1.9 (release_9.1.9-65-g5e4542)
【问题讨论】:
org-structure-template-alist
的格式(和多功能性)在 Org 9.2 中发生了变化:上面的引用使用了现在已经过时的 old 版本。理由是还有其他模板扩展机制(例如 tempo 和 yasn-ps),因此 Org 模式不需要另一个。 不使用org-structure-template-alist
可能会更好:即使您可以在当前版本中使用,但升级后将无法使用。但是请编辑您的问题并添加您正在使用的组织模式版本:这应该可以帮助人们找出建议的内容。
@NickD 谢谢,我想我需要更新我的 emacs 并改用 yasn-p =)
【参考方案1】:
您最好为此目的定义一个捕获模板。这真的取决于你想做什么。通常,如果您简要概述您想要的实际结果/功能,而不仅仅是您认为可能是解决方案的一部分,您会得到更好的答案。
Org 的捕获模板系统非常灵活和强大,可以轻松添加新条目、属性绘制、截止日期等。它还支持广泛的 %- 控制序列,用于设置属性、添加活动和非活动等操作时间戳、捕获链接、当前选择、剪贴板项目等。
下面是我的捕获模板定义的副本,供您参考。费用模板使用属性并设置属性,而其他一些模板则在各个地方的条目中添加时间戳。使用捕获模板还可以完成更多工作。
顺便说一句,我认为您对 org-time-stamp 函数的使用不符合您的要求。检查文档,但我认为您真正想要的当前时间戳是 (org-time-stamp t t)
(setq org-capture-templates
(quote
(("t" "todo" entry
(file+headline "~/Documents/org-data/refile.org" "Tasks")
"* TODO %?\n\n %a"
:empty-lines-after 1)
("r" "respond" entry
(file+headline "~/Documents/org-data/refile.org" "Tasks")
"* NEXT Respond to %:from\n SCHEDULED: %t\n\n %:subject\n %i\n %? \n %a"
:empty-lines-after 1)
("n" "note" entry
(file "~/Documents/org-data/notes.org")
"* %U %? :NOTE:\n\n %i\n %a"
:empty-lines-after 1)
("p" "phone" entry
(file+headline "~/Documents/org-data/refile.org" "Comms")
"* Pone: %? :PHONE:\n\n"
:empty-lines-after 1 :clock-in t :clock-resume t)
("e" "expense" entry
(file+headline "~/Documents/org-data/refile.org" "Expenses")
"* Expense: %^Description :EXPENSE:\n :PROPERTIES:\n :Description: %\\1\n :Date: %u\n :Amount: %^Amount\n :END:\n\n | Date | %u |\n | Description | %\\1 |\n | Amount | %\\2 |\n"
:empty-line-after 1)
("m" "mail" entry
(file+headline "~/Documents/org-data/refile.org" "Comms")
"* %U Mail:%? %:subject \n\n From %:from\n\n %i\n %a"
:empty-lines-after 1))))
【讨论】:
【参考方案2】:您是否有理由将其视为模板?
您似乎只是想插入一个属性,您可以使用以下方法:
(org-entry-put (point) "ERSTELLT" (format-time-string "[%Y-%M-%d %a %H:%M]" (float-time)))
这将为当前点下的标题插入属性“ERSTELLT”(并在必要时创建一个新的:PROPERTIES:
抽屉),当前纪元时间格式化为组织模式时间戳。如果您想要不同的时间戳,可以将(float-time)
替换为您想要表示纪元时间的任何整数。
您无法像模板一样将属性抽屉插入到任何您想要的位置,但我不确定为什么您需要将属性抽屉仅作为标题的一部分才有意义。
【讨论】:
我之所以使用这些属性是因为 orgzly app for android 会自动创建它们,并且在同步到桌面时它们通常对搜索很有用。以上是关于有没有办法用当前时间戳插入 org-mode 模板?的主要内容,如果未能解决你的问题,请参考以下文章