Xterm.js: 允许反转选择

创建于 2017-06-10  ·  4评论  ·  资料来源: xtermjs/xterm.js

由于我们不能再使用::selection这不再可能,因为它与当前版本的 VS Code 一样。

screen shot 2017-06-09 at 4 40 40 pm

解决这个问题时有几个挑战:

  • 选择当前绘制在行中的文本下方,也可以具有背景颜色。 这种分离很好,最好将选择的呈现与行的呈现完全分开。
  • 由于并非 .xterm-rows 中的每个元素都没有包含在自己的元素中,因此选择可能在元素的中间开始或结束,这限制了一些解决方案。

一个想法:

  • 利用将选择分为 3 个块的想法; 顶行、中行、底行(如 https://github.com/sourcelair/xterm.js/pull/691)
  • .xterm-rows的中间行元素可以用xterm-invert-selection类标记,该类通过 CSS 反转背景和前景色。
  • 可以使用z-index: 1在行上方绘制顶行和底行,并将行的实际内容添加到选择中。 然后可以添加aria-hidden以确保它不会被读取两次。

虽然不确定这是否是正确的解决方案,但我真的不喜欢上述解决方案中的文本重复,但至少它只有 2 行。

areselection out-of-scope typenhancement

最有用的评论

我现在没有时间进行 PR,但我发现我们可以使用 css mix-blend-mode属性通过渲染器轻松完成此操作:

.xterm-selection-layer {
    mix-blend-mode: exclusion;
}

此外,即使使用非不透明的选择颜色,这也会使前景、选择和背景可见:

.xterm-selection-layer {
    mix-blend-mode: multiply;
}

不幸的是,Edge atm 似乎不支持它。

所有4条评论

@Tyriar对此有一些想法,恐怕一旦我们提供真彩色支持,您的上述想法就行不通了。 恐怕我们必须将背景/选区/前景拆分为单独的图层,然后操纵选区内的前景和背景列。 一旦我们合并了真彩色,我将尝试将其拆分为多个图层。

这更值得拥有,我认为我们不会为了让这成为可能而妥协性能/架构或任何东西。 https://github.com/sourcelair/xterm.js/issues/720更重要。

我现在没有时间进行 PR,但我发现我们可以使用 css mix-blend-mode属性通过渲染器轻松完成此操作:

.xterm-selection-layer {
    mix-blend-mode: exclusion;
}

此外,即使使用非不透明的选择颜色,这也会使前景、选择和背景可见:

.xterm-selection-layer {
    mix-blend-mode: multiply;
}

不幸的是,Edge atm 似乎不支持它。

关闭,因为这比最初看起来正确而且没有人投票支持它要复杂得多。 此外,这将是另一种选择。

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

相关问题

jerch picture jerch  ·  3评论

LB-J picture LB-J  ·  3评论

Mlocik97-issues picture Mlocik97-issues  ·  3评论

7PH picture 7PH  ·  4评论

Tyriar picture Tyriar  ·  4评论