需求
- 文件管理器作为一个用于管理思源工作空间文件的三方插件,成为一个基座,可以由其他插件带来更多的拓展能力
- 对于不同类型的文件,可以调用对应的插件来进行展示、处理等
实现路线
-
插件依赖技术
目前的插件系统既不支持声明依赖,也不支持控制插件的加载顺序,所以我们需要做两件事
- 推进官方提供插件依赖声明,建议或强制要求安装插件等
- 加载顺序目前我觉得不用管,可以通过运行时的约定进行实现
关于插件的约定式引用,在旧版插件系统时已有考虑和实现,我实现了一个叫做 wait-finish 的 npm 包,用于约定式的控制声明和执行,详见 https://www.npmjs.com/package/wait-finish
-
文件管理器插件提供接口
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); }); }); }
-
可配置化的文件默认打开方式
维护根据扩展名的打开方式配置,例如 html/css/txt 等文本类型默认使用 monaco-editor 打开、picture 默认使用文件浏览器打开等。同时也可以切换默认打开方式,例如图库插件注册了 png 类型的打开方式,那么可以默认用图库插件来打开 png 文件。这样避免点击左侧文件树中需要多次点击才能打开视频、图片等
PS:集成编辑环境这个名字我觉得改成思源文件浏览器应该能更受欢迎吧~
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于