集成编辑环境 (思源文件浏览器) 改进建议

本贴最后更新于 348 天前,其中的信息可能已经时移世改

需求

  1. 文件管理器作为一个用于管理思源工作空间文件的三方插件,成为一个基座,可以由其他插件带来更多的拓展能力
  2. 对于不同类型的文件,可以调用对应的插件来进行展示、处理等

实现路线

  1. 插件依赖技术

    目前的插件系统既不支持声明依赖,也不支持控制插件的加载顺序,所以我们需要做两件事

    1. 推进官方提供插件依赖声明,建议或强制要求安装插件等
    2. 加载顺序目前我觉得不用管,可以通过运行时的约定进行实现

    关于插件的约定式引用,在旧版插件系统时已有考虑和实现,我实现了一个叫做 wait-finish 的 npm 包,用于约定式的控制声明和执行,详见 https://www.npmjs.com/package/wait-finish

  2. 文件管理器插件提供接口

    a. 注册/取消注册文件夹打开事件响应 registerFolderOpen(handler), unregisterFolderOpen
    b. 注册文件打开响应 registerFileOpen(exts, hanlder), unregisterFileOpen(exts)
    c. 注意,由于插件的生命周期是由思源插件系统控制的,在插件卸载时,也必须调用取消注册,以免产生内存泄漏和插件关闭后扔可生效的问题

    import { Plugin } from 'siyuan';
    import { wait } from 'wait-finish';
    export default class DemoPlugin extends Plugin {
      onload() {
        wait('monaco-editor-loaded').then((editor) => {
    		editor.registerFolderOpen((folderPath) => {
            	this.openFolder(folderPath);
            });
            editor.registerFileOpen(['png', 'jpg', 'jpeg'], (filePath) => {
            	this.openImageFile(filePath);
    		});
        });
    }
    
  3. 可配置化的文件默认打开方式

    维护根据扩展名的打开方式配置,例如 html/css/txt 等文本类型默认使用 monaco-editor 打开、picture 默认使用文件浏览器打开等。同时也可以切换默认打开方式,例如图库插件注册了 png 类型的打开方式,那么可以默认用图库插件来打开 png 文件。这样避免点击左侧文件树中需要多次点击才能打开视频、图片等

PS:集成编辑环境这个名字我觉得改成思源文件浏览器应该能更受欢迎吧~

  • 思源笔记

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

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

    22251 引用 • 88937 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 插件依赖技术

    我最近正在重构思源页面初始化与插件加载, 如果有需要的话可以详细讨论一下具体的实现

    文件管理器插件提供接口

    这里感觉可以用更复杂一些的实现, 例如继承一下 EventTarget, 这样就能通过 preventDefault(), stopPropagation()stopImmediatePropagation() 进行控制了

    可配置化的文件默认打开方式

    这里可以配置默认打开方式的同时将其他打开方式添加到菜单中

    1 回复
    1. 可以 Q 群讨论讨论
    2. 这个事件和 DOM 事件不一样,没什么冒泡的概念,而且主动权交给多个插件的话,他们权责分不清的我觉得,还得由你的插件掌握大权
    3. 嗯,这点没啥异议
  • 大佬,您的 web 工具集成这个插件非常好用,但是现在发现只有微信读书是可以在思源里面打开,其他的自定义网页比如知乎,我打开都是跳转到谷歌浏览器打开,怎么样才能让自定义网页也可以在思源里面打开呢?

    1 回复
  • zuoez02 1

    v3.6.0,关闭 webapp 的允许打开外部链接,重新打开 webapp

    1 回复

推荐标签 标签

  • VirtualBox

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

    10 引用 • 2 回帖 • 6 关注
  • Google

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

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

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 596 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 377 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 1 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    20 引用 • 7 回帖 • 2 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 71 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 707 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    63 引用 • 348 回帖 • 1 关注
  • GitLab

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

    46 引用 • 72 回帖 • 2 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    286 引用 • 729 回帖
  • SSL

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

    70 引用 • 193 回帖 • 430 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    287 引用 • 4484 回帖 • 667 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 780 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 1 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • 游戏

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

    176 引用 • 815 回帖
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖
  • API

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

    77 引用 • 430 回帖 • 2 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 2 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 327 关注
  • CodeMirror
    1 引用 • 2 回帖 • 129 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 1 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖 • 1 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 3 关注