-
嵌入式系列插件第三弹:draw.io 插件
2025-11-11 08:29@yuxinzhao 当前是手动切需要展示的页到第一页的,就是这样子时间久了可能容易忽略这个 svg 文件是一个 draw.io 文件(毕竟右键菜单都多了主动操作的一步),如果加一个 hover 时右上角显示的徽标或者像网络图片网络图片一样有个固定的标识可能会更好。至于显示页数其实用户手动加一个页数文本放到第一页也行 😄

-
嵌入式系列插件第三弹:draw.io 插件
2025-11-10 17:45相当好用,能预览还能直接编辑。狠狠的拖了几个 .drawio 文件到 \data\storage\petal\siyuan-drawio-plugin 下 👍
-
写了一个思源 Copilot 插件,实现基于思源笔记内容进行 AI 问答和编辑
2025-11-06 15:27非常好插件,使我思源欲暴增!😄
期待进化到近 Cursor 体验(Tab 补全、@ 调用文件、获取当前编辑中的文档……) -
[css] 固定文档头
2025-11-05 00:41移除掉下面这段就行了,因为我平常不常看文档头,为了只在需要的时候往上移就能看到所以加上了下面这段:
/* 注释掉下面的片段以只是固定 */ opacity: 0; transition: opacity 0.5s ease-in-out; &:hover { opacity: 1; } -
如何通过 js 或 api 来实现 2 个块变成一个超级块,并且可以调整 2 个块中间的距离
2025-10-26 22:58/** @description 通过思源 API 发送事务,将块的 HTML 更新同步到后端。*/
async function updateBlock(blockElement, newHTML) {
log('[updateBlock] 函数开始执行', { blockElement, newHTML: newHTML?.substring(0, 100) + '...' });if (!blockElement || !blockElement.dataset.nodeId) {
log('[updateBlock] 提前退出:缺少 blockElement 或 nodeId');
return;
}const blockId = blockElement.dataset.nodeId;
const oldHTML = blockElement.outerHTML;if (oldHTML === newHTML) {
log('[updateBlock] HTML 未改变,跳过更新');
return;
}const protyleElement = blockElement.closest('.protyle');
if (!protyleElement || !protyleElement.dataset.id) {
log('[updateBlock] 提前退出:缺少 protyleElement 或其 id');
return;
}const protyleId = protyleElement.dataset.id;
const payload = {
session: protyleId,
app: window.siyuan.config.system.id,
reqId: Date.now(),
transactions: [{
doOperations: [{ action: 'update', id: blockId, data: newHTML }],
undoOperations: [{ action: 'update', id: blockId, data: oldHTML }]
}]
};log('[updateBlock] 准备发送事务:', { blockId, protyleId, payloadSize: JSON.stringify(payload).length });
try {
const response = await fetch('/api/transactions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
log('[updateBlock] API 响应状态:', response.status, response.statusText);
const result = await response.json();
log('[updateBlock] API 响应结果:', result);
} catch (error) {
logError("[updateBlock] 发送事务失败:", error);
}
} -
JS 求助——增强页签搜索打开效率:Alt + 页签搜索,子文档页签搜索
2025-10-11 09:20打开搜索窗口 → 在新页签中打开
这个直接ctrl+shift+F就行了吧。好吧,一直都是分窗口操作,才发现全屏下会自己分屏。

分屏处理或许可以参考 js 代码片段:右开 tab 并同步当前位置 - 链滴 实现。
-
[js] 自定义外观工具颜色
2025-08-14 18:07补充一个段落和链接标签的图表和块引没应用样式的补丁,按需修改(也可以不修改用作提醒隐藏的段落的关键部分):
/* 行内 */ /* 根据你设置的style颜色修改 */ [style*="rgba(0, 0, 0, 0.2)"] { /* 内部链接图标 */ &::before { opacity: 0.2; } /* 精准匹配内部的block-ref和a标签 */ span[data-type="block-ref"], span[data-type="a"] { opacity: 0.2; color: inherit; /* 保持与父级一致 */ } } /* 段落 */ div[style*="rgba(0, 0, 0, 0.2)"] [contenteditable="true"] { span[data-type="block-ref"], span[data-type="a"] { opacity: 0.2 !important; /* 强制覆盖内联样式 */ } } -
如何把笔记顶部这几个按钮去掉,不知道这里的 css 是啥
2025-08-03 16:48/* #dockRight */ #dockLeft, span[data-type="globalGraph"], span[data-type="graph"], /*span[data-type="backlink"],*/ .dock__item--pin { display:none!important; } -
发现 win10 edge 复制链接到思源没法自动获取标题的处理过程
2025-07-23 13:46感觉还是直接粘贴出标题内容比较省事(
配置复制带标题后直接按 cmd + k 也是粘贴出带标题的链接。

-
发现 win10 edge 复制链接到思源没法自动获取标题的处理过程
2025-07-23 08:23可能之前 win11 开荒的时候调过没印象了 🤔
我没打开这个开关前,从地址栏复制的链接也是纯文本,打开之后才能获取到标题 😳
-
吐槽让人揪心的连接类型
2025-07-22 09:36 -
可否能增加一个自定义字体颜色的功能
2025-07-21 19:13写了个代码片段,想要啥颜色自己加

(function () { /******************* 配置区 ******************/ const CUSTOM_COLORS = [ { color: "rgba(255,0,0,0.2)", bgColor: "", text: "红", name: "浅红字" }, { color: "", bgColor: "#ffe58f", text: "", name: "黄背景" }, { color: "#1890ff"}, { color: "rgba(0,0,0,0)", bgColor: "rgba(0,0,0,.05)", text: "A" }, ]; const REMOVE_N = 2; // 区间起始(含) const REMOVE_M = 5; // 区间结束(含) /********************************************/ const CUSTOM_BTN_CLASS = "custom-color-btn"; const VISIBILITY_MAP = new WeakMap(); // key: 面板节点, value: 上一次是否可见 /* ---------- 工具函数 ---------- */ function getColorId(cfg) { return cfg.color || cfg.bgColor || ""; } function createBtn(cfg) { const id = getColorId(cfg); if (!id) return null; const btn = document.createElement("button"); btn.className = `color__square ${CUSTOM_BTN_CLASS}`; btn.textContent = cfg.text || "A"; btn.dataset.type = "style1"; btn.dataset.colorId = id; btn.setAttribute("aria-label", cfg.name || id); const style = []; if (cfg.color) style.push(`color: ${cfg.color}`); if (cfg.bgColor) style.push(`background-color: ${cfg.bgColor}`); btn.style.cssText = style.join("; "); return btn; } /* ---------- 对单个面板执行“删区间 + 注入” ---------- */ function handleOnePanel(panel) { const isVisible = !panel.classList.contains("fn__none"); const wasVisible = VISIBILITY_MAP.get(panel); /* 仅当“刚刚变成可见”时处理一次 */ if (isVisible && !wasVisible) { const allDivs = panel.querySelectorAll(".protyle-font > div"); let heading = null; for (const d of allDivs) { if (d.textContent.trim() === "颜色" && d.nextElementSibling?.classList.contains("fn__hr--small")) { heading = d; break; } } if (!heading) return; const container = heading.nextElementSibling.nextElementSibling; if (!container || !container.classList.contains("fn__flex-wrap")) return; /* 删区间 [REMOVE_N, REMOVE_M] 内的原按钮 */ const stockBtns = Array.from(container.querySelectorAll("button.color__square:not(.custom-color-btn)")); const start = REMOVE_N - 1; const end = REMOVE_M - 1; for (let i = end; i >= start; i--) { if (stockBtns[i]) stockBtns[i].remove(); } /* 清理旧自定义按钮 */ container.querySelectorAll(`button.${CUSTOM_BTN_CLASS}[data-color-id]`) .forEach(b => b.remove()); /* 插入最新自定义按钮 */ CUSTOM_COLORS.forEach(cfg => { const btn = createBtn(cfg); if (btn) container.appendChild(btn); }); } VISIBILITY_MAP.set(panel, isVisible); } /* ---------- 全局轮询:所有面板(含隐藏) ---------- */ setInterval(() => { document.querySelectorAll('.protyle-util').forEach(handleOnePanel); }, 300); })(); -
AV 工作流:思源中的属性与视图
2025-07-09 20:47
看了一个半小时可算是通读了一遍,除了数据库查询映射这块因为数据库没怎么用过看的有些迷糊直接跳过了。其他内容也算是囫囵吞枣了一番。

由需求选择方法,面向工作流程建立笔记。通过所需管理资源进行分层、按跨界定义来分类、不吝于重复内容(借助标签和不强求独立互斥)是看完之后的大概思路。虽然实践起来总是只关注最近关注的,重复在一段时间后将当前不感兴趣的扔归档,从而导致实际没有积累出什么东西,一翻起来还是得走一躺遍地干扰的上下文路径来拼接所需内容(在尝试防弹笔记法,记录时预先维护内容关联、减少后续整理工作)。

-
求助图片选中状态,不要让它变暗
2025-07-06 15:02.protyle-wysiwyg [data-node-id] .img--select{filter: brightness(1);}代码片段加上这个应该就行
-
QYL 真是劳模
2025-05-20 10:18默认隐藏,鼠标指到相应位置再显示:
#QToolbar{ opacity: 0; transition: opacity 0.3s ease; &:hover { opacity: 1; } } -
如果学数学的话是用思源好还是 anki 好?或者想办法结合一下?
2025-04-20 21:47如果你的卡片不频繁变动,可以思源写笔记之后复制链接到 anki 里。
[js] 思源复制内容添加块链接 - 链滴对于通过双链以整合间隔重复碎片化这点,个人尝试过在数学应试执行一套按课本目录记录知识点、为知识点建立 MOC 和为例题绑定关联知识点,但效果嘛……肯定是没那么理想化的。或许对于简单应试来说,跟着老师课上观光打打卡,期末前几节课老实听多看着做两三遍题也够及格了。另外如果你说的工科笔记是计算机的话,建议谨慎投入精力到"笔记"上。
很容易出现以为写下来就是记住了,结果回头一翻,忘了自己记过什么,又忘记自己记到哪了。临到实践了才知道自己其实没懂也没记住。














用 echart 好画,就是没试过获取数据库内容不确定咋实现



