Org-supertag 是一个增强 org-mode 标签功能的 Package。它让标签不仅能为节点赋予属性,更能直接操作节点,从而实现更灵活的知识管理。
Org-supertag 采用非侵入式设计,与 org-mode 原有功能和谐共存,为用户提供更多可能性。
传统的线性笔记系统存在局限性:
- 单一视角 :: 知识被限制在固定的层级结构中
- 难以重组 :: 缺乏灵活的关联机制
- 碎片化 :: 知识点之间缺乏有机联系
标签系统则提供了一种更高维的组织方式:
- 多维度分类 :: 一个知识点可以同时具有多个属性
- 动态重组 :: 随时可以从不同角度重新组织内容
- 关系网络 :: 通过标签将零散知识点编织成网络
这种组织方式不仅让知识更容易被检索和重用,更重要的是能够激发知识间的关联,形成知识的复利效应。标签作为一种元数据管理工具,其应用远不止于知识管理领域。
以下是我制作的概念示意图:
节点是一个抽象的信息单元,它包含了(org-mode 的)标题、属性和内容。每个节点都有唯一标识,可以被引用和检索。
超级标签是一种元数据模板,它定义了节点的结构和行为。标签不仅描述节点的属性,还能够触发自动化操作。
标签格式为 :#tag-name:
。
字段是节点的结构化属性,它们由标签定义并强制执行。字段系统支持多种数据类型。
行为是标签的自动化操作,它们由标签定义并强制执行。行为系统支持多种自动化操作。
查询系统支持节点、标签、字段统一检索,支持多条件复合查询,查询结果可导出和重组。
M-x org-supertag-node-create
- 将当前标题转换为 supertag 节点
M-x org-supertag-query
- 搜索节点
M-x org-supertag-node-add-reference
- 为当前节点添加引用
M-x org-supertag-node-remove-reference
- 移除当前节点的引用
M-x org-supertag-tag-add-tag
- 为当前 org-headline 添加标签,添加标签的同时,自动创建节点,同时设置字段(如果字段存在)
M-x org-supertag-tag-batch-add-tag
- 批量为多个 org-headline 添加标签
M-x org-supertag-tag-remove
- 移除当前节点的标签
M-x org-supertag-tag-set-field-value
- 设置字段值
M-x org-supertag-tag-set-field-and-value
- 同时设置标签字段和值
M-x org-supertag-query
- 启动查询界面
- 输入关键字(多个关键字用空格分隔)
- 选择查询结果(在查询结果页中,用 C-c C-c 选择)
- 选择导出方式:
- 导出到新文件
- 导出到已有文件
- 在当前位置插入链接
查询结果会以 org-mode 的链接形式呈现,点击链接可以直接跳转到对应节点。
M-x org-supertag-query-in-buffer
- 在当前 buffer 中查询
M-x org-supertag-query-in-files
- 在指定文件中查询,可以指定多个文件
M-x org-supertag-behavior-attach
- 为标签附加行为
M-x org-supertag-behavior-execute-at-point
- 在当前节点执行行为,会提示选择行为名称
M-x org-supertag-behavior-execute-batch
- 在当前节点批量执行多个行为,可以选择多个行为依次执行
(use-package org-supertag
:straight (:host github :repo "yibie/org-supertag")
:after org
:config
(org-supertag-setup))
org-supertag 提供了一些预设的标签类型,以下仅为举例:
- project
- 项目管理
- status: 状态 (planning/active/on-hold/completed/cancelled)
- priority: 优先级 (high/medium/low)
- deadline: 截止日期
- owner: 负责人
- task
- 任务管理
- status: 状态 (todo/in-progress/blocked/done/cancelled)
- priority: 优先级 (A/B/C)
- due: 截止日期
- assignee: 负责人
其他预设标签包括: person, meeting, place, company, note 等。
M-x org-supertag-tag-edit-preset
- 编辑预设标签
使用该命令编辑预设标签,将在 init.el 中自动添加 custom-set-variables 的配置。
可以在 init.el 中通过设置 `org-supertag-preset-tags` 变量来自定义预设标签。每个预设标签由标签名和字段定义组成:
(setq org-supertag-preset-tags
'(("book" . ((:name "status"
:type options
:options ("reading" "completed" "want-to-read")
:description "阅读状态")
(:name "rating"
:type number
:description "评分")
(:name "author"
:type string
:description "作者")))))
提供三种导出方式,支持命令和快捷键操作:
- 命令:
M-x org-supertag-query-export-results-to-new-file
- 快捷键:
C-c C-x n
- 功能: 将查询结果导出到新建文件,支持选择插入位置:
- 文件末尾
- 作为子标题
- 作为同级标题
- 命令:
M-x org-supertag-query-export-results-to-file
- 快捷键:
C-c C-x f
- 功能: 将查询结果导出到指定文件的选定位置
- 命令:
M-x org-supertag-query-export-results-here
- 功能: 在光标处以 org-mode 区块形式插入结果
C-c C-c
- 切换当前行的选择状态
C-c C-x C-r
- 选中区域内的所有结果
C-c C-x C-u
- 取消选中区域内的所有结果
行为系统是 org-supertag 的核心特性之一,它让标签具有了自动化操作的能力。
org-supertag 提供三种类型的行为:
最基本的行为单元:
- 单一功能,通过参数实现灵活性
- 直接操作节点属性或内容
- 示例:
- @todo - 设置任务状态
- @priority - 设置优先级
- @timestamp - 添加时间戳
- @property - 设置属性
- @clock - 管理时间记录
在基础行为上的扩展:
- 预设参数组合
- 针对特定场景优化
- 示例:
- @done - 完成任务并记录时间
- @start - 开始任务并记录时间
- @cancel - 取消任务并添加说明
多个行为的工作流:
- 将多个行为串联成工作流
- 实现复杂的自动化场景
- 示例:
- @meeting - 添加模板 + 设置日程 + 标记待办
- @archive - 标记完成 + 移动到归档文件
行为定义存放在 ~/.emacs.d/org-supertag/org-supertag-custom-behavior.el 中:
;; 基础行为示例
(org-supertag-behavior-register "@todo"
:trigger :on-add ; 触发时机
:action #'org-supertag-behavior--set-todo ; 行为函数
:params '(state) ; 参数类型
:style '(:face (:foreground "blue" :weight bold) ; 样式定义
:prefix "☐"))
;; 派生行为示例
(org-supertag-behavior-register "@done"
:trigger :on-add
:list '("@todo=DONE") ; 预设参数
:style '(:face (:foreground "green" :weight bold)
:prefix "✓"))
;; 组合行为示例
(org-supertag-behavior-register "@done+archive"
:trigger :on-add
:list '("@todo=DONE" ; 行为链
"@property=ARCHIVE_TIME=now"
"@archive")
:style '(:face (:foreground "gray50" :strike-through t)
:prefix "📦"))
行为可以在不同时机触发:
- :on-add - 添加标签时触发
- :on-remove - 移除标签时触发
- :on-change - 节点内容变化时触发
- :always - 所有事件都触发
- 2024-12-31
- 1.0.0 release
- feat behavior-system
- 完整的行为系统实现,形成自动工作流
- 三层行为架构(基础/派生/组合)
- 完整的触发器系统
- 丰富的行为库函数
- 样式系统支持
- docs
- 提供交互式演示文档 DEMO.org
- refactor
- 核心重构
- 优化数据结构
- 改进错误处理
- 提升性能表现
- 2024-12-20
- 0.0.2 release
- fix org-supertag-remove
- 修复移除标签不生效的问题
- fix org-supertag-tag-add-tag
- 修复添加标签时,可添加重复标签到 org-headline 的问题
- feat org-supertag-tag-edit-preset
- 编辑预设标签
- feat org-supertag-query-in-buffer
- 在当前 buffer 中查询
- feat org-supertag-query-in-files
- 在指定文件中查询,可以指定多个文件
- 2024-12-19
- 0.0.1 release
- ✅能够提供更多查询的范围,比如针对一个文件或多个文件的查询
- ✅初步实现一个命令系统,让标签自动触发命令,比如节点添加了名为 Task 的标签时,它会自动设置为 TODO,并自动设置优先级为 A,以及自动将节点的背景色改为黄色
- 初步与 AI 结合,不同的标签关联不同的 Prompt,比如当节点被标记为 “任务” 时,自动触发 AI 命令,令该节点自动生成一个任务列表
- 实现一个任务调度系统,让多个节点组合起来,完成一系列的任务,比如自动设置晚上 9 点进行每日回顾,并自动将回顾结果插入到回顾节点中(实验性功能,未必会实现)
- 像 Tana 那样,提供更多视图(实验性功能,未必会实现)
感谢 Tana 的灵感,感谢 org-mode 的强大,感谢 emacs 的强大。
我衷心祝愿你能够喜欢这个 Package,并从中受益。