Xterm.js: 平滑滚动

创建于 2017-12-11  ·  16评论  ·  资料来源: xtermjs/xterm.js

作为刚接触 CLI 的人,我发现与大多数其他应用程序的平滑滚动相比,查看终端中使用的逐行滚动在认知上更困难。 我了解到这是因为在终端中,字符而不是像素是最小的显示单位。

xterm.js 是否有可能(并且是可取的)解决此问题并包含基于像素的平滑滚动选项?

我最初为 Hyper (https://github.com/zeit/hyper) 向@albinekb提出了同样的问题,他向我推荐了这个项目,因为 Hyper 使用 xterm.js。

aremouse-support typenhancement

最有用的评论

很少有人会使用的东西

使用触摸板滚动的每个人都在 VTE 中使用它,无论他们喜欢与否:D

所有16条评论

这当然是可能的,但对于很少有人会使用的东西来说,这将是相当多的工作(+增加的复杂性)。 我不想个人添加这个。

这是可以理解的,也是公平的。 感谢您的工作!

仅供参考:VTE(GNOME 终端和朋友)从 0.44 版开始执行此操作。 (当然,它只适用于终端模拟器的回滚,而不适用于例如在文本编辑器中滚动文件。)

很少有人会使用的东西

使用触摸板滚动的每个人都在 VTE 中使用它,无论他们喜欢与否:D

@egmontkob我这里有 gnome 终端 3.18.3,它似乎不起作用,配置文件设置中的滚动部分似乎也没有设置?

screen shot 2017-12-18 at 6 57 19 am

gt 3.18.3 很可能意味着您有 vte 0.42,而此功能是 0.44 中的新功能。

没有新设置(有一个待处理的低优先级请求添加一个),它的行为与以前不同。

有人已经表达了他们不喜欢在 VTE 中无法配置的这一点。 当然,是否完全在 xtermjs 中实现此功能完全是您的选择,如果您这样做了,是否使其可配置。

我认为这对您来说可能是一个宝贵的数据点,此功能已在 VTE 中使用了 1.5 年以上,并且“强制”使用触控板(而不是发送滚动“单位”的鼠标滚轮)的所有 VTE 用户为此,我们仍然滚动整行),在这些时间里,我总共听到了 2 或 3 次投诉,以恢复旧的行为。 如果这个功能很糟糕,就会有更多的抱怨。


我没有关于 VTE 的使用数字或比率,我最接近的是这次民意调查的结果(请注意,文章的日期被篡改,根据评论的时间戳,这是一个 2 年前的投票),这表明 VTE 的Linux 终端仿真器的市场份额约为 50%,即相当大。 所以很多人已经在使用平滑滚动。


我是xtermjs和朋友的新手,我还没有尝试过,只是看到这里正在发生很酷的事情。 我不确定我心中是否有正确的架构,但是如果我这样做了,那么 GNOME 终端对于 VTE 就像 hterm 对于 xtermjs 一样。 VTE 是一个进行终端仿真的 GTK+ 小部件。 大约有十几种或多或少流行的使用 VTE 的终端模拟器应用程序,包括 GNOME 终端、Xfce4 终端、终结者、Tilix……


如果您想尝试这种行为,最简单的方法(为此,以及不需要与 GNOME 终端合作的任何 VTE 功能)是仅编译 VTE 并启动其测试应用程序:

  • gittarball获取
  • ./autogen.sh (git) 或./configure (tarball)
  • make
  • ./src/app/vte-2.91 (从 0.51 起)或./src/testvte (最高 0.50)或./bindings/vala/vte-2.91./src/vte-2.91 (最高 0.50,在某些时候移到另一个目录)

我正在使用鼠标滚轮,这是我的问题 :sweat_smile:

在最初的帖子中,我忘记提及我确实使用触控板这一非常重要的细节。 不考虑触控板用户或其他基于触摸输入法的用户,我知道很少有人喜欢基于像素的滚动。

IMO 可以肯定地说,此时用户只是期望它。 我的意思是,即使是 hterm 也有。

使用画布渲染器不太可能,但是使用应该替换画布渲染器的 webgl 渲染器https://github.com/xtermjs/xterm.js/pull/1790应该很容易完成。 对于 DOM 渲染器,我们可以通过在顶部和底部设置部分可见的线条来实现这一点。 因此,我认为这在 #1790 上被阻止

其他需要考虑的事情: ydisp不是整数并且行数超过Terminal.rows可见会破坏代码中的一些假设,例如它如何影响屏幕阅读器支持?

画布渲染器真的不可能

为什么不? 它应该像绘制viewportHeight + 2行数一样简单,并根据当前滚动位置的像素偏移量在第一行和第二行之间进行偏移。

这当然是可能的,但对于很少有人会使用的东西来说,这将是相当多的工作(+增加的复杂性)。 我不想个人添加这个。

Fwiw我要请求相同的功能。 我个人认为这是提高可用性的重要一步。 它没有得到更广泛支持的事实可以解释为它是一个相对较新的想法,而且我们程序员往往只是习惯了我们必须处理的限制。

为什么不?

@sdegutis是的,这是可能的,当时我认为画布渲染器将通过使用特殊逻辑来高度优化,仅使需要它的内容部分无效。 现在使用画布渲染器滚动终端无论如何都会重新渲染所有行,而且即使这是默认设置,计划还是无论如何都要逐步淘汰画布渲染器。

这应该很容易实现,只是需要为 3 个渲染器完成,尤其是 webgl 需要一些特殊的调整(增加属性缓冲区的大小,因为绘制的单元格比行 * cols 多)。

我也喜欢这个功能,我的问题实际上不仅仅是美学问题,而是可用性问题。 问题在于,一个操作会导致终端上的跳过次数过多,而且没有平滑滚动的事实使得几乎无法理解跳过了哪些行。 它确实使终端难以使用。

每次我在 Visual Studio Code 中滚动终端时,我都会忘记我去过的地方。 平滑滚动是一项基本功能,我们需要它。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

albinekb picture albinekb  ·  4评论

zhangjie2012 picture zhangjie2012  ·  3评论

Mlocik97-issues picture Mlocik97-issues  ·  3评论

tandatle picture tandatle  ·  3评论

Tyriar picture Tyriar  ·  4评论