求代码片段 | 默认全屏编辑

  • 思源笔记

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

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

    22238 引用 • 88897 回帖 • 1 关注
  • Q&A

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

    8065 引用 • 36858 回帖 • 163 关注
1 操作
JOYCELEEEEE 在 2024-08-26 16:19:29 更新了该帖

相关帖子

被采纳的回答
  • 默认全屏可以实现,但思源的全屏(alt+y)是基于文档的,即如果你没打开任何文档是无法全屏的。

    这一点你测试下就知道了,比如把所有文档关闭,然后按 alt+y 是不会全屏的。

    所以,要想软件打开时全屏,你关闭软件的时候文档不能全关闭,至少留一个文档不关。

    否则,打开软件时全屏失效。

    如果这样的逻辑可以满足你的需求,那么下面的代码即可实现,打开软件时自动全屏。

    放到 js 代码片段即可。

    (async ()=>{
        await whenElementExist(async ()=>{
            const currentTab = document.querySelector('.layout__center li[data-type="tab-header"].item--focus');
            if(!currentTab) return false;
            const dataId = currentTab.dataset.id;
            if(!dataId) return false;
            const currentContent = document.querySelector('.layout__center .fn__flex-1.protyle[data-id="'+dataId+'"]');
            if(!currentContent) return false;
            await sleep(100);
            currentContent.classList.add("fullscreen");
            window.siyuan.editorIsFullscreen = true;
            return true;
        });
        // 延迟执行
        function sleep(ms) {
            return new Promise(resolve => setTimeout(resolve, ms));
        }
        // 等待元素渲染完成后执行
        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 {
                        requestAnimationFrame(checkForElement);
                    }
                };
                checkForElement();
            });
        }
    })();
    

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 默认全屏可以实现,但思源的全屏(alt+y)是基于文档的,即如果你没打开任何文档是无法全屏的。

    这一点你测试下就知道了,比如把所有文档关闭,然后按 alt+y 是不会全屏的。

    所以,要想软件打开时全屏,你关闭软件的时候文档不能全关闭,至少留一个文档不关。

    否则,打开软件时全屏失效。

    如果这样的逻辑可以满足你的需求,那么下面的代码即可实现,打开软件时自动全屏。

    放到 js 代码片段即可。

    (async ()=>{
        await whenElementExist(async ()=>{
            const currentTab = document.querySelector('.layout__center li[data-type="tab-header"].item--focus');
            if(!currentTab) return false;
            const dataId = currentTab.dataset.id;
            if(!dataId) return false;
            const currentContent = document.querySelector('.layout__center .fn__flex-1.protyle[data-id="'+dataId+'"]');
            if(!currentContent) return false;
            await sleep(100);
            currentContent.classList.add("fullscreen");
            window.siyuan.editorIsFullscreen = true;
            return true;
        });
        // 延迟执行
        function sleep(ms) {
            return new Promise(resolve => setTimeout(resolve, ms));
        }
        // 等待元素渲染完成后执行
        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 {
                        requestAnimationFrame(checkForElement);
                    }
                };
                checkForElement();
            });
        }
    })();
    
    1 回复
    1 操作
    wilsons 在 2024-08-26 18:50:19 更新了该回帖
  • 其他回帖
  • 本来切文档就不退出全屏,你是否安装了什么插件导致有冲突?

    建议在新空间测试看看。

    然后关闭插件主题等排查什么原因导致的。

    1 回复
  • EmberSky

    实现是可以实现的: 加载页面的时候, 判断没有某个元素(比如文档树/大纲), 触发快捷键 alt+y

    不过我比较好奇: 你会经常关闭软件么, 软件一直挂着不行么

    我个人一般都不关软件的, 除非是电脑要关机

    2 回复
  • EmberSky 1
    
    /** 获取配置里面的快捷键, 并触发
     * 
     */
    function dispatchKeyEvent(functionName) {
      let keyInit = parseHotKeyStr(window.top.siyuan.config.keymap.general[functionName].custom);
      keyInit["bubbles"] = true;
      let keydownEvent = new KeyboardEvent('keydown', keyInit);
      document.getElementsByTagName("body")[0].dispatchEvent(keydownEvent);
      let keyUpEvent = new KeyboardEvent('keyup', keyInit);
      document.getElementsByTagName("body")[0].dispatchEvent(keyUpEvent);
    }
    
    /**
     * 
     * @param {*} hotkeyStr 思源hotkey格式 Refer: https://github.com/siyuan-note/siyuan/blob/d0f011b1a5b12e5546421f8bd442606bf0b5ad86/app/src/protyle/util/hotKey.ts#L4
     * @returns KeyboardEventInit Refer: https://developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/KeyboardEvent
     */
    function parseHotKeyStr(hotkeyStr) {
      let result = {
        ctrlKey: false,
        altKey: false,
        metaKey: false,
        shiftKey: false,
        key: 'A',
        keyCode: 0
      }
      if (hotkeyStr == "" || hotkeyStr == undefined || hotkeyStr == null) {
        console.error("解析快捷键设置失败", hotkeyStr);
        throw new Error("解析快捷键设置失败");
      }
      let onlyKey = hotkeyStr;
      if (hotkeyStr.indexOf("⌘") != -1) {
        result.ctrlKey = true;
        onlyKey = onlyKey.replace("⌘", "");
      }
      if (hotkeyStr.indexOf("⌥") != -1) {
        result.altKey = true;
        onlyKey = onlyKey.replace("⌥", "");
      }
      if (hotkeyStr.indexOf("⇧") != -1) {
        result.shiftKey = true;
        onlyKey = onlyKey.replace("⇧", "");
      }
      // 未处理 windows btn (MetaKey) 
      result.key = onlyKey;
      // 在https://github.com/siyuan-note/siyuan/commit/70acd57c4b4701b973a8ca93fadf6c003b24c789#diff-558f9f531a326d2fd53151e3fc250ac4bd545452ba782b0c7c18765a37a4e2cc
      // 更改中,思源改为使用keyCode判断快捷键按下事件,这里进行了对应的转换
      // 另请参考该提交中涉及的文件
      result.keyCode = keyCodeList[result.key];
      console.assert(result.keyCode != undefined, `keyCode转换错误,key为${result.key}`);
      switch (result.key) {
        case "→": {
          result.key = "ArrowRight";
          break;
        }
        case "←": {
          result.key = "ArrowLeft";
          break;
        }
        case "↑": {
          result.key = "ArrowUp";
          break;
        }
        case "↓": {
          result.key = "ArrowDown";
          break;
        }
        case "⌦": {
          result.key = "Delete";
          break;
        }
        case "⌫": {
          result.key = "Backspace";
          break;
        }
        case "↩": {
          result.key = "Enter";
          break;
        }
      }
      return result;
    }
    
    if (g_addSnippets) addSnippets();
    
    const keyCodeList = {
      "⌫": 8,
      "⇥": 9,
      "↩": 13,
      "⇧": 16,
      "⌘": 91,
      "⌥": 18,
      "Pause": 19,
      "CapsLock": 20,
      "Escape": 27,
      " ": 32,
      "PageUp": 33,
      "PageDown": 34,
      "End": 35,
      "Home": 36,
      "←": 37,
      "↑": 38,
      "→": 39,
      "↓": 40,
      "PrintScreen": 44,
      "Insert": 45,
      "⌦": 46,
      "0": 48,
      "1": 49,
      "2": 50,
      "3": 51,
      "4": 52,
      "5": 53,
      "6": 54,
      "7": 55,
      "8": 56,
      "9": 57,
      "A": 65,
      "B": 66,
      "C": 67,
      "D": 68,
      "E": 69,
      "F": 70,
      "G": 71,
      "H": 72,
      "I": 73,
      "J": 74,
      "K": 75,
      "L": 76,
      "M": 77,
      "N": 78,
      "O": 79,
      "P": 80,
      "Q": 81,
      "R": 82,
      "S": 83,
      "T": 84,
      "U": 85,
      "V": 86,
      "W": 87,
      "X": 88,
      "Y": 89,
      "Z": 90,
      "ContextMenu": 93,
      "MyComputer": 182,
      "MyCalculator": 183,
      ";": 186,
      "=": 187,
      ",": 188,
      "-": 189,
      ".": 190,
      "/": 191,
      "`": 192,
      "[": 219,
      "\\": 220,
      "]": 221,
      "'": 222,
      "*": 106,
      "+": 107,
      "-": 109,
      ".": 110,
      "/": 111,
      "F1": 112,
      "F2": 113,
      "F3": 114,
      "F4": 115,
      "F5": 116,
      "F6": 117,
      "F7": 118,
      "F8": 119,
      "F9": 120,
      "F10": 121,
      "F11": 122,
      "F12": 123,
      "NumLock": 144,
      "ScrollLock": 145
    };
    
    1 回复
  • 查看全部回帖

推荐标签 标签

  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1327 回帖 • 1 关注
  • 电影

    这是一个不能说的秘密。

    120 引用 • 599 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 360 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 700 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 7 关注
  • 又拍云

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

    21 引用 • 37 回帖 • 545 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    53 引用 • 40 回帖
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    26 引用 • 84 回帖
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 3 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    77 引用 • 430 回帖 • 1 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    943 引用 • 943 回帖
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 670 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖 • 2 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 2 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 172 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 8 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    179 引用 • 995 回帖
  • Sphinx

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

    1 引用 • 208 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 511 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 3 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖
  • Notion

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

    6 引用 • 38 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 586 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖