Xterm.js: 選択を反転できるようにする

作成日 2017年06月10日  ·  4コメント  ·  ソース: xtermjs/xterm.js

::selection使用できなくなったため、現在のバージョンのVS Codeの場合とは異なり、これは使用できなくなりました。

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

この問題に取り組む際には、いくつかの課題があります。

  • 選択範囲は現在、行のテキストの下に描画されており、背景色にすることもできます。 この分離は適切であり、選択範囲のレンダリングを行のレンダリングと完全に分離しておくことをお勧めします。
  • .xterm-rows内のすべての要素が独自の要素でラップされているわけではないため、選択は要素の途中で開始または終了する場合があり、これにより一部のソリューションが制限されます。

1つのアイデア:

  • 選択が3つのチャンクに分割されるという考えを活用します。 上段、中段、下段(https://github.com/sourcelair/xterm.js/pull/691のように)
  • .xterm-rows内の中央の行の要素は、CSSを介して背景色と前景色を反転するxterm-invert-selectionクラスでマークできます。
  • z-index: 1を使用して、行の上に上と下の行を描画でき、行の実際のコンテンツが選択に追加されます。 次に、 aria-hiddenを追加して、2回読み取られないようにすることができます。

それが正しい解決策であるかどうかはわかりませんが、上記の解決策でのテキストの複製はあまり好きではありませんが、少なくとも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;
}

残念ながら、Edgeatmではサポートされていないようです。

全てのコメント4件

@Tyriarこれにいくつかの考えを与えて、私たちがトゥルーカラーサポートを出荷すると、上記のあなたのアイデアは機能しないのではないかと思います。 背景/選択/前景を別々のレイヤーに分割してから、選択範囲内の前景と背景の列を操作する必要があるのではないかと思います。 トゥルーカラーをマージしたら、レイヤーに分割してみます。

これはもっといいことです。これを可能にするために、パフォーマンスやアーキテクチャなどを妥協したいとは思わないでしょう。 https://github.com/sourcelair/xterm.js/issues/720ははるかに重要なimoです。

現在PRを行う時間はありませんが、css mix-blend-modeプロパティを使用して、非常に少ない労力でレンダラーでこれを実行できることを発見しました。

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

さらに、不透明でない選択色を使用しても、前景、選択、および背景が表示されます。

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

残念ながら、Edgeatmではサポートされていないようです。

これは当初正しく行われているように見えるよりもはるかに複雑であり、誰もそれに投票していないため、締めくくります。 さらに、それはさらに別のオプションになります。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

jerch picture jerch  ·  3コメント

jestapinski picture jestapinski  ·  3コメント

circuitry2 picture circuitry2  ·  4コメント

pfitzseb picture pfitzseb  ·  3コメント

travisobregon picture travisobregon  ·  3コメント