Skip to content

Latest commit

 

History

History
265 lines (205 loc) · 9.8 KB

README_CN.org

File metadata and controls

265 lines (205 loc) · 9.8 KB

介绍

Org-supertag 是一个增强 org-mode 标签功能的 Package。它让标签不仅能为节点赋予属性,更能直接操作节点,从而实现更灵活的知识管理。

Org-supertag 采用非侵入式设计,与 org-mode 原有功能和谐共存,为用户提供更多可能性。

为什么需要标签?

传统的线性笔记系统存在局限性:

  1. 单一视角 :: 知识被限制在固定的层级结构中
  2. 难以重组 :: 缺乏灵活的关联机制
  3. 碎片化 :: 知识点之间缺乏有机联系

标签系统则提供了一种更高维的组织方式:

  1. 多维度分类 :: 一个知识点可以同时具有多个属性
  2. 动态重组 :: 随时可以从不同角度重新组织内容
  3. 关系网络 :: 通过标签将零散知识点编织成网络

这种组织方式不仅让知识更容易被检索和重用,更重要的是能够激发知识间的关联,形成知识的复利效应。标签作为一种元数据管理工具,其应用远不止于知识管理领域。

以下是我制作的概念示意图:

picture/figure2.png

主要概念

节点 (Node)

节点是一个抽象的信息单元,它包含了(org-mode 的)标题、属性和内容。每个节点都有唯一标识,可以被引用和检索。

超级标签 (Super Tag)

超级标签是一种元数据模板,它定义了节点的结构和行为。标签不仅描述节点的属性,还能够触发自动化操作。

标签格式为 :#tag-name:

字段 (Field)

字段是节点的结构化属性,它们由标签定义并强制执行。字段系统支持多种数据类型。

行为 (Behavior)

行为是标签的自动化操作,它们由标签定义并强制执行。行为系统支持多种自动化操作。

查询(Query)

查询系统支持节点、标签、字段统一检索,支持多条件复合查询,查询结果可导出和重组。

常用命令

节点操作

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
启动查询界面
  1. 输入关键字(多个关键字用空格分隔)
  2. 选择查询结果(在查询结果页中,用 C-c C-c 选择)
  3. 选择导出方式:
    • 导出到新文件
    • 导出到已有文件
    • 在当前位置插入链接

查询结果会以 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 中设置自定义预设标签

可以在 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 - 所有事件都触发

Changelog

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,并从中受益。