2025 年 04 月 0 篇文章

给页面临时设置宽屏

seehttps://ld246.com/article/1746079460404//给页面临时设置宽屏(暂不支持持久,即文档关闭或页面刷新后复原)//兼容编辑器宽度插件和思源自适应宽度,兼容标题宽度//seehttps://ld246.com/article/1746079460404//修改改自 https://ld246.com/article/1744597829665(()=>{//是否隐

窗口半透明

seehttps://ld246.com/article/1745899596632require('@electron/remote/main').enable(window)const{BrowserWindow}=require('@electron/remote')constallWindows=BrowserWindow.getAllWindows()allWindows.forEach(

思源代码块自动缩进

思源代码块自动缩进
seehttps://ld246.com/article/1745642027248 最近在 runjs 里写代码,发现代码块不支持自动缩进,很不方便。于是,让 deepseek 帮忙写了个。支持大多数常见语言,如果有未识别的语言,则与上一行的空白符位置对齐。代码//思源代码块自动缩进//seehttps://ld246.com/article/1745642027248//version0.0.2//0.0

设置默认打开页面

see 最简单的方式,把这个代码放到 js 代码片段中//默认打开的文档 idvardocId='20250119002432-3oyyqp4';setTimeout(()=>window.open('siyuan://blocks/'+docId),1500);最好把它钉住,然后放到最左侧,然后设置一个 home 的图标,完美!如果默认打开今日日记,可以用下面的代码//在这里输入你想在哪个笔记本中打开今日日记

showFileInFolder

showFileInFolderfunctionshowFileInFolder(filePath){require('electron').ipcRenderer.send("siyuan-open-folder",filePath);}运行本地命令 functionrunCmd(command,callback){const{exec}=require('child_process');exec(

原生js实现思源Dialog对话框

/*options={...options,showAction?:boolean,//当点击确定后不想关闭对话框时,可设置为 options.disableClose=true;即可 confirmCallback?:(options?:IObject)=>void}*///创建基础对话框,createDialog 基础上增加 content 容器和确定与取消按钮//当点击确定后不想关闭对话框时,可设置为 o

openAny invoke内部await造成的死锁与分析

问题根源与解决方案原因分析单实例链式结构:​openAny​是全局单例,所有链式操作(包括 invoke​内部)都通过_chain​顺序执行。当在 invoke​内调用 awaitopenAny.click()​时,主链(_chain​)会等待自身完成,形成循环依赖,导致后续操作无法执行。死锁机制:openAny.invoke(async()=>{awaitopenAny.click('button');

openAny示例大全

openAny示例大全
ctrl+alt+x 只显示文字外观窗口一部分‍openAny.setKeymap('ctrl+alt+x',async(event,{newSetStyle})=>{constsetStyle=newSetStyle();//设置样式 setStyle(`.protyle-font>*:not(:nth-child(7),:nth-child(8)):not(:last-child){display:

跨节点触发选择文本

functionselectText(targetText,container,parentElement){if(typeofparentElement==='string')parentElement=document.querySelector(parentElement);if(typeofcontainer==='string')container=(parentElement||docu

搜索列表,鼠标中键在文档树中定位文档

//搜索列表,鼠标中键在文档树中定位文档(()=>{document.addEventListener('mousedown',asyncfunction(event){//检查是否按下了鼠标中键 constisModifierKeyPressed=event.button===1&&!event.ctrlKey&&!event.metaKey&&!event.altKey&&!event.shift

文本选择结束事件

//当文本选择结束事件//onSelectionEnd((selection)=>{//console.log(selection);//});functiononSelectionEnd(callback){letisMouseupListenerActive=false;//标志变量,用于跟踪是否已经绑定了 mouseup 事件 constmouseupHandler=(event)=>{//获取当前

toolbar出现事件

//当 toolbar 出现事件//onToolbarShow((selection,toolbar,protyle)=>{//console.log(selection,toolbar,protyle);//});functiononToolbarShow(callback){letisMouseupListenerActive=false;//标志变量,用于跟踪是否已经绑定了 mouseup 事件 con

当文档一打开就卡死时该怎么办?

当文档一打开就卡死时该怎么办?
你有没有这样的场景,当你不小心写了一个非常占用资源的 SQL 查询或者当你复制了某位大神写的死循环的代码,这时你的文档突然卡死,CPU 也飙到 100%。但,不幸的时,由于思源会记住上次打开的文档,这时,哪怕你强制关闭思源,那么再次重启思源,这个文档依然会被首先打开,思源依然会卡死。当出现这种情况该怎么办呢?请看下文。准备工具:思源 vscode 插件,浏览器操作步骤:第一步,任务管理器强制退出思源,但不要退出

链滴聊天页面优化

支持按日期增加分割符和右侧生成日期菜单,点击滚动到对应位置。动态添加的聊天内容也支持,但仅支持当前页的日期,超出当前页的需要翻页。(()=>{//聊天界面添加分割线和右侧按日期跳转列表 if(location.href.indexOf("ld246.com/chats/")!==-1){//生成日期列表 generateDateList();//监控新聊天消息生成 constchatsList=docum

把移动菜单移动到文档导航条

我习惯先写文章,再命名标题,最后想分类和标签。那么鉴于此,我通常先点标签页的 + 按钮创建一篇文档,然后写好后再移动文档到指定目录。所以,有了这个功能在移动时更方便,虽然标题菜单里也有,还是这个更方便些。//把移动菜单移动到文档导航条//通过模拟点击菜单按钮实现{constmain=(protyle)=>{//发布服务下不显示 if(window.siyuan.config.readonly)return

protyle加载时执行

注意这个是开始加载时,不是加载完成这种方式实现,如果是添加导航按钮等,不会出现闪烁,但如果是修改编辑器内容推荐 protyle 加载完成执行//监听 protyle 加载,注意这个是开始加载时,不是加载完成//调用示例 observeProtyleLoad((protyle)=>console.log(protyle))functionobserveProtyleLoad(callback,node){let

protyle加载完成执行

注意是页面加载完成后触发这种方式比较适合修改编辑器的内容时使用,如果新增导航按钮等,可能由于加载较慢出现闪烁,这种场景推荐使用 protyle 加载时执行//监听 protyle 加载完成,注意这个是开始加载完成时,不是加载时//调用示例 observeProtyleLoaded((protyle)=>console.log(protyle))functionobserveProtyleLoaded(call