Поскольку мы больше не можем использовать ::selection
это больше невозможно, как в текущей версии VS Code.
При подходе к этой проблеме есть несколько проблем:
Одна идея:
.xterm-rows
могут быть помечены классом xterm-invert-selection
который инвертирует цвета фона и переднего плана с помощью CSS.z-index: 1
и фактическое содержимое строки добавляется к выделенному. Затем можно добавить aria-hidden
в качестве меры предосторожности, чтобы он не считывался дважды.Не уверен, что это правильное решение, мне не очень нравится дублирование текста в приведенном выше решении, но, по крайней мере, это всего лишь 2 строки.
@Tyriar Поразмыслив , я боюсь, что ваша идея не сработает, когда мы отправим поддержку True Color. Боюсь, что нам придется разделить фон / выделение / передний план на отдельные слои, а затем манипулировать столбцами переднего плана и фона, которые находятся в выделении. Я попробую разделить его на слои, как только мы объединим truecolor.
Это более приятно, я не думаю, что мы хотели бы пойти на компромисс между производительностью / архитектурой или чем-то еще, чтобы это стало возможным. https://github.com/sourcelair/xterm.js/issues/720 гораздо важнее imo.
У меня сейчас нет времени на пиар, но я обнаружил, что мы можем использовать свойство css mix-blend-mode
чтобы сделать это с помощью рендерера с очень небольшими усилиями:
.xterm-selection-layer {
mix-blend-mode: exclusion;
}
Кроме того, даже с непрозрачным цветом выделения это сделает видимыми передний план, выделение и фон:
.xterm-selection-layer {
mix-blend-mode: multiply;
}
К сожалению, Edge atm не поддерживает его.
Закрытие, поскольку это намного сложнее, чем кажется на первый взгляд правильным, и никто за это не голосовал. Плюс был бы еще один вариант.
Самый полезный комментарий
У меня сейчас нет времени на пиар, но я обнаружил, что мы можем использовать свойство css
mix-blend-mode
чтобы сделать это с помощью рендерера с очень небольшими усилиями:Кроме того, даже с непрозрачным цветом выделения это сделает видимыми передний план, выделение и фон:
К сожалению, Edge atm не поддерживает его.