Skip to content

feat: add knowledge point retrieval function, file placed in plugin/k… - #1190

Open
LucasandElliot wants to merge 1 commit into
obgnail:masterfrom
LucasandElliot:feat/add-knowledge-point-search
Open

feat: add knowledge point retrieval function, file placed in plugin/k…#1190
LucasandElliot wants to merge 1 commit into
obgnail:masterfrom
LucasandElliot:feat/add-knowledge-point-search

Conversation

@LucasandElliot

Copy link
Copy Markdown

PR: 知识点检索插件 (knowledgePoint)

Summary

  • 实现 Typora 自定义插件 knowledgePoint,通过 @@知识点名@@ 语法在 Markdown 文档中标记和检索知识点
  • 提供侧边栏面板、搜索过滤、跨文件跳转、WYSIWYG 内联渲染、@@ 输入自动补全等完整功能
  • 插件遵循 Typora 自定义插件架构:主代码位于 plugin/knowledgePoint.js,之前实现形式是自定义插件形式,因此设置如下,原本插件代码位于 plugin/custom/plugins/,配置位于 plugin/global/settings/,但因为提交pr,所以删除了 plugin/global/settings/plugin/custom/plugins/,只更新了和提交了plugin/knowledgePoint.js

背景

当前仓库的 Typora 插件框架支持通过 plugin/custom/plugins/ 目录添加自定义插件,配置文件放在 plugin/global/settings/custom_plugin.user.toml。本插件完全遵循此架构,无需修改框架核心代码。

功能清单

功能 说明
@@name@@ 标记语法 可配置前缀/后缀(默认 @@
WYSIWYG 内联渲染 实时预览模式下隐藏 @@,知识点名以紫色字体 + 淡紫荧光笔底色显示
自动索引 扫描当前文件/文件夹所有 .md 文件,首次出现为定义,后续为引用
侧边栏面板 Ctrl+Shift+K 触发,可拖拽调整宽度(240-600px)
搜索过滤 实时模糊匹配知识点名称
点击跳转 当前文件滚动+高亮(2s 渐隐),跨文件同窗口打开并跳转到对应行
输入补全 输入 @@ 弹出下拉列表,↑↓ 循环选择,Enter/Tab 插入
窗口控制 最小化/最大化/关闭按钮(Windows 风格)
实时更新 编辑时自动刷新索引,刷新按钮自动保存当前文件
窗口聚焦重扫 窗口重新获得焦点时自动重新扫描
快捷键 Esc 关闭面板(搜索框 Esc 先清空再关闭)

custom_plugin.user.toml 配置项

[knowledgePoint]
name = "知识点检索"
enable = true
hide = false
order = 1

hotkey = "ctrl+shift+k"
tag_prefix = "@@"
tag_suffix = "@@"
default_scope = "folder"

核心设计

  • 非破坏性:插件从不修改文档内容,高亮和内联渲染通过纯 CSS + DOM 操作实现
  • 确定性定义分配:按文件名字母序排序,跨文件第一个出现为定义
  • DOM 关联:独立扫描编辑器 DOM [cid] 元素,将索引条目映射到实际 DOM 节点
  • 三级回退导航:Typora API → 工具方法 → 剪贴板复制 + 提示
  • XSS 安全:上下文预览使用 textContent 而非 innerHTML

已知限制

  • WYSIWYG 内联渲染依赖 MutationObserver,大量 DOM 变化时可能有性能开销
  • 内联渲染在源码模式下不生效(源码模式原样显示 @@...@@
  • 知识点标记仅支持纯文本名称,不支持嵌套或特殊字符
  • 跨文件跳转依赖 Typora 内部 API (File.editor.library.openFile),不同版本可能有差异

Test plan

  1. 在 Typora 中打开 typoraPluginWriting 文件夹作为工作目录
  2. 在任意 .md 文件中输入 @@测试知识点@@ 并保存
  3. Ctrl+Shift+K 打开侧边栏,确认知识点出现在列表中
  4. 在搜索框中输入关键词,验证过滤功能
  5. 点击知识点条目,验证跳转和高亮动画
  6. 切换到 WYSIWYG 模式,验证 @@ 隐藏和紫色荧光笔样式
  7. 在编辑器中输入 @@,验证自动补全下拉列表出现
  8. 使用 ↑↓ 导航、Enter 选择,验证补全插入
  9. 测试跨文件跳转:在多文件中标记同一知识点,点击跳转
  10. 测试面板窗口控制:最小化、最大化、关闭按钮
  11. 测试 Esc 键行为:先清空搜索框,再关闭面板

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant