EAF PyQTerminal: 也许是 Emacs 下最好的终端模拟器

随着大佬 Mumulhl 的 100 多个补丁, eaf-pyqterminal 已经日渐成熟, 从我这几个月的体验来看, EAF PyQTerminal 也许是 Emacs 下最好的终端模拟器, 理由如下:

  1. 完全图形化支持: 得益于 Qt 图形库的强大, 可以对 htop, emacs, vi 这些终端图形化程序提供全功能的支持, 而 Emacs 内置的 eshell 还是 term.el 都无法完全支持终端图形化的绘制
  2. 秒开的启动速度: 比 EAF Terminal 的启动速度要快很多, EAF Terminal 是基于浏览器和 xterm.js 实现的, 启动前先需要启动浏览器和 npm server, 而 EAF PyQTerminal 是用 Qt 来实现的, 按下快捷键即启动
  3. 优异的运行性能: EAF PyQTerminal 内部用了大量多线程技术, 终端中运行再复杂的命令行程序都会卡住 Emacs 本身
  4. 平滑滚动: 同样基于 Qt 技术, 终端的滚屏支持触摸板平滑滚动, Emacs 内置的 Buffer 滚动都不那么自然
  5. 支持键盘选中文本: 启动 EAF PyQTerminal 后, 按 Alt + c 进入光标移动模式后, 通过按 j/k/h/l 等键来移动光标, 接着按 v 键就可以切换标记状态, v 键类似 Emacs 内置的 set-mark-command 命令, 最后再按 j/k/h/l 来移动光标就可以看到终端的内容被刚才的键盘操作所选中了, 这时候就可以执行 Alt + w 快捷键来拷贝文本, 而这一切都只需要按快捷键即可实现, 不需要鼠标操作
  6. 兼容性好: 只要可以安装 EAF 的 Emacs 都可以使用, 对 Emacs 版本不挑剔, 也不需要像 vterm 那样编译动态模块才能使用
  7. 可扩展性: 你可以用 Elisp 和 Python 对这个终端模拟器进行功能扩展, 甚至可以用 Qt 来绘制很多高级控件, 比如提供补全菜单, 像代码补全那样补全命令行参数

下面是一些 EAF PyQTerminal 的截图欣赏, 欢迎大家加入 EAF PyQTerminal 的开发工作中来。 :wink:

21 个赞

macOS 下面,eaf-terminal 正常的,eaf-pyqterminal 显示糊了,好像没适配 retina 显示。

更新一下再试试

这个还是不行,不过我看了下提交,读了下这个 API 的文档,下面这么改就好了。

self.pixmap = QPixmap(self.width() * 2, self.height() * 2)
self.pixmap.setDevicePixelRatio(2)

是不是需要引入一个变量来做这种配置?

2 个赞

OK

QPixmap不支持 float, 需要用 int 转换一下, 我写了一个补丁 QPixmap not support (float, float), need (int, int), otherwise eaf wi… by manateelazycat · Pull Request #28 · mumu-lhl/eaf-pyqterminal · GitHub 修复了, 要不会直接崩溃。

我刚想说我的怎么没问题,看一下原来我配置直接把数值设成 2 了。。。

1 个赞

大佬轻描淡写的一个补丁, 终于把 btop 的对齐绘制实现了。

最新版的代码因为支持Windows平台导致Linux下按任何一个字符都会退出, 我已经发了PR来修正这个问题:

大佬们, 遇到这个问题, 可以先用我这个补丁来应急。