EAF, Wetty and XTerm.js

基于Wetty + XTerm.js的终端模拟器方案

今天写了一个新的补丁Use wetty as terminal backend

用Wetty + XTerm.js的方案替代了EAF原来的QTermWidget后端,基于XTerm.js的先进特性,新的终端模拟器可以像VTE那样完整的模拟图形化命令行工具,比如htop,cmatrix, sl,甚至Emacs和Vi也可以在里面正常运行。

和Emacs现有终端模拟器方案的横向对比:

终端模拟器方案 终端文本操作效率 图形命令行工具支撑能力 Shell可编程扩展能力 优势
term.el/multi-term.el 文本操作效率中等,可以使用Emacs光标移动命令,但是很多时候需要 term-send-* 命令才能正常发送命令给Shell 图形命令行工具支撑能力中等,但是cmartrix这种复杂的没法运行 Shell可编程扩展差, 功能和Bash/Zsh的能力一致 功能比较均衡
EAF Terminal 文本操作效率差,无法使用Emacs光标移动命令,效率和外部图形终端模拟器一样低 图形命令行工具支撑优秀,可以支撑世面上所有图形命令行工具 Shell可编程扩展差, 功能和Bash/Zsh的能力一致 图形命令行工具支撑能力优秀
eshell/aweshell 文本操作效率优秀,可以使用Emacs光标移动命令 图形命令行工具支撑能力差,无法运行图形命令行工具 Shell可编程扩展优秀,可以完全自定义Shell功能 Shell可编程扩展优秀

我的终端使用习惯

2018年前,我一直在用自己写的multi-term.el, 偶尔配合一下外部的图形终端模拟器Deepin Terminal

2018年以后,主要使用我新造的Aweshell, 偶尔使用Deepin Terminal

现在我的日常终端模拟器依然是Aweshell, 因为Aweshell的文本编辑能力和编程可扩展能力最强,随着EAF的完善,我会逐步用EAF Terminal减少Deepin Terminal的使用比例。但是我不会完全弃用Deepin Terminal, 因为我经常编写Emacs插件,需要不断的重启Emacs以验证插件在干净Emacs环境下的表现。

以下是EAF终端模拟器的测试效果:

htop命令

%E6%B7%B1%E5%BA%A6%E5%BD%95%E5%B1%8F_emacs_20200128005541

sl命令

eaf-and-wetty-1

14 个赞

拿目前很火的 vterm 做个横向对比,各位看看有啥问题么

终端模拟器方案 终端文本操作效率 图形命令行工具支撑能力 Shell可编程扩展能力 优势
emacs-libvterm 文本操作效率优秀,可以使用Emacs光标移动命令[^1] 图形命令行工具支撑优秀,可以支撑世面上所有图形命令行工具?[^2] Shell可编程扩展中等[^3] 体验上非常接近外部的终端模拟器,迁移过来几乎不需要任何成本[^4]

[^1]: 只读模式 。
[^2]: sl, htop 这类没问题,cmartrix 跑起来慢了点可能和刷新速度有关
[^3]: 不知道怎么定义这个可编程扩展能力,可以调一些 emacs 里的函数进行交互,算中等?
[^4]: 很少数接收不到的按键需要进行 hack

libvterm 应该和EAF Xterm.js 这个方案属于同一水平和能力:

  • 文本编辑能力逊于 aweshell/eshell
  • Shell可编程能力指的是像 eshell 那样可以扩展 shell 的能力,而不只是被动的输出 shell 的内容

libvterm使用上还是有一些问题,我的电脑上pwd没法同步

libvterm问题多多,我现在用st term,一个按键可以把屏幕文本在一个buffer中打开,命令修改复制特别方便。文本操作效率极高!

不知道老王大师的支不支持vi visual快捷键选择文本?

libvterm 给我感觉最大的优势是 ssh 支持得很好

eshell ssh 连到服务器上,颜色或者 PS1 之类的总是会有些奇怪的问题

xterm.js专门针对ssh