【问题标题】:Automatically assigning tags in org-mode在组织模式下自动分配标签
【发布时间】:2015-04-22 05:40:14
【问题描述】:

当标签已经存在于标题中时,我讨厌分配标签。我想找到一种让 org-mode 评估标题的方法(最好是在我点击“enter”之后),如果它包含与我的 org-tag-alist 中的标签匹配的任何单词,则创建这些标签标题。

举个例子:

如果我的 org-tag-alist 中已经有各种个人的姓名和各种项目名称,甚至可能是“今天”、“明天”和“下周”等术语,那么当我输入如下内容时:

“TODO 记得明天向 Joe 询问 XYZ 项目的截止日期。” 并按回车键,然后将评估标题并为该项目生成标签 :Joe:XYZ:Tomorrow:

有没有人看到过这样的事情,或者对我自己如何去做有什么建议?

【问题讨论】:

  • 我只知道内置选项,它们要么基于当前缓冲区中的标签,要么基于全局标签——基于这些标签的完成,以及带有快捷方式的标签的速度命令分配:orgmode.org/manual/Setting-tags.html#Setting-tags 没有专门根据当前标题建议标签的内置函数。您所寻求的当然是可能的,但需要有人编写自定义解决方案。
  • 我对 emacs 和 org 模式比较陌生,但是花了很多时间在网上搜索解决方案,所以我真的没想到解决方案是“内置的”。我希望有人看到或编写了一些代码来做到这一点。看起来 Erik 已经做到了。

标签: emacs tags org-mode


【解决方案1】:

此函数获取点为 1 的条目的标题,将其拆分为单词并将其在 org-tag-alistorg-tag-persistent-alist 中找到的任何单词添加为标签

(defun org-auto-tag ()
  (interactive)
  (let ((alltags (append org-tag-persistent-alist org-tag-alist))
        (headline-words (split-string (org-get-heading t t)))
        )
    (mapcar (lambda (word) (if (assoc word alltags)
                             (org-toggle-tag word 'on)))
            headline-words))
    )

将这样的函数添加到org-capture-before-finalize-hook 以自动标记新捕获的条目可能很有用。

【讨论】:

  • 谢谢埃里克!我会在一两天内尝试一下,看看效果如何。
  • 我可以确认这是可行的,但前提是单词和标签的大小写相同。我所有的标签都是大写的,所以在org-get-heading 周围添加函数upcase 是必要的。
  • 所以org-capture-before-finalize-hook 是用来代替org-capture-after-finalize-hook 的吗?我发现命名有点混乱。我听起来像是在捕获完成“之后”执行标记操作。
  • “before”和“after”钩子之间的唯一区别是捕获缓冲区在运行时是否仍然是最新的。标记之类的东西都可以在其中完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多