Xterm.js: Permitir que la selección se invierta

Creado en 10 jun. 2017  ·  4Comentarios  ·  Fuente: xtermjs/xterm.js

Dado que ya no podemos usar ::selection esto ya no es posible como es con la versión actual de VS Code.

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

Hay un par de desafíos al abordar este problema:

  • La selección se dibuja actualmente debajo del texto en las filas, que también puede tener un color de fondo. Esta separación es buena y sería una buena idea mantener la representación de la selección completamente separada de la representación de las filas.
  • Dado que no todos los elementos de .xterm-rows no están envueltos en su propio elemento, la selección puede comenzar o terminar en el medio de un elemento, lo que restringe algunas de las soluciones.

Una idea:

  • Aproveche la idea de que la selección se divide en 3 partes; fila superior, filas del medio, fila inferior (como en https://github.com/sourcelair/xterm.js/pull/691)
  • Los elementos de la fila central dentro de .xterm-rows se pueden marcar con la clase xterm-invert-selection que invierten los colores de fondo y de primer plano mediante CSS.
  • Las filas superior e inferior se pueden dibujar encima de las filas usando z-index: 1 y el contenido real de la fila se agrega a la selección. Luego se puede agregar aria-hidden por si acaso para asegurarse de que no se lea dos veces.

Sin embargo, no estoy seguro de si es la solución correcta, realmente no me gusta la duplicación de texto en la solución anterior, pero al menos está en 2 filas.

areselection out-of-scope typenhancement

Comentario más útil

No tengo tiempo para un PR en este momento, pero descubrí que podemos usar la propiedad css mix-blend-mode para hacer esto con el renderizador con muy poco esfuerzo:

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

Además, incluso con un color de selección no opaco, esto hará que el primer plano, la selección y el fondo sean visibles:

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

Desafortunadamente, no parece ser compatible con el cajero automático Edge.

Todos 4 comentarios

@Tyriar Reflexionando sobre esto, me temo que su idea anterior no funcionará una vez que enviemos el soporte de color verdadero. Me temo que tenemos que dividir fondo / selección / primer plano en capas separadas y luego manipular las columnas de primer plano y fondo que están dentro de la selección. Intentaré dividirlo en capas una vez que tengamos truecolor combinado.

Es más agradable tener esto, no creo que queramos comprometer el rendimiento / la arquitectura o cualquier cosa para que esto sea posible. https://github.com/sourcelair/xterm.js/issues/720 es mucho más importante en mi opinión.

No tengo tiempo para un PR en este momento, pero descubrí que podemos usar la propiedad css mix-blend-mode para hacer esto con el renderizador con muy poco esfuerzo:

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

Además, incluso con un color de selección no opaco, esto hará que el primer plano, la selección y el fondo sean visibles:

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

Desafortunadamente, no parece ser compatible con el cajero automático Edge.

Cerrar ya que esto es mucho más complejo de lo que inicialmente parecía correcto y nadie ha votado a favor. Además, sería otra opción más.

¿Fue útil esta página
0 / 5 - 0 calificaciones