由于我们不能再使用::selection
这不再可能,因为它与当前版本的 VS Code 一样。
解决这个问题时有几个挑战:
一个想法:
.xterm-rows
的中间行元素可以用xterm-invert-selection
类标记,该类通过 CSS 反转背景和前景色。z-index: 1
在行上方绘制顶行和底行,并将行的实际内容添加到选择中。 然后可以添加aria-hidden
以确保它不会被读取两次。虽然不确定这是否是正确的解决方案,但我真的不喜欢上述解决方案中的文本重复,但至少它只有 2 行。
@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 似乎不支持它。
关闭,因为这比最初看起来正确而且没有人投票支持它要复杂得多。 此外,这将是另一种选择。
最有用的评论
我现在没有时间进行 PR,但我发现我们可以使用 css
mix-blend-mode
属性通过渲染器轻松完成此操作:此外,即使使用非不透明的选择颜色,这也会使前景、选择和背景可见:
不幸的是,Edge atm 似乎不支持它。