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

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

需求

  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:集成编辑环境这个名字我觉得改成思源文件浏览器应该能更受欢迎吧~

  • 思源笔记

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

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

    19774 引用 • 75660 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

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

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

    文件管理器插件提供接口

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

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

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

    1 回复
    1. 可以 Q 群讨论讨论
    2. 这个事件和 DOM 事件不一样,没什么冒泡的概念,而且主动权交给多个插件的话,他们权责分不清的我觉得,还得由你的插件掌握大权
    3. 嗯,这点没啥异议

推荐标签 标签

  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖 • 1 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 645 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 1 关注
  • PostgreSQL

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

    22 引用 • 22 回帖
  • 外包

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

    26 引用 • 232 回帖
  • 笔记

    好记性不如烂笔头。

    306 引用 • 782 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 4 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 14 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 27 关注
  • 996
    13 引用 • 200 回帖 • 2 关注
  • 京东

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

    14 引用 • 102 回帖 • 406 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 733 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 699 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • TGIF

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

    285 引用 • 4482 回帖 • 658 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 562 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 15 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 350 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 4 关注
  • 又拍云

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

    21 引用 • 37 回帖 • 519 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 406 关注
  • Jenkins

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

    51 引用 • 37 回帖 • 5 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    148 引用 • 257 回帖 • 3 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 434 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖
  • Ubuntu

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

    123 引用 • 168 回帖
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 4 关注