V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wuruxu
V2EX  ›  Linux

花了 3 小时,编译研究 foot 这个 Wayland 终端模拟器

  •  
  •   wuruxu ·
    wuruxu · 7 天前 · 769 次点击

    今天主要是下载代码,编译,及配置
    以前用过 XTerm, 后来改用 Gnome-Terminal
    今天去找找 wayland 环境下的 termianl, 发现foot这个项目 挺有意思的
    C 写的代码性能就是好,效果也是很不错的

    2 条回复    2025-06-12 13:07:57 +08:00
    kuanat
        1
    kuanat  
       7 天前   ❤️ 3
    我用了四五年了,作者 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 类应用可以观察一下在各种配色主题下的表现。
    WorseIsBetter
        2
    WorseIsBetter  
       5 天前
    自从三年前将自己的 PC 桌面由 Xorg 全面切换到 Wayland 之后(主要就是 i3 -> sway 和 xterm -> foot ),就一直用到了现在。

    除了楼上大佬提到的优点之外,当时还有一个很吸引我的地方就是 sixel 支持(曾经对我来说是一个很重要的需求)。翻提交记录,会发现作者花了不少精力去优化 sixel 渲染的性能。

    另外,foot 的设计哲学和代码实现也非常符合我的审美,是为数不多能让我感受到「阅读并修改别人的代码是一种享受而不是修行」的项目。

    同时,作者对于社区贡献的响应也比较积极。我给 foot (还有作者的一些其他项目)提交过一些 bugfix 和 feature patch ,都很快得到了 review 并最终合并。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   947 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 20:03 · PVG 04:03 · LAX 13:03 · JFK 16:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.