Open Gaubee opened 2 years ago
当前面板支持键盘事件,布局是固定的,输出与面板的关系也是固定的,基于这个背景,扩展面板的加入是为了:
不过这看起来像是第二种,那么是否取消tab方式展示(因为如果不取消,意味着声明文件的属性要能完整支持一个控件的定义,包括前景色/背景色/选中样式等等)
另外(第二种的情况下)
@ryanroe 在面板架构重构之后,tsc/bundle/deps等默认tab,也应该使用统一架构进行重构。
本质上,每一个tab的内容输出,只需要一个 stream 提供 stdin/stdout 即可。
比如说type: text
,它的stdout就是一段固定文本,stdin则是空。
所以对于type: app
,我们需要界定的并不是它能做什么,而是考虑它的“源”是什么?如何把这个源转化成stdin/stdout。
@ryanroe 我们的面板上还有两个视图区域。
一个是tab,能够显示title与状态(success/error/busy);
另一个是status,用于显示短文本信息或者通知。
这两则的输出,其实都可以使用扩展ANSI转移序列0x9f
来做到。
我后面想了想,底部那条status,其实改成一个input会更好,提供stdin流给应用程序,还能提供history等操作
@ryanroe 最后是关于键盘事件绑定。这点其实参考vi就行了。
比如说默认情况下不会键盘并不会提供给tab-content,而只会在全局面板进行控制。
而在按下Enter
之后,键盘捕捉就会提供给tab-content,此时所有的键盘输出都会提供给tab-content。
默认情况下,按下Esc
就能取消捕捉,或者按下:
直接跳出到底部 command-input 区域进行输入。
@ryanroe 我们的面板上还有两个视图区域。 一个是tab,能够显示title与状态(success/error/busy); 另一个是status,用于显示短文本信息或者通知。 这两则的输出,其实都可以使用扩展ANSI转移序列
0x9f
来做到。我后面想了想,底部那条status,其实改成一个input会更好,提供stdin流给应用程序,还能提供history等操作
这里还有一种做法,就是一个进程的管道其实不止一个,就像stdout与stderr的关系一样。 二者本质上是fs.write(1/process.stdout.fd/ ,buffer)与fs.write(2/process.stderr.fd/ ,buffer) 我不知道程序是否可以再约定一个新的管道 fs.write(3, {title:"", status:"success" }) 来专门做这个事情。
开发者可以自己配置命令与相关的布局。
首先要实现的是扩展面板,除了默认的tsc/bundle等面板,开发者可以自定义扩展面板。
关于BFSW
在bfsw中,考虑到多个项目的TaskGroup同时运行时,可能还会有一些共享面板的需求,所以声明式面板就很重要。 如果需要,可以将面板定义到某一个bfsp项目中,其它项目可以引入这个项目的面板配置。 在bfsw中,引入多个bfsp,可能会重复定义同名面板,如果这些面板的定义不完全相等,那么就会直接报错。
如果面板的定义相同,那么多个bfsp就可以共享这些面板