Xterm.js: Biarkan seleksi dibalik

Dibuat pada 10 Jun 2017  ·  4Komentar  ·  Sumber: xtermjs/xterm.js

Karena kita tidak bisa lagi menggunakan ::selection ini tidak mungkin lagi seperti pada versi VS Code saat ini.

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

Ada beberapa tantangan ketika mendekati masalah ini:

  • Pilihan saat ini digambar di bawah teks dalam baris, yang juga dapat memiliki warna latar belakang. Pemisahan ini bagus dan merupakan ide yang baik untuk menjaga rendering seleksi benar-benar terpisah dari rendering baris.
  • Karena tidak setiap elemen dalam .xterm-rows tidak dibungkus dalam elemennya sendiri, pemilihan dapat dimulai atau diakhiri di tengah elemen, yang membatasi beberapa solusi.

Satu ide:

  • Manfaatkan gagasan bahwa seleksi dibagi menjadi 3 bagian; baris atas, baris tengah, baris bawah (seperti pada https://github.com/sourcelair/xterm.js/pull/691)
  • Elemen baris tengah dalam .xterm-rows dapat ditandai dengan kelas xterm-invert-selection yang membalikkan warna latar belakang dan latar depan melalui CSS.
  • Baris atas dan bawah dapat digambar di atas baris menggunakan z-index: 1 dan konten sebenarnya dari baris ditambahkan ke pilihan. aria-hidden kemudian dapat ditambahkan untuk ukuran yang baik untuk memastikan itu tidak dibacakan dua kali.

Tidak yakin apakah itu solusi yang tepat, saya tidak terlalu suka duplikasi teks dalam solusi di atas tetapi setidaknya hanya pada 2 baris.

areselection out-of-scope typenhancement

Komentar yang paling membantu

Saya tidak punya waktu untuk PR sekarang, tetapi saya menemukan bahwa kami dapat menggunakan properti css mix-blend-mode untuk menyelesaikan ini dengan penyaji dengan upaya yang sangat rendah:

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

Selain itu, bahkan dengan pemilihan warna yang tidak buram, ini akan membuat latar depan, pemilihan, dan latar belakang terlihat:

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

Sayangnya, tampaknya tidak didukung oleh Edge atm.

Semua 4 komentar

@Tyriar Memberikan ini beberapa pemikiran, saya khawatir ide Anda di atas tidak akan berfungsi setelah kami mengirimkan dukungan warna yang sebenarnya. Saya khawatir kita harus membagi latar belakang / seleksi / latar depan menjadi lapisan terpisah, dan kemudian memanipulasi latar depan dan latar belakang yang ada di dalam seleksi. Saya akan mencoba membaginya menjadi beberapa lapisan setelah kita menggabungkan truecolor.

Ini lebih bagus untuk dimiliki, saya tidak berpikir kami ingin berkompromi dengan kinerja/arsitektur atau apa pun untuk memungkinkan ini. https://github.com/sourcelair/xterm.js/issues/720 jauh lebih penting.

Saya tidak punya waktu untuk PR sekarang, tetapi saya menemukan bahwa kami dapat menggunakan properti css mix-blend-mode untuk menyelesaikan ini dengan penyaji dengan upaya yang sangat rendah:

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

Selain itu, bahkan dengan pemilihan warna yang tidak buram, ini akan membuat latar depan, pemilihan, dan latar belakang terlihat:

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

Sayangnya, tampaknya tidak didukung oleh Edge atm.

Penutupan karena ini jauh lebih kompleks daripada yang tampaknya benar dan tidak ada yang memilihnya. Plus itu akan menjadi pilihan lain.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

Tyriar picture Tyriar  ·  4Komentar

tandatle picture tandatle  ·  3Komentar

pfitzseb picture pfitzseb  ·  3Komentar

albinekb picture albinekb  ·  4Komentar

LB-J picture LB-J  ·  3Komentar