kuanat
89 天前
我用了四五年了,作者 dnkl 的其他项目也都很优秀。
我感觉作者对于很多底层技术了解非常透彻,随便列举一下 foot 的优秀之处:
- 基于作者自己开发的 fcft 做文字渲染,fcft 的代码也非常值得一看,简单、可靠
- 基于 damage tracking 的渲染架构,速度和很多基于 gpu 实时渲染的不相上下
- 正确实现控制序列,支持 kitty keyboard 协议,主要是用于正确传递键盘事件,比如 gui->vte->multiplexer->app ,另外就是支持 OSC52 远程复制之类的指令,做 shell 交互集成
- 正确实现 wayland 分数缩放协议,text-input-v3 输入法协议
上面随便拿出来一条能做好了都非常难得。
另外还有一些可能不属于技术,但符合我技术审美的选择:
- ini 风格的配置文件
- server/client 架构的 daemon 模式
- 自带自身的 bash/zsh/fish 补全
- 很少见做对了 alpha blending (虽然方式是基于 hsl 转换)
PS
关于 alpha blending 解释:
这个过程几乎无处不在,但是由于历史遗留问题,加上又是基础组件中的实现,所以直到今天都存在大量且普遍的错误实现。
由于人眼对于暗部比亮部更敏感的特性,sRGB 之类的色彩空间是经过 gamma 矫正的,更多的编码精度留给了暗部。所以对 sRGB 来说,数值翻倍不代表亮度翻倍。所谓 alpha blending 就是模拟真实世界中光线混合,在一个背景色上显示一个前景色文字的过程,需要先将 gamma 矫正过的 sRGB 还原为线性空间,两种颜色在线性空间中混合之后,重新映射回 sRGB 空间来渲染。
如果 vte 或者其他任何应用不能正确处理 alpha blending 很容易出现混合区域变暗的情况,这一点在字符光栅化抗锯齿方面提现很明显。对于 vte 类应用可以观察一下在各种配色主题下的表现。