Achuan-2

Achuan-2 学生 资讯
关注
64407 号成员,2021-01-09 23:22:39 加入
6.9k
个人主页 浏览
1.3k
帖子 + 回帖 + 评论
554h46m
在线时长
给时间以生命而不是给生命以时间,如果你喜欢我的分享,欢迎给我买杯咖啡 https://www.yuque.com/achuan-2
  • 代码片段实现代码块最近使用的语言置顶

    2024-08-09 21:22

    原来这样呀。
    ps:如果出现的是 hljs,querySelector 选择代码语言要更改下,因为代码语言是兄弟节点不是子节点,会查找不到

  • 代码片段实现代码块最近使用的语言置顶

    2024-08-09 20:55

    所以我改成了这样就没问题了

                // 监听新增代码
                if(mutation.target.classList.contains("hljs")) {
                    if(codeTimer) clearTimeout(codeTimer);
                    codeTimer = setTimeout(() => {
                        const langText = mutation.previousSibling.textContent;
                        // 添加语言
                        addLanguage(langText);
                        // 设置默认语言
                        setDefaultLang();
                        // console.log(mutation.target.querySelector(".protyle-action__language")?.textContent, 'selected');
                    }, 40);
                }
    
  • 代码片段实现代码块最近使用的语言置顶

    2024-08-09 20:51

    就是 mutation 监控的问题,因为我确实测试了,新增代码块没有检测到 code-block 变化,,所以 if 判断里面的代码没有执行

    code-block 新增,不覆盖思源的上一个选择代码语言,所以下一次新增代码,就变为了上一次选择的代码语言,而不是代码片段设置的代码语言了

    我新建空白工作空间测试了,依然检测不到 code-block 变化

  • 代码片段实现代码块最近使用的语言置顶

    2024-08-09 19:55

    我用你的方式(即斜杆命令创建不指定语言的代码块),也是一样的结果,监听 mutation,也是只有 hljs 变化,没有 code-block 变化

    思源是最新版

    系统是 windows11

    代码

    // 功能:代码块最近使用的语言置顶
    (async ()=>{
        // 配置默认的代码语言,注意如果设置了这个参数,则会覆盖上一次使用的语言。始终默认用这个语言,为空不设置
        const defaultCodeLang = "python";
    
        // 配置最近代码语言最大显示个数
        const recentlyCodeLangLength = 10;
    
        // 配置置顶的代码语言,这个配置里的语言始终置顶,比如 ["js", "java", "php"]
        let topCodeLang = [];
    
        // 配置持久化文件的存储路径
        const storagePath = "/data/storage/recently_code_lang.json";
    
       
    
    

    录屏

    思源文档设置默认语言.gif

  • 代码片段实现代码块最近使用的语言置顶

    2024-08-09 19:08

    创建默认的 python 高亮代码块,用的是、、、,用这个方法是不会监听到 code-block 变化的

  • 为了让文档层级导航插件能用于 MOC 笔记法,我写了一个对反链进行过滤的代码片段

    2024-08-09 16:36

    学习这篇帖子代码片段实现代码块最近使用的语言置顶 - 链滴 (ld246.com)

    放弃 setInterval 定时执行,用了 MutationObserver 来监控 DOM 变化

    
    
    (async ()=>{function filterAndReorderLinks() {
        const filterPatterns = [
            /^\d{8} \w{3}$/, // Example: 20240728 Sun
            /^\d{6}$/,
            /^\d{8} ~ \d{8}$/,
            /^\d{8} \- \d{8}$/
            // Add more patterns here if needed
        ];
    
        const containers = document.querySelectorAll("div.og-hierachy-navigate-backlink-doc-container");
        if (containers.length === 0) {
            return;
        }
    
        containers.forEach(container => {
            const refLinks = container.querySelectorAll("span.refLinks.docLinksWrapper");
            if (refLinks.length === 0) {
                return;
            }
    
            // Hide elements that match any pattern in filterPatterns
            refLinks.forEach(link => {
                const docName = link.getAttribute("title");
                if (filterPatterns.some(pattern => pattern.test(docName))) {
                    link.style.display = "none";
                } else {
                    link.style.display = ""; // Reset display property if it doesn't match
                }
            });
    
            // Separate elements into two arrays: one for @-prefixed and one for otherItems
            const mocItems = [];
            const otherItems = [];
    
            refLinks.forEach(link => {
                const docName = link.getAttribute("title");
                if (docName.startsWith("@")) {
                    mocItems.push(link);
                } else {
                    otherItems.push(link);
                }
            });
    
            // Sort the 'otherItems' array based on the 'title' attribute in ascending order
            otherItems.sort((a, b) => {
                const titleA = a.getAttribute("title").toUpperCase(); // Ignore upper and lowercase
                const titleB = b.getAttribute("title").toUpperCase(); // Ignore upper and lowercase
                return titleA.localeCompare(titleB);
            });
    
            // Clear only the refLinks elements and append them in the desired order
            refLinks.forEach(link => link.remove());
            mocItems.concat(otherItems).forEach(link => {
                container.appendChild(link);
            });
        });
    }
        // 监控dom变化
        function observeDomChange(targetNode, callback) {
            const config = { childList: true, subtree: true };
            const observer = new MutationObserver((mutationsList) => {
                for (const mutation of mutationsList) {
                    if (mutation.type === 'childList') {
                        callback(mutation);
                    }
                }
            });
            observer.observe(targetNode, config);
            // 返回observer,用于停止观察
            // observer.disconnect();
            return observer;
        }
    // 等待元素渲染完成后执行的函数
    function whenElementExist(selector) {
        return new Promise(resolve => {
            const checkForElement = () => {
                let element = null;
                if (typeof selector === 'function') {
                    element = selector();
                } else {
                    element = document.querySelector(selector);
                }
                if (element) {
                    resolve(element);
                } else {
                    // 如果元素不存在,等浏览器再次重绘,递归调用checkForElement,直到元素出现
                    requestAnimationFrame(checkForElement);
                }
            };
            checkForElement();
        });
    }
    
    // 等待笔记区出现
    whenElementExist(".layout__center").then((element)=>{
      
        const observer = observeDomChange(element, (mutation) => {
        // 监听弹窗代码列表
        if(mutation.target.classList.contains("protyle-top") || mutation.target.classList.contains("og-hn-heading-docs-container")) {
            setTimeout(filterAndReorderLinks, 100);
        }
    
    });
    });
    
    
    })();
    
  • 代码片段实现代码块最近使用的语言置顶

    2024-08-09 15:42

    if(mutation.target.classList.contains("code-block")) {

    这个好像有点问题,貌似是不执行的,新增代码块的 mutation.target.classList 只有 hljs

    我设置默认语言为 python,新增代码块确实是 python 语法高亮,再新增一个 matlab 代码块,之后再新增不指定语言的代码块,默认就是 matlab 代码块了

  • 代码片段实现代码块最近使用的语言置顶

    2024-08-09 11:16

    谢谢大佬,这个很好用!👍

    代码写的真好
    js 小白,学习了 observeDomChangewhenElementExist 的使用

  • 日记记录的展现样式 求助 or 建议

    2024-08-08 17:24

    等思源数据库的画廊视图

    我现在整年的日记都用一个数据库来管理

  • 为了让文档层级导航插件能用于 MOC 笔记法,我写了一个对反链进行过滤的代码片段

    2024-08-08 10:49

    因为我还是喜欢文档来管理内容,也能更沉浸去创作。

    目前块引用也基本是文档引用,块粒度的引用对我而言,不如文档引用安全,容易失效

  • 集市什么时候新增评论和评分功能

    2024-08-07 18:25

    支持,现在插件使用,没有评分和评论,用户只能自己看 readme 和亲自尝试,有了评分和评论就简单做下筛选,

    可以知道哪些插件评分很高,自己可以试试(下载量其实只能当做受欢迎程度程度参考之一,因为和插件的受众多少以及插件更新频率有很大关系)

    哪些插件其实并不好用,做的并不完善,需要警惕使用

    而评论功能除了避坑、简单了解插件有哪些不足,还可以分享用户使用插件的场景,对于用户而言,绝对是利好的。至于对于开发者而言,我是觉得要接受评论的好坏的,把插件分享到集市是好心,但是其实也是对集市资源的一种占用,别人因为看到集市有这个插件而去尝试,然后发表意见,就是很正常的事情。把东西放到互联网上,其实就应该要做好被评论的准备。

    我喜欢把自己写的文章放到互联网上,因为我知道自己的文章有局限性,我其实非常期待别人能找出问题,告诉我,也想要和同道之人讨论进步。如果评论区只是夸赞,我反而有点失望,没有我想要的建设性意见。其实自己有时候也在想,互联网上信息良莠不齐,人人都可以发言,劣币常常驱逐良币,自己是不是同时也给别人找资料时造成了误导呢?

    现在评分和评论暂时可以缓缓,因为集市插件不并多,等插件非常多了,个人觉得还是有必要出的。

    论坛虽然可以讨论插件,但是非常信息过于零散,是不如评论功能便携好用的

  • 代码块功能优化建议

    2024-08-07 18:23

    让 ai 给代码块填充语言即可

  • 在思源笔记里如何管理主题笔记

    2024-08-04 16:40

    生物学

  • 在思源笔记里如何管理主题笔记

    2024-08-04 14:06

    举个用数据库管理的例子

    我计划每周要学习统计分析,并且发小红书和微信公众号

    今天学完了 z 检验,加入《统计分析》和《博客》数据库

    Clip20240804140307.png

    那么我可以在 z 检验这篇笔记直接看到我的整个统计分析学习进度

    Clip20240804140752.png

    也可以看到博客发布到平台的情况

    Clip20240804140640.png

  • 从 2024 年的视角来看,以 Roam Research 为首的双向链接似乎已经降温

    2024-07-31 22:43

    加一,所以我之前就提过 issue,建议添加相关笔记功能了,建议的是能手动添加相关笔记,就是在属性里加一个相关笔记,可以添加多个笔记链接进去,有一个面板能显示本笔记所有相关的笔记,但是被否了

    如果用 dailynote 笔记法的话,反链面板更适合积累想法,当笔记的历史记录,用反链面板找相关的笔记,很容易有太多噪声

    除非完全弃用 dailynote,双链真的就是用来建立关联,而不是传递零碎信息的,这样反链面板才干净些

    说到底,反链面板本身的设计就是去找这个块在哪里被引用了,并不是为找相关块而设计的,被引用不代表是我想要的相关和归属关系

  • 免费的笔记 AI 总结方案

    2024-07-31 22:27
    1. 这个第三方 api 的美元:人民币汇率比,不到 1:3
    2. 一般不会每天都发很多信息,我算很频繁用了,写代码、写知识笔记都用 ai,半年也就用了 30 刀。通过邀请别人,奖励了我快 50 刀,这半年就没自己充过钱。
    3. 要省钱,需要避免 context 过长,尽量一次就描述清楚自己的需求,让 ai 一次回答完成。一次会话完成就新建会话,不要在之前会话里再问
  • 思源导出预览发表微信公众号文章无法保留格式

    2024-07-29 15:51

    我没有这个问题,已经用思源笔记发了很多篇公众号了

  • PDF 导出时不能分页,太痛苦了

    2024-07-26 23:04

    设置 css 属性 page break 就可以设置导出 pdf 分页了

  • 希望增加简单的图像编辑功能

    2024-07-26 23:02

    语雀可以

  • 双链工作流个人使用经验

    2024-07-25 10:24

    笔记是为了减压,说的真好呀。笔记是为了在获取信息时减压、提炼整理时减压、组织表达输出时减压、记忆时减压,笔记就是为了让自己更好地工作,更好地生活,做笔记不是仅仅为了一个搭建精致的知识管理体系,自娱自乐。


    我以前 dailynote,记了很多东西,等到后面要着急输出的时候,就意识到太散乱了。

    Clip20240725102049.png

    Clip20240725102645.png

    现在的 dailynote 更多的职能是日记和当成快速记录的 Inbox。只有自己不重要的兴趣爱好笔记、不了解还没成形的领域笔记,才用 dailynote 记录。

    Clip20240725102204.png

    现在我喜欢面向主题、面向项目记笔记,重要的笔记只把 dailynote 用于快速记录当日学习的内容、思考的想法,当成日记,方便日后的回顾,回顾主题进展的时间线。把主要精力整理用于传递的主题笔记上。把记笔记当成完成一个个项目的记录,开始践行以行动为导向、以实践为导向、以项目为导向做笔记,自认为,自己的生活变得更加有序、更有掌控感了。以前的我很热衷于记百科知识笔记,会狂看一个科普 up 主的视频,记录涉及到的所有知识点,但是那些笔记,我很快就遗忘了。现在回过头来看,当时的我可能只是把记笔记当成了一个消遣时间的兴趣爱好,而现在的我是想要用记笔记来帮助自己更好的学习、工作和生活,更多将它当成一个工具,帮我完成一个个项目。

    以学习一个课程为例,如我想要学习 Matlab 深度学习,我就列好我要学习的知识点,然后每周末按顺序去学习,记好笔记。本周学习完了,把上周记的笔记发小红书。之所以选择发上周的笔记,我是觉得这样可以帮助自己复习,而且本周记的笔记不一定完善,经过一周再看可能能发现一些改进的地方。

    Clip20240725101441.png

    此外,学习课程、阅读书籍,我都还会建立一个一个概念笔记,用于把自己学习的知识点提取出来,为了复用,也为了知识笔记能得到持续积累

    比如我在学习深度学习过程中,积累了卷积神经网络的知识点,就会单独建立概念笔记,记录卷积神经网络是什么,有哪些经典的卷积神经网络结构。

    还会整理汇总 Matlab 用于深度学习的相关函数:怎么读取数据、怎么搭建网络、怎么训练,怎么可视化预测结果

    Clip20240725101333.png

    现在这样的笔记方式是比较适合我的

  • 免费的笔记 AI 总结方案

    2024-07-23 17:34

    通义确实不错,还能播客转文字。通义最大的问题是上传 pdf,解读非常差劲,相比 kimi 差很远

    GPT4o 除了写代码,还有一个用途,可以超低价生成图片:一张估计就消耗 $0.008,生成的图片没有水印,质量很高,绘制的图片可以显示英文文字不乱码

  • 思源最缺的是画廊视图,特别是手机端

    2024-07-23 01:15

    画廊视图确实除了做书影音图书馆,还可以以卡片笔记的形式来展示笔记

  • 免费的笔记 AI 总结方案

    2024-07-23 01:13

    GPT 第三方 API 和插件推荐

    第三方 api 调用 gpt4o,价格已经很便宜了

  • 免费的笔记 AI 总结方案

    2024-07-22 19:39

    代码最好还是问 GPT4 和 Claude

  • 得了反向链接太多焦虑症

    2024-07-19 20:57

    双链传递这个我之前也很沉迷

    但是后来确实发现记得太散乱了,

    现在的策略是,如果记得东西只是新闻、你的兴趣爱好、生活碎碎念,不重要,你可以这样记,想引用就引用,就慢慢积累就可以,重要的是快速记录,而不是花太多时间去整理笔记。所以 dailynote 现在我的用法就是当做快速记录零碎信息的 inbox

    但是如果是对自己比较重要的事情,比如一个短期甚至长期的项目,我现在倾向于直接建立一个文档来记录跨越多天的笔记,这会帮助我更好推进项目进展,思考的更充分,更好地去及时整理和汇总信息。在 dailynote 我就容易写的比较随意,只考虑当天,缺乏全局观。

    此外,最近也觉得过于强调我要进行知识链接、过去的笔记要复用,其实也是一种负担,有的时候记下当下学到的,想到的,能完成当下的项目就可以了。笔记只是辅助思考,重要的是让笔记得以转化输出,去实际改善自己的生活,所以笔记的形式真的不重要。我至今没在身边,碰到一个和我一样热衷于每天记笔记的,但是他们貌似比我更擅长任务管理,更专注去行动,每天来工位就是干活,而我总想回顾下昨日,整理下昨日笔记。我很佩服和羡慕他们,我也一直在反思自己,是不是在笔记上花太多时间了,有些东西我是不是可以不记,而是花更多时间记在脑子里,并能用言语表达出我掌握的知识

  • 免费的笔记 AI 总结方案

    2024-07-19 12:49

    嗯,kimi 我主要用来读文献

  • 免费的笔记 AI 总结方案

    2024-07-19 00:27

    豆包确实是我目前用的最好的国产 ai 之一

    生成的文本比较对我口味

    浏览器插件功能很多,可惜全文翻译功能做的很差劲,不会提前翻译,只翻译可视区域,还是推荐用沉浸式翻译插件

  • Tsundoku 主题 link icon 根据锚文本来选择是否显示

    2024-07-18 09:49

    修改了下,可以试试。需要同时用 js 和 css 片段

  • enhance 插件 - 功能先导|快捷键设置字体样式

    2024-07-18 08:39

    行内样式都能刷是最好的,还希望能刷样式叠加,比如加粗和颜色

  • Tsundoku 主题 link icon 根据锚文本来选择是否显示

    2024-07-18 08:34

    可以的. css 也要添加自定义代码片段.我漏了.功能是把有 custom-link-icon 属性的 a 标签的 before 元素去除