是否有折叠列表父节点的方法?

updated: 再看了一遍设置项,可以使用跳转到父块再折叠,一键的方法暂时没找到,或许会考虑用代码片段临时实现吧


在社区、思源快捷键中里搜索 折叠 父 暂未搜索到相关内容。

社区开发者文档里看到了 /api/block | 思源社区文档 折叠节点的接口,虽然还没了解怎么使用。但获取当前编辑节点、向上获取父节点、调用折叠实现的脚本思路已经跃然纸上了。

(function() {
    const debug = true; // 调试模式开关
    let processing = false;

    // 增强版日志系统
    function debugLog(...args) {
        if (debug) console.debug('[KeyMapper]', ...args);
    }

    // 核心逻辑
    document.addEventListener('keydown', async function(e) {
        if (!isTargetCombo(e)) return;
      
        e.preventDefault();
        e.stopImmediatePropagation();
      
        if (processing) {
            debugLog('阻止重复触发');
            return;
        }
      
        processing = true;
        debugLog('开始处理组合键', `方向:${e.key}`);
      
        try {
            // 第一阶段:模拟 Ctrl+Shift+J
            await simulatePhysicalKeystrokes([
                {key: 'Control', type: 'down'},
                {key: 'Shift', type: 'down'},
                {key: 'j', type: 'press'}, // 包含down和up
                {key: 'Shift', type: 'up'},
                {key: 'Control', type: 'up'}
            ]);
          
            // 第二阶段:模拟 Ctrl+方向键
            await simulatePhysicalKeystrokes([
                {key: 'Control', type: 'down'},
                {key: e.key.replace('Arrow', ''), type: 'press'},
                {key: 'Control', type: 'up'}
            ]);
          
            debugLog('全部操作完成');
        } catch (err) {
            console.error('模拟失败:', err);
        } finally {
            processing = false;
        }
    });

    // 组合键检测
    function isTargetCombo(e) {
        return e.ctrlKey && 
               e.shiftKey && 
               e.altKey && 
               ['ArrowUp','ArrowDown'].includes(e.key);
    }

    // 物理按键模拟器(改进版)
    async function simulatePhysicalKeystrokes(steps) {
        return new Promise(resolve => {
            const target = document.activeElement;
            let stepIndex = 0;

            function processNext() {
                if (stepIndex >= steps.length) {
                    debugLog('步骤完成');
                    return resolve();
                }

                const {key, type} = steps[stepIndex++];
                const isDown = type === 'down' || type === 'press';
                const isUp = type === 'up' || type === 'press';
                const eventType = isDown ? 'keydown' : 'keyup';

                // 构建事件参数
                const eventOptions = {
                    key: key.toLowerCase(),
                    code: key.startsWith('Arrow') ? key : `Key${key.toUpperCase()}`,
                    keyCode: getKeyCode(key),
                    bubbles: true,
                    composed: true,
                    ctrlKey: steps.some(s => s.key === 'Control' && s.type === 'down'),
                    shiftKey: steps.some(s => s.key === 'Shift' && s.type === 'down')
                };

                // 派发事件
                if (isDown) {
                    debugLog(`派发 ${eventType}:`, eventOptions);
                    target.dispatchEvent(new KeyboardEvent(eventType, eventOptions));
                }

                // 处理按下并立即释放的情况
                if (type === 'press') {
                    setTimeout(() => {
                        debugLog(`派发 keyup:`, {...eventOptions, ctrlKey: false, shiftKey: false});
                        target.dispatchEvent(new KeyboardEvent('keyup', {
                            ...eventOptions,
                            ctrlKey: false,
                            shiftKey: false
                        }));
                        setTimeout(processNext, 15);
                    }, 30);
                } else {
                    setTimeout(processNext, 15);
                }
            }

            processNext();
        });
    }

    // 键码映射表
    function getKeyCode(key) {
        const map = {
            'Control': 17,
            'Shift': 16,
            'j': 74,
            'Up': 38,
            'Down': 40
        };
        return map[key] || key.toUpperCase().charCodeAt(0);
    }
})();
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25120 引用 • 103566 回帖 • 1 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9584 引用 • 43591 回帖 • 97 关注
2 操作
xqh042 在 2025-03-24 07:39:41 更新了该帖
xqh042 在 2025-03-24 07:32:15 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 2 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25120 引用 • 103566 回帖 • 1 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 408 回帖 • 490 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 77 回帖 • 1 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 1 关注
  • OneNote
    1 引用 • 3 回帖
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 344 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 642 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 1 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 222 关注
  • 印象笔记
    3 引用 • 16 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖 • 1 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    556 引用 • 675 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 442 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 575 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 413 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 55 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    267 引用 • 666 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    367 引用 • 1842 回帖
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    181 引用 • 821 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 762 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖 • 1 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    172 引用 • 516 回帖
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 494 关注