Como não podemos mais usar ::selection
isso não é mais possível, pois é com a versão atual do VS Code.
Existem alguns desafios ao abordar este problema:
Uma ideia:
.xterm-rows
podem ser marcados com a classe xterm-invert-selection
que inverte as cores de fundo e de primeiro plano via CSS.z-index: 1
e o conteúdo real da linha é adicionado à seleção. aria-hidden
pode então ser adicionado para garantir que não seja lido duas vezes.Não tenho certeza se é a solução certa, eu realmente não gosto da duplicação de texto na solução acima, mas pelo menos é apenas em 2 linhas.
@Tyriar Pensando bem sobre isso, temo que sua ideia acima não funcionará assim que enviarmos o suporte true-color. Infelizmente, temos que dividir o fundo / seleção / primeiro plano em camadas separadas e, em seguida, manipular as colunas de primeiro e segundo plano que estão dentro da seleção. Vou tentar dividi-lo em camadas assim que tivermos o truecolor mesclado.
Isso é mais bom de se ter, não acho que gostaríamos de comprometer o desempenho / arquitetura ou qualquer coisa para tornar isso possível. https://github.com/sourcelair/xterm.js/issues/720 é muito mais importante imo.
Não tenho tempo para uma RP no momento, mas descobri que podemos usar a propriedade css mix-blend-mode
para fazer isso com o renderizador com muito pouco esforço:
.xterm-selection-layer {
mix-blend-mode: exclusion;
}
Além disso, mesmo com uma cor de seleção não opaca, isso tornará o primeiro plano, a seleção e o plano de fundo visíveis:
.xterm-selection-layer {
mix-blend-mode: multiply;
}
Infelizmente, não parece ser compatível com o Edge atm.
O fechamento é muito mais complexo do que inicialmente parece ser correto e ninguém votou a favor. Além disso, seria mais uma opção.
Comentários muito úteis
Não tenho tempo para uma RP no momento, mas descobri que podemos usar a propriedade css
mix-blend-mode
para fazer isso com o renderizador com muito pouco esforço:Além disso, mesmo com uma cor de seleção não opaca, isso tornará o primeiro plano, a seleção e o plano de fundo visíveis:
Infelizmente, não parece ser compatível com o Edge atm.