本插件实现了一个更加用户友好的书签功能。支持拖放添加、书签组管理、复制链接、动态查询等功能。
🔔 注意!本插件默认会屏蔽侧边栏当中思源的内置书签按钮!你可以在设置当中禁用这一默认行为。
以下介绍最核心的功能,其他细节功能请自行探索。
📝 更新日志见: CHANGELOG.md
在顶栏中点击「添加」,可以新建一个书签组,书签组分类两种类型:
-
静态书签组:普通的书签组,由用户手动增加、减少书签项目
- 支持自定义拖放功能
- 支持将书签组内项目移动到不同组内
-
动态书签组:基于查询的动态书签组,将查询结果列举在侧栏中;支持以下规则
-
SQL 查询:输入 sql 查询语句
-
反向链接:输入块 ID,查询对应块的反链;用户可以指定后处理方案
- 无后处理:即查询到什么块,就直接显示什么块
- 容器首个子块:当搜索到的引用块为列表项、引述块的第一个子块时,显示完整的容器块
- 显示为文档块:显示引用块所在的文档,而非引用块本身
注:如果你对「后处理方案」表示疑惑,不能理解,那么请参考 Q&A小节
-
块属性:查询指定块属性,输入需要查询的块属性,可以是:
<属性名>
,例如custom-b
,返回所有含有custom-b
自定义属性的块<属性名>=<val>
,例如bookmark=测试
,返回所有「测试」书签内的块<属性名> like <val>
-
在静态书签组当中,你可以通过这几种方法添加书签项目:
-
编辑器块拖放:在编辑器中,直接将块的图标拖入书签组内
-
书签组右键菜单中添加:
- 从剪贴板中添加:你可以复制一个块的 ID、引用、链接,插件会自动识别并将其添加到书签组中
- 添加当前文档块:会将当前正在编辑的文档添加到书签组中
动态书签组主要通过执行查询来获取书签项目。
- 全局更新:点击顶栏的更新按钮,更新所有的书签组
- 右键菜单:点击动态组右键菜单,重新在当前组中执行查询,并获取最新的书签项目
在动态组中,支持基于 {{VarName}}
的变量渲染。变量渲染允许你在规则中插入一些动态变量,这些变量会在渲染时被替换为实际的值。目前支持的变量包括:
{{CurDocId}}
:当前活动文档的 ID{{CurRootId}}
:{{CurDocId}}
的别名,二者等价{{yyyy}}
:当前年份(四位数){{MM}}
:当前月份(两位数){{dd}}
:当前日期(两位数){{yy}}
:当前年份的后两位数{{today}}
:当前日期(等价于{{yyyy}}{{MM}}{{dd}}
)
案例1,SQL 规则:查看本月所有更新
select * from blocks where
type='d' and updated like '{{yyyy}}{{MM}}%'
order by updated desc
案例2,属性规则:查看本月所有日记
custom-dailynote-% like {{yyyy}}{{MM}}%
案例3,反链规则:查看当前文档的反链:
{{CurDocId}}
-
替换内置书签:如果开启,在插件在启动的时候会自动屏蔽默认的思源书签,并且覆盖书签的快捷键(默认为 Alt + 3)
-
展示样式:插件提供了两种样式
-
隐藏项目:书签项目可能由于被删除、或者块所在的笔记本被关闭而无法被索引到
- 隐藏关闭项目:开启后,隐藏那些来自被关闭的笔记本中的项目
- 隐藏无效项目:开启后,隐藏那些被删除的项目
-
书签组
- 展示了所有的书签组
- 鼠标拖放可以调整各个书签组的先后顺序
- 可以通过取消显示,来隐藏一些暂时不需要的书签组
插件当中的每个组件部分都有特定的 class
名称,如果有自定义需求(例如修改字体)可以自行编写 css 样式并放入思源的「代码片段」中。
-
顶层:
.custom-bookmark-body
-
卡片模式:
.custom-bookmark-body.card-view
-
卡片模式下的背景颜色基于两个 css 变量:
- 底层背景颜色:
--fmisc-bookmark-body-bg__card-view
,默认为var(--b3-theme-surface-light)
- 卡片背景颜色:
--fmisc-bookmark-group-bg__card-view
,默认为var(--b3-theme-background)
- 底层背景颜色:
-
-
各个书签组:
.custom-bookmark-group
- 书签组的标头:
.custom-bookmark-group-header
- 书签列表:
.custom-bookmark-group-list
- 书签组的标头:
-
各个书签项目:
.custom-bookmark-item
案例:
-
修改书签项目的字体
.custom-bookmark-item.b3-list-item { font-size: 20px; line-height: 24px; }
-
修改卡片背景颜色:
:root { --fmisc-bookmark-body-bg__card-view: white; --fmisc-bookmark-group-bg__card-view: grey; }
显示为文档块 比较好理解,也就是说在书签项目中显示引用块来自的文档,而非引用块本身。如果出现多个引用块来自同一个文档的情况,只显示一个文档块项目,而不会重复显示。
容器首个子块 的含义是:如果查询到的块为某个容器块的第一个段落子块,那么我们将视为查询到容器块本身。
这里举一个例子:在某个列表项当中引用了 文档X
。
- Foo
- [[文档X]]
- AAA
- BBB
- Boo
如果使用 SQL 等查询文档X的反链,那么最后会查询到 [[文档X]]
这个段落块身上,也就是:
[[文档X]]
而如果用户在这里开启了「容器首个子块」这个后处理方案,那么在书签显示当中,会显示完整的列表项块本身。
- [[文档X]]
- AAA
- BBB
- 新建书签组
- 选择动态组、属性规则
- 属性规则中填写
bookmark
,或者bookmark=<书签名称>
- 可以给块添加块命名
- 书签项目在显示的时候,如果有命名(name)会优先显示命名,否则就显示块的内容(content)
- 对于动态组,会重新执行查询,并显示最新的查询结果
- 对于静态组,会查询当中每个项目(块)的最新情况,并根据最新结果更新项目
注: 在移动端中将无法替换内置的书签功能,只能通过插件面板单独打。
不过由于插件开发在桌面端上,所以移动端中有些操作可能会有些不方便。