wilsons
关注
142093 号成员,2024-05-12 13:24:23 加入
2.0k
个人主页 浏览
1.4k
帖子 + 回帖 + 评论
人生最大的敌人是自己,战胜自己,才能超越一切。
  • 如何在思源中实现 diff 与合并?

    2025-04-09 08:15

    1 建议找 js 相关的对比合并库

    2 让 ai 对比两个文本差异并返回合并结果

    这里有个疑问,既然让 AI 修改了,为什么不直接用修改后的结果?为什么还要合并?

  • 想问一下,怎么取消后面的外观变化?

    2025-04-08 21:30

    不清楚,重现不了,你可以看看源码是否颜色标记到块上了?

    也可以用背景色试试,如果标记在块上,整行都有背景色,否则仅选中文字有背景色。

  • 想问一下,怎么取消后面的外观变化?

    2025-04-08 21:13

    我这边并不会你这样,从没标记外观的文字后面都正常。

    不过你可以试试在后面的文字中清除样式试试

    image.png

    也可以试试这个

    image.png

  • [js] 文档树文档置顶和设置颜色 [0.0.8 完美版]

    2025-04-08 16:23

    0.0.8 版

    1. 增加记住顶层置顶文件夹展开状态;
    2. 修复文件夹置顶到顶层后定位不到问题;
    3. 增加置顶/取消置顶时自动定位到目标文档;
    4. 修复文档全部折叠后顶层置顶恢复后需要刷新才能显示的问题;
    5. 修复已取消的顶层置顶无法实时同步问题;
    6. 优化交互体验细节
  • 图片分辨率内存太大怎么解决

    2025-04-08 09:23

    一般相机都可以设置的吧,干嘛让思源处理?

  • 有没有适合 macos 版本 10.15.7 低版本的思源笔记安装包

    2025-04-07 16:09

    貌似思源第一个版本是 2020 年出的,而你的 Mac 版本是 2013 年的,可以试试早期版本是否支持。

    如果不支持的话,只能用 docker 版或手机伺服版了。

  • 求 SQL 语句:筛选含有某个关键字的链接

    2025-04-07 12:17
    SELECT * 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:09

    好的,不过,我这些文档也不重要,反正思源有备份,哪天下架了也无所谓,哈哈。

  • 发布 Pipe 文档后为什么会有个别文档自动同步到链滴?

    2025-04-04 20:01

    不是,我意思同时发布好几个标题不一样的文章,只有一个文章同步到链滴社区了,其他几个没有同步。

    我第一次上传 100 多个文档,只有 3 个同步到链滴社区了,为什么?

  • 发布 Pipe 文档后为什么会有个别文档自动同步到链滴?

    2025-04-04 19:55

    我同时发布了好几个文档,为什么只有一个同步了?

  • 发布 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(); } }
  • 如何查询所有外观调整过的块?

    2025-04-03 17:08

    @JeffreyChen 原来如此,块上还可以加样式

    这样应该可以,再不行就不知道了,原理没问题,涉及细节东西只能根据自身情况具体问题具体分析了

    select * from blocks where path like '%/20250313235710-3zalpkc%' and (markdown like '%background-color: var(--b3-card-success-background); color: var(--b3-card-success-color);%' or ial like '%background-color: var(--b3-card-success-background); color: var(--b3-card-success-color);%');
  • 如何查询所有外观调整过的块?

    2025-04-03 16:33

    不清楚,我这边正常

    image.png

  • 如何查询所有外观调整过的块?

    2025-04-03 15:09
    select * from blocks where path like '%/20250403065429-4huyq4c%' and markdown like '%background-color: var(--b3-card-success-background); color: var(--b3-card-success-color);%';
  • 请问超级块边框如何设置阴影?

    2025-04-02 18:14

    需要什么效果让 ai 帮忙改 box-shadow 就行了

    .sb[data-sb-layout="row"]{ box-shadow: 4px 4px 10px 0 rgba(0, 0, 0, 0.1); /* 设置阴影,需要什么效果让ai帮忙改就行 */ padding-left:5px!important; /* 左边距大小,不需要删除这行即可 */ }

    image.png

  • 有什么办法能让回车不创建文档?

    2025-04-02 16:57

    改变 dataset 类型值就好了,如下代码

    可参考 https://github.com/siyuan-note/siyuan/blob/1317020c1791edf440da7f836d366567e03dd843/app/src/search/util.ts#L798

    // 搜索不到时回车不新建文档(鼠标点击可新建) // see https://ld246.com/article/1743579723972 (()=>{ observeSearchNewDocDom((searchNew) => { // 加载时修改类型 searchNew.dataset.type = 'search-new-disabled'; // 点击时恢复类型 searchNew.addEventListener('click', function(event) { searchNew.dataset.type = 'search-new'; }); searchNew.querySelector('.b3-list-item__meta').textContent = '点击创建'; if(searchNew.nextElementSibling && searchNew.nextElementSibling.matches('.search__empty')) { searchNew.nextElementSibling.textContent = `搜索结果为空,点击创建新文档`; searchNew.nextElementSibling.addEventListener('click', function(event) { searchNew.click(); }); } }); function observeSearchNewDocDom(callback) { // 创建一个观察者实例并传入回调函数 const observer = new MutationObserver(async (mutationsList, observer) => { for (const mutation of mutationsList) { if (mutation.type === 'childList') { mutation.addedNodes.forEach(node => { // 监控搜索新建文档dom被加载 if (node.nodeType === 1 && node.matches('#searchList [data-type="search-new"]')) { callback(node); } }); } } }); // 配置观察选项: const config = { childList: true, // 观察子节点的变化(添加/删除) subtree: true, // 观察所有后代节点 attributes: false, }; // 选择需要观察变动的节点 const targetNode = document.body; // 或者选择更具体的父节点以减少性能消耗 // 开始观察目标节点 observer.observe(targetNode, config); // 返回一个取消观察的方法 return () => observer.disconnect(); } })();

    该代码回车不创建文档,点击创建,保留了一部分原本功能。

  • 如何查询所有外观调整过的块?

    2025-04-02 15:11

    大概是

    select * from blocks where path like '%/你的文档id%' and markdown like '%你的字体颜色关键词%';

    至于字体颜色关键词,颜色,字体颜色,背景色,字体效果,关键词都不一样,根据自己需要查询

    多个可通过 and (markdown like '% 你的字体颜色关键词 %' or markdown like '% 你的字体颜色关键词 %') 进行组合

    可通过开发者工具查看具体颜色关键词,比如

    image.png

  • 红尘练心,五年一回

    2025-04-02 14:54

    做没做过不重要,只要需求说清楚一样可以做。

  • 搜索结果字号和行距更改求助

    2025-04-01 22:10

    可以,其他样式,行高啥的你可以自己加

    .search__header [data-type="set-criteria"] { font-size: 16px; margin: 2px; }
  • 搜索结果字号和行距更改求助

    2025-04-01 21:05

    具体大小可根据自己情况修改

    [data-type="search-item"] { font-size: 16px; line-height: 25px; min-height: 25px; }
  • 求获取数据库主键所在的二级标题模板代码

    2025-04-01 12:43

    刚才看你代码,感觉你这里的主键 id 应该是块 id,不是文档 id,上面的 SQL 仅对主键 id 是文档 id 才有效

    如果主键是块 id,加上模板仅支持 select * 查询

    需要用下面的 SQL,分别查询标题和 h2,然后用模板函数 cat 拼接到一起

    查标题还用你之前的 SQL 就行

    select * from blocks where id in (select root_id from blocks where id='20250401135156-8k4wks2');

    查 h2 用下面这个,通过 parent_id 递归查询

    WITH RECURSIVE ancestors AS ( -- 初始查询:从已知 id 开始 SELECT * FROM blocks WHERE id = '20250401135156-8k4wks2' UNION ALL -- 递归查询:通过 parent_id 向上遍历 SELECT b.* FROM blocks b INNER JOIN ancestors a ON b.id = a.parent_id ) -- 最终查询:筛选满足条件的记录 SELECT content as h2 FROM ancestors WHERE type = 'h' AND subtype = 'h2';

    别忘了在模板中具体 id 值改成?号


    转换为模板代码示例如下

    .action{ $h2Blocks := queryBlocks `WITH RECURSIVE ancestors AS (SELECT * FROM blocks WHERE id = '?' UNION ALL SELECT b.* FROM blocks b INNER JOIN ancestors a ON b.id = a.parent_id) SELECT * FROM ancestors WHERE type = 'h' AND subtype = 'h2'` .id } .action{ $blocks := queryBlocks "select * from blocks where id in (select root_id from blocks where id='?')" .id } .action{ if and (not (empty $blocks)) (not (empty $h2Blocks)) } .action{ $blockContent := (cat (first $blocks).Content "-" (first $h2Blocks).Content ) } .action{$blockContent} .action{ end }

    模板中用 cat 函数会在 - 前后产生一个空格,如果不想要这个空格,如下解决

    .action{ $blockContent := (cat (first $blocks).Content "-" (first $h2Blocks).Content ) }

    改为

    .action{ $blockContent := (list (first $blocks).Content (first $h2Blocks).Content | join "-") }
  • 插件如何刷新数据库

    2025-04-01 12:01

    建议再加个重新加载文档树吧 /api/filetree/reloadFiletree,比如 A 端更新了树样式,希望 B 端同步后,重新生成文档树

    目前的做法是 B 端一个个遍历重放,比较麻烦。