-
思源笔记如何随机打开笔记?
2025-04-10 16:25这个感觉如何?
左侧 dock 空白区显示随机文章
功能介绍:
- 左侧 dock 空白区域显示随机文章
- 单击打开文章
- 双击显示下一个
- 右键复制为引用到剪切板
- 可显示为跑马灯效果
代码:
-
思源有没有类似 Obs QuickAdd、Templater 那样的辅助自动化输入工具啊?
2025-04-10 13:07思源也能实现,就是动态插入块,只不过没有 quickadd 那样的插件
可参考下面这个帖子
或者
Templater 思源有模板
-
如何在思源中实现 diff 与合并?
2025-04-10 05:49update 全文内容,data 里怎么填呢?
data 里填 markdown 或 kramdown 数据都行或二者的混合,比如你获取的全文是 kramdown,然后让 ai 修改后把结果直接填到 data 里即可。
新来的 markdown 内容,混杂在 kramdown 里面,能够被接受吗?
可以,二者可以混合。有 kramdown 扩展属性的会生效,没有的按普通 Markdown 解析。
-
如何在思源中实现 diff 与合并?
2025-04-09 17:44获取文档 kramdown 全文
await fetchSyncPost('/api/block/getBlockKramdown', {id:'文档id'})
更新文档全文(有{: id="" }在 id 不会变)
await fetchSyncPost('/api/block/updateBlock', { "dataType": "markdown", "data": `markdown或kramdown数据`, "id": "文档id" })
-
如何在思源中实现 diff 与合并?
2025-04-09 17:02正如楼上说的,用 kramdown 对修改过的内如做 id 标记就行了,比如,你可以让 ai 直接修改思源 kramdown 内容,并告知 ai 不要修改 kramdown 的扩展属性,这样修改后的内容就可以直接用于替换了,不用做任何修改。
-
如何在思源中实现 diff 与合并?
2025-04-09 08:151 建议找 js 相关的对比合并库
2 让 ai 对比两个文本差异并返回合并结果
这里有个疑问,既然让 AI 修改了,为什么不直接用修改后的结果?为什么还要合并?
-
[js] 文档树文档置顶和设置颜色 [0.0.8 完美版]
2025-04-08 16:230.0.8 版
- 增加记住顶层置顶文件夹展开状态;
- 修复文件夹置顶到顶层后定位不到问题;
- 增加置顶/取消置顶时自动定位到目标文档;
- 修复文档全部折叠后顶层置顶恢复后需要刷新才能显示的问题;
- 修复已取消的顶层置顶无法实时同步问题;
- 优化交互体验细节
-
求一个取消制卡时候的动画的 CSS(找过社区,有一个但是没效果)
2025-04-07 16:43添加这个 css 即可
@keyframes addCard { /* 不定义任何关键帧 */ }
-
有没有适合 macos 版本 10.15.7 低版本的思源笔记安装包
2025-04-07 16:09貌似思源第一个版本是 2020 年出的,而你的 Mac 版本是 2013 年的,可以试试早期版本是否支持。
如果不支持的话,只能用 docker 版或手机伺服版了。
-
求 SQL 语句:筛选含有某个关键字的链接
2025-04-07 12:17SELECT * FROM blocks WHERE markdown LIKE '%[%你的关键词%](%)%' and type = 'p';
-
无法取消超链接下划线
2025-04-06 11:55试试这个,如果不生效可以尝试加上!important
/* 链接去掉下划线 */ [data-type="a"] { text-decoration: none; } /* 引用去掉下划线 */ [data-type="block-ref"] { text-decoration: none; }
ps:你看到的链接未必是真正的链接,可能是模拟的,所以问 ai 要为它提供源码,并告知哪个是代表链接。
-
求助思源导出 markdown 快捷键
2025-04-05 10:48确实,编程有时对提高效率确实重要。
对于思源来说会 js 和 css 就够了 。
现在网上基本都有入门视频啥的,一般能耐心看完一套基本就入门了,深入就得靠多实践了。
我也没系统学过 js,基本用到什么学什么,不过要深入,系统学习还是很重要的。
-
求助思源导出 markdown 快捷键
2025-04-04 23:00确实用 zip 解压的方式较复杂,不过还有更简单方法,比如,直接读取文档 Markdown 源码,然后把内容直接写入到文件,这样只需要两步即可。
代码如下
// alt+d 导出markdown文档(docId为空导出当前文档) // see https://ld246.com/article/1743689632996 { // 导出文档的id(docId为空导出当前文档) const docId = ''; // 写入markdown文件路径 // 需填写绝对路径 // windows路径需要用\转义,比如 c:\\ const toPath = '/your/path/Downloads/'; // alt+d事件 document.addEventListener('keydown', async function(event) { // 检查是否按下了 Alt 键和 D 键,并确保没有按下其他修饰键 if ( event.altKey && // Alt 键被按下 event.code === 'KeyD' && // D 键被按下 !event.shiftKey && // Shift 键未被按下 !event.ctrlKey && // Ctrl 键未被按下 !event.metaKey // Cmd 键(Meta 键)未被按下 ) { event.preventDefault(); // 阻止默认行为(可选) if(!isElectron()) { showMessage('仅在Electron客户端有效', true); return; } // 获取Markdown文本 const doc = await fetchSyncPost("/api/lute/copyStdMarkdown", {id: docId || getCurrentDocId()}); if(!doc || doc.code !== 0) { showMessage(doc.msg || '获取文档失败', true); return; } const markdown = doc.data || ''; // 写入文本到文件 const fs = require('fs'); if (!fs.existsSync(toPath)) { showMessage('保存路径不存在', true); return; } let title = '未命名文档'; if(docId) { const docInfo = fetchSyncPost('/api/block/getDocInfo',{id:docId}); if(docInfo && docInfo.data && docInfo.data.name){ title = docInfo.data.name; } } else { title = getCurrentDocTitle() || title; } const path = require('path'); fs.appendFileSync(path.join(toPath, title + '.md'), markdown, 'utf8'); showMessage('已导出成功', false, 3000); } }, true); // 获取当前文档id function getCurrentDocId() { return (document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none)')||document.querySelector('[data-type="wnd"] .protyle:not(.fn__none)'))?.querySelector('.protyle-title')?.dataset?.nodeId; } function getCurrentDocTitle() { return (document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none)')||document.querySelector('[data-type="wnd"] .protyle:not(.fn__none)'))?.querySelector('.protyle-title__input')?.textContent; } // api请求 async function fetchSyncPost(url, data, method = 'POST') { return await (await fetch(url, {method: method, body: JSON.stringify(data||{})})).json(); } function isElectron() { return navigator.userAgent.includes('Electron'); } // 发送消息 function showMessage(message, isError = false, delay = 7000) { return fetch('/api/notification/' + (isError ? 'pushErrMsg' : 'pushMsg'), { "method": "POST", "body": JSON.stringify({"msg": message, "timeout": delay}) }); } }
-
求助思源导出 markdown 快捷键
2025-04-04 20:54要想不弹窗
1 浏览器设置默认下载路径
2 别用浏览器下载方式,虽然你用第三方库解析了 zip,但却是在浏览器内存中完成的,要想保存到本地,必须下载。所以,要抛弃这种实现方式。
由于 /api/export/exportMd api 默认会把文件导出到 /temp/exports 目录中,所以,调用这个 api 后直接调用 /api/archive/unzip 解压即可,然后可以通过 node 的 file api 移动到你指定的目录即可,如果移动到思源目录,也可以调用思源文件移动 api,这样就实现了无弹窗导出。
-
发布 Pipe 文档后为什么会有个别文档自动同步到链滴?
2025-04-04 20:01不是,我意思同时发布好几个标题不一样的文章,只有一个文章同步到链滴社区了,其他几个没有同步。
我第一次上传 100 多个文档,只有 3 个同步到链滴社区了,为什么?
-
发布 Pipe 文档后为什么会有个别文档自动同步到链滴?
2025-04-04 18:05@88250 https://pipe.b3log.org/ 这个网站有毒,每次导入文件,都莫名会有文档自动发布到链滴社区。
上次发布了 3 个,删除了,这次又莫名发布了一个。
我保证仅点了导入按钮,连文章管理都没进,不可能是误操作发布的。
-
求助思源导出 markdown 快捷键
2025-04-04 10:19试试这个 alt+d 导出 markdown 文档(docId 为空导出当前文档)
// alt+d 导出markdown文档(docId为空导出当前文档) // see https://ld246.com/article/1743689632996 { // 导出文档的id(docId为空导出当前文档) const docId = ''; // alt+d事件 document.addEventListener('keydown', async function(event) { // 检查是否按下了 Alt 键和 D 键,并确保没有按下其他修饰键 if ( event.altKey && // Alt 键被按下 event.code === 'KeyD' && // D 键被按下 !event.shiftKey && // Shift 键未被按下 !event.ctrlKey && // Ctrl 键未被按下 !event.metaKey // Cmd 键(Meta 键)未被按下 ) { event.preventDefault(); // 阻止默认行为(可选) const result = await fetchSyncPost('/api/export/exportMd', {id:docId||getCurrentDocId()}); window.open(result.data.zip); } }, true); // 获取当前文档id function getCurrentDocId() { return (document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none)')||document.querySelector('[data-type="wnd"] .protyle:not(.fn__none)'))?.querySelector('.protyle-title')?.dataset?.nodeId; } // api请求 async function fetchSyncPost(url, data, method = 'POST') { return await (await fetch(url, {method: method, body: JSON.stringify(data||{})})).json(); } }