Xterm.js: Pengguliran halus

Dibuat pada 11 Des 2017  ·  16Komentar  ·  Sumber: xtermjs/xterm.js

Sebagai seseorang yang baru bekerja dengan CLI, saya merasa secara kognitif lebih sulit untuk melihat pengguliran baris demi baris yang digunakan di terminal dibandingkan dengan pengguliran mulus sebagian besar aplikasi lain. Saya belajar bahwa itu karena di terminal, karakter dan bukan piksel adalah unit tampilan terkecil.

Apakah mungkin (dan diinginkan) bagi xterm.js untuk mengatasi ini dan menggabungkan opsi pengguliran berbasis piksel yang mulus?

Saya awalnya meminta @albinekb hal yang sama untuk Hyper (https://github.com/zeit/hyper) dan dia merujuk saya ke proyek ini karena Hyper menggunakan xterm.js.

aremouse-support typenhancement

Komentar yang paling membantu

sesuatu yang hanya sedikit orang yang akan menggunakannya

Setiap orang yang menggulir dengan touchpad menggunakannya di VTE, suka atau tidak suka :D

Semua 16 komentar

Tentu saja mungkin untuk dilakukan tetapi itu akan menjadi pekerjaan yang cukup banyak (+ kompleksitas tambahan) untuk sesuatu yang hanya sedikit orang yang akan menggunakannya. Saya lebih suka untuk tidak menambahkan ini secara pribadi.

Itu bisa dimengerti dan adil. Terima kasih atas pekerjaan Anda!

FYI: VTE (Terminal GNOME dan teman-teman) melakukan ini sejak versi 0.44. (Tentu saja ini hanya berfungsi di scrollback terminal emulator, bukan saat menggulir file dalam editor teks.)

sesuatu yang hanya sedikit orang yang akan menggunakannya

Setiap orang yang menggulir dengan touchpad menggunakannya di VTE, suka atau tidak suka :D

@egmontkob Saya memiliki terminal gnome 3.18.3 di sini dan sepertinya tidak berfungsi, bagian gulir di pengaturan profil juga sepertinya tidak memiliki pengaturan?

screen shot 2017-12-18 at 6 57 19 am

gt 3.18.3 kemungkinan besar berarti Anda memiliki vte 0.42, sedangkan fitur ini baru di 0.44.

Tidak ada pengaturan baru (ada permintaan prio rendah yang tertunda untuk menambahkannya), itu hanya berperilaku berbeda dari sebelumnya.

Seseorang sudah menyatakan ketidaksukaan mereka tentang ini yang tidak dapat dikonfigurasi di VTE. Tentu saja itu sepenuhnya pilihan Anda apakah Anda menerapkan fitur ini sama sekali di xtermjs, dan jika ya, apakah Anda membuatnya dapat dikonfigurasi.

Saya pikir itu bisa menjadi titik data berharga bagi Anda bahwa fitur ini telah ada di VTE selama lebih dari 1,5 tahun sekarang, dan "dipaksa" pada semua pengguna VTE yang menggunakan trackpad (bukan roda mouse yang mengirimkan "unit" pengguliran yang kami masih menggulir seluruh baris), dan selama ini saya mendengar 2 atau mungkin 3 keluhan secara total untuk mengembalikan perilaku lama. Jika fitur ini payah, akan ada lebih banyak keluhan.


Saya tidak memiliki angka penggunaan atau rasio tentang VTE, yang paling dekat yang saya miliki adalah hasil jajak pendapat ini (perhatikan bahwa tanggal artikel rusak, berdasarkan stempel waktu komentar itu adalah suara berusia 2 tahun) yang menunjukkan bahwa VTE pangsa pasar di antara emulator terminal Linux berada di rata-rata 50%, yaitu, cukup besar. Begitu banyak orang di luar sana yang sudah menggunakan pengguliran halus.


Saya baru mengenal xtermjs dan teman-teman dan saya belum mencobanya, lihat saja hal-hal keren terjadi di sini. Saya tidak yakin saya memiliki arsitektur yang tepat dalam pikiran saya, tetapi jika saya melakukannya maka Terminal GNOME adalah untuk VTE apa hterm adalah untuk xtermjs. VTE adalah widget GTK+ yang melakukan emulasi terminal. Ada sekitar selusin aplikasi emulator terminal yang kurang lebih populer menggunakan VTE, termasuk Terminal GNOME, Terminal Xfce4, Terminator, Tilix...


Jika Anda ingin mencoba perilaku tersebut, cara termudah (untuk ini, serta semua fitur VTE yang tidak memerlukan kerja sama dari Terminal GNOME) adalah dengan mengompilasi VTE saja dan memulai aplikasi pengujiannya:

  • Dapatkan dari git atau tarball
  • ./autogen.sh (git) atau ./configure (tarball)
  • make
  • ./src/app/vte-2.91 (dari 0,51) atau ./src/testvte (hingga 0,50) atau ./bindings/vala/vte-2.91 atau ./src/vte-2.91 (hingga 0,50, dipindahkan ke direktori lain di beberapa titik)

Saya menggunakan roda mouse, itu masalah saya :sweat_smile:

Pada postingan awal saya lupa menyebutkan detail yang cukup penting bahwa saya memang menggunakan trackpad. Mengabaikan pengguna trackpad atau pengguna metode input berbasis sentuhan lainnya, saya memahami bahwa hanya sedikit orang yang lebih menyukai pengguliran berbasis piksel.

IMO aman untuk mengatakan bahwa itu hanya diharapkan oleh pengguna saat ini. Maksudku, bahkan hterm memilikinya.

Ini tidak benar-benar mungkin dengan perender kanvas, namun itu akan cukup mudah dilakukan dengan perender webgl https://github.com/xtermjs/xterm.js/pull/1790 yang seharusnya menggantikan perender kanvas. Untuk perender DOM kita dapat mencapai ini dengan memiliki garis yang terlihat sebagian di bagian atas dan bawah. Karena itu, saya menganggap ini diblokir pada # 1790

Hal lain yang perlu dipertimbangkan: memiliki ydisp bukan bilangan bulat dan memiliki lebih dari baris dari Terminal.rows terlihat merusak beberapa asumsi yang dibuat dalam kode, misalnya bagaimana pengaruhnya terhadap dukungan pembaca layar?

Itu tidak mungkin dengan penyaji kanvas

Kenapa tidak? Ini harus sesederhana menggambar viewportHeight + 2 jumlah baris, dan mengimbangi suatu tempat antara baris pertama dan kedua berdasarkan piksel-offset posisi gulir saat ini.

Tentu saja mungkin untuk dilakukan tetapi itu akan menjadi pekerjaan yang cukup banyak (+ kompleksitas tambahan) untuk sesuatu yang hanya sedikit orang yang akan menggunakannya. Saya lebih suka untuk tidak menambahkan ini secara pribadi.

Fwiw saya akan meminta fitur yang sama. Saya pribadi berpikir ini adalah langkah penting menuju peningkatan kegunaan. Fakta bahwa itu tidak didukung secara lebih luas dapat dijelaskan oleh fakta bahwa ini adalah ide yang relatif baru, dan bahwa kami para programmer cenderung terbiasa dengan keterbatasan yang harus kami tangani.

Kenapa tidak?

@sdegutis ya itu mungkin, saat itu saya berpikir bahwa penyaji kanvas akan sangat dioptimalkan dengan menggunakan logika khusus untuk hanya membatalkan bagian konten yang membutuhkannya. Menggulir terminal sekarang dengan perender kanvas akan merender ulang semua baris, plus meskipun itu default, rencananya adalah untuk menghapus perender kanvas.

Seharusnya cukup mudah untuk menjalankan ini, hanya saja itu perlu dilakukan untuk 3 penyaji dan webgl khususnya akan memerlukan beberapa penyesuaian khusus (menambah ukuran buffer atribut karena ada lebih banyak sel yang diambil daripada baris * cols).

Saya juga menyukai fitur ini, masalah saya sebenarnya bukan hanya estetika, ini masalah kegunaan. Masalahnya adalah bahwa satu tindakan, menyebabkan terlalu banyak lompatan di terminal dan fakta bahwa tidak ada gulir yang mulus membuatnya hampir tidak mungkin untuk memahami baris apa yang dilewati. Itu benar-benar membuat terminal sulit digunakan.

Setiap kali saya menggulir terminal di Visual Studio Code, saya kehilangan jejak di mana saya berada. Pengguliran halus adalah fitur dasar dan kami membutuhkannya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat