EmberSky
关注
124636 号成员,2024-01-05 18:44:41 加入
305
个人主页 浏览
375
帖子 + 回帖 + 评论
42h27m
在线时长
如果感觉我的回答对你有帮助, 请点击 感谢 支持一下, 谢谢!
  • 笔记本分类

    2024-12-06 17:25

    太赞同了, 搜索比目录好用多了, 文档树很难维护的

  • [css] 字体样式排除下划线

    2024-12-02 21:20

    在你的 css 里面加上下划线颜色

    .protyle-wysiwyg [data-node-id].bq [data-type~=u]{
        color: red;
        border-bottom-color:red;
    }
    
    
  • 喜欢之前默认主题,想恢复,请教怎么弄?

    2024-12-02 16:52

    只改了下背景色, 其他的看起来没啥改动

    .protyle-wysiwyg .bq {background-color: var(--b3-theme-surface-light);}
    
  • [css] 字体样式排除下划线

    2024-12-02 16:28

    颜色自己调

    .protyle-wysiwyg span[data-type~=u] {border-bottom-color:#222222;}
    
  • 有没有自定义表格样式的 css 代码

    2024-12-02 14:50

    颜色自己调吧

    /* 设置偶数行颜色*/
    .protyle-wysiwyg table tr:nth-child(even) td{background-color: var(--b3-theme-background);}
    /* 设置表头边框颜色 */
    .protyle-wysiwyg table th{border-color:red;}
    /* 设置表格边框颜色 */
    .protyle-wysiwyg table td{border-color:red;}
    
    
  • 有没有自定义表格样式的 css 代码

    2024-12-02 12:49

    没看出来, 这个主题和默认的有啥区别, 不也是开头粗体么, 无非就是少个灰白间隔

    你是想把这个间隔去掉么?

  • [js] 快捷键 合并和拆分块 -- 完善版

    2024-12-02 09:29

    自动置顶是什么意思, 截图看下(原始内容, 操作后效果, 希望效果)

  • 复制行内代码时,默认带上 Markdown 语法的反引号 `

    2024-11-29 16:12

    [js] 复制行级代码或图片时, 替换原始复制

    可以看下这个: 光标在行级代码内部, 且不选中字符, 使用 ctrl+c 只复制纯文本

  • 建议给“未引用资源”加个“刷新”键

    2024-11-29 11:48

    js 可以做, 可以等大佬做一下

    方式一: 增加刷新按钮

    监听 未引用的资源文件, 有就增加刷新按钮

    (不太好处理, 感觉有点浪费性能)

    方式二: 使用快捷键, 比较好做

    触发流程

    1. 监听到刷新快捷键后
    2. 触发快捷键 alt+p 两次
    3. 点击 资源按钮
  • 请问能不能在笔记本里面出个类似于文件夹的东西

    2024-11-26 09:20

    该说不说, 我就是因为 思源文档也可以当文件夹才入坑的, 哈哈

  • shift 键相关

    2024-11-26 09:19

    点击文档左右侧的时候, 文档树会变蓝

    这个时候, 可以通过 shift + 上下箭头 选取文档, 类似于普通文本编辑那样

    image.png

  • 有办法点圆点折叠吗,左边的小三角不习惯

    2024-11-22 08:15

    圆点不好做,因为每个块的原点不一样

    这个鼠标中键折叠的你试试

    [js] 鼠标中键折叠块

  • 从思源代码块复制代码时, 不要删掉末尾换行

    2024-11-21 16:19

    末尾的空格也没了

    image.png

    image.png

  • 思源笔记能否设置标签点击进去默认是全局搜索而不是固定搜索?

    2024-11-19 16:44

    ctrl+shift+f 默认不就是全局搜索么?

  • 求助实现多个块的快速合并及折叠

    2024-11-19 14:31

    选中后 ctrl+q 触发, 触发后会将选中的内容转换成引用, 过程中会有点卡顿, 因为不知道为啥, 延时低了就会报错, 所以只能先让 sleep 时间长一点

    触发前, image.png, 触发后, image.png

    (()=>{
    // 延迟执行
    function sleep(ms) {
      return new Promise(resolve => setTimeout(resolve, ms));
    }
    function press_once(keyInit, selector = null) {
      keyInit["bubbles"] = true;
      if (selector == null) {
        selector = document.querySelector('[data-type="wnd"].layout__wnd--active .protyle:not(.fn__none) .protyle-wysiwyg.protyle-wysiwyg--attr')
      }
      else if (typeof selector === 'function') {
        selector = selector()
      }
      else if (typeof selector === 'string') {
        selector = document.querySelector(selector)
      }
      if (!selector) return
      selector.dispatchEvent(new KeyboardEvent('keydown', keyInit));
      selector.dispatchEvent(new KeyboardEvent('keyup', keyInit));
    }
    async function add_new_line_before() {
      press_once({
        key: 'Enter',
        ctrlKey: true,
        shiftKey: true,
        keyCode: 13, // 不推荐使用,但某些情况下需要
      });
    }
    function click_right(ele) {
      // 创建一个右键点击的 MouseEvent
      const rightClickEvent = new MouseEvent('contextmenu', {
        bubbles: true,
        cancelable: true,
        view: window,
        button: 2 
      });
      ele.dispatchEvent(rightClickEvent);
    }
    
    
    // 获取光标所在的元素
    function getElementAtCursor() {
      const selection = window.getSelection();
    
      if (selection.rangeCount > 0) {
        const range = selection.getRangeAt(0);
        const startContainer = range.startContainer;
        // 如果是文本节点,获取其父元素
        const element = startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;
        return element;
      }
    
      return null; // 如果没有选中内容或光标位置无效
    }
    
    // 获取当前选中的文本
    async function get_selected_data() {
      // 触发 ctrl+c, 复制选中的块
      document.execCommand('copy');
      // 获取剪贴板文本
      return await navigator.clipboard.readText();
    }
    // 设置文本
    async function paste_data(data) {
      // 将处理后的文本复制到剪贴板
      await navigator.clipboard.writeText(data);
      // 触发 ctrl+v, 粘贴处理后的内容
      document.execCommand('paste');
      await sleep(20)
    }
    
    // 清空选中的内容: 先剪切, 再增加空行
    async function clear_selected_data() {
      // 触发 ctrl+x, 剪切选中的块, 目的是删除原有内容
      document.execCommand('cut');
      await add_new_line_before()
    }
    
    // 转换引用 - 使用系统自带的转换功能 
    function convert_quote_from_sys(event) {
      click_right(event.target)
      // 创建 mouseover 事件
      const mouseOverEvent = new MouseEvent('mouseover', {
        view: window,
        bubbles: true,
        cancelable: true,
      });
      let turn_ele = document.querySelector('.b3-menu__items>[data-id="turnInto"]')
      turn_ele?.dispatchEvent(mouseOverEvent);
      turn_ele = turn_ele?.querySelector('.b3-menu__submenu>.b3-menu__items>[data-id="quote"]')
      if (!turn_ele) return false
      turn_ele.click()
      return true
    }
    // 转换引用 - 使用自己实现的的转换功能
    async function convert_quote_from_my(clipboardText) {
      // 删除原有内容, 并增加空行
      await clear_selected_data()
      let clipboardTextRet = clipboardText
        .split('\n')
        .map(line => "> " + line)
        .join('\n')
      // 粘贴处理后的文本
      await paste_data(clipboardTextRet);
    }
    async function fold_block() {
      await sleep(300);
      let ele = getElementAtCursor();
      if (!ele) return
      while (!ele.parentNode.classList.contains("protyle-wysiwyg--attr") && ele.getAttribute('data-type') != 'NodeBlockquote') {
        ele = ele.parentNode
      }
      click_right(ele)
      await sleep(300)
      document.querySelector('.b3-menu__items>[data-id="fold"]')?.click()
    }
    
    // 合并选中的块
    async function handle_merge(event) {
      // 获取当前选中的文本
      let clipboardText = await get_selected_data();
      // 如果不需要处理, 则直接返回
      if (clipboardText == "") {
        console.log("不需要处理")
        return;
      }
      
      if (convert_quote_from_sys(event)) {
        console.log("系统转换成功")
      }
      else {
        await convert_quote_from_my(clipboardText)
        console.log("自定义转换成功")
      }
      await fold_block();
    }
    
    // 事件监听
    document.addEventListener('keydown', async (event) => {
      // 检查是否按下了 Ctrl + q
      if (event.ctrlKey && event.key === 'q') {
        // event.preventDefault(); // 防止快捷键默认行为
        await handle_merge(event);
      }
    });
    })()
    
    
  • 求助集市分组以及隐藏引述块的角标

    2024-11-15 09:30

    你是开了什么主题么, 为什么我没有右上角这些内容

    image.png

  • 求助集市分组以及隐藏引述块的角标

    2024-11-14 21:07

    是只隐藏了计数

    备注不知道你要什么效果

    其他的功能我没用过, 没找到在哪使用 😂

  • 求助集市分组以及隐藏引述块的角标

    2024-11-14 19:12

    引述块, 超级块

    [data-type="NodeBlockquote"], [data-type="NodeSuperBlock"]{
    .protyle-attr--refcount.popover__block {display:none;}
    }
    
  • 图标隐藏

    2024-11-14 11:35

    .protyle-background__icon {display:none;}

  • 能不能通过 API 获取“当前活动文档的 ID”?

    2024-11-14 10:19

    这个可以不?

    // 打印显示内容的文档的id
    document.querySelectorAll('div.fn__flex-1.protyle:not(.fn__none) span.protyle-breadcrumb__item.protyle-breadcrumb__item--active').forEach(
        file_ele => console.log(file_ele.getAttribute("data-node-id"))
    )
    // 打印所有页签文档的id
    document.querySelectorAll('div.fn__flex-1.protyle span.protyle-breadcrumb__item.protyle-breadcrumb__item--active').forEach(
        file_ele => console.log(file_ele.getAttribute("data-node-id"))
    )
    
  • [js] 鼠标中键折叠块

    2024-11-13 09:38

    代码是通过模拟点击这个菜单里面的折叠 实现的

    必须有这个按钮之后, 中键才会生效, 我个人体验下来, 也感觉不是特别丝滑

    image.png

  • 有没有大佬帮忙做一个中键折叠的功能

    2024-11-12 10:51

    功能已更新, 可以去试下, 上面说的问题(短时间内第二次点击不生效)也解决了

    [js] 鼠标中键折叠块

  • 有没有大佬帮忙做一个中键折叠的功能

    2024-11-11 20:13

    这个, 应该能符合你的需求

    备注

    1. 只会折叠标题, 感觉你这个需求挺有意思的, 后续可能会研究下怎么折叠其他种类的块
    2. 折叠之后, 马上再次点击不会生效(不会展开), 需要等待 1s(很短)后再次点击才会生效, 应该是思源本身的问题, 折叠的图标连续两次点击, 第二次也不会生效, 写味也有这个问题, 暂时先不管了
    
    document.addEventListener('mousedown', function(event) {
        // 判断是否是中键点击
        if (event.button === 1) { // 中键的 button 值为 1
            let fold_ele = document.querySelector('.protyle-gutters:not(.fn__none)')?.querySelector('[data-type="fold"]');
            if (fold_ele) {
                event.preventDefault(); // 阻止默认中键点击的行为
                fold_ele.click()
            }
        }
    });
    
  • [js] 解决双击选取内容末尾带空格的问题

    2024-11-10 21:56

    像这种的, endOffset 会是负数, 导致代码报错

    image.png

  • [js] 解决双击选取内容末尾带空格的问题

    2024-11-10 19:43

    @JeffreyChen @fpxkHaj8dE 问题已经解决, 帖子的代码已经更新了

  • [js] 解决双击选取内容末尾带空格的问题

    2024-11-10 18:52

    截个图, 标记一下呗, 我这种看着没啥问题

    image.png

  • 建议行级代码内备注不要阻断文本复制

    2024-11-07 19:38

    最近刚做过这个, 光标在行级代码里面(不选中)的时候, ctrl+c 复制的是这个行级代码的纯文本, 而不是整行, 可以看下

    备注: 里面还有替换复制图片的功能, 如果不需要, 就把这个删掉

    handle_cp_img(element);

    [js] 复制行级代码或图片时, 替换原始复制

  • [js] 实现图片旋转 / 翻转后保存

    2024-11-07 19:21

    你不会被骂了吧, 哈哈, 这种专业的话术都能写出来