Shift-Space dalam waktu kurang

9

Di peramban web modern dan peranti lunak lain dengan konten teks, Spacegulir layar ke bawah sedikit banyak. ShiftSpacegulir dalam segala hal kecuali less.

Bagaimana seseorang bisa menggunakan ShiftSpacescroll up less? Atau sebagai alternatif, apakah ada pager lain (kompatibilitas POSIX adalah satu-satunya persyaratan saya) yang dapat melakukan pekerjaan itu?

Saya diberitahu beberapa emulator terminal, dan beberapa perpustakaan UI terminal (ncurses?), Tidak mengenali ShiftSpace. Apakah itu masalah yang valid?

Orpheus
sumber
Apa yang salah dengan tombol PgUp Anda ? Tidak cukup besar?
goldilocks
@goldilocks: Tidak ada salahnya ingin menggunakan Shift-Space, terutama jika Anda terbiasa menggunakannya dengan alat lain. Kebetulan tidak mungkin untuk lessmembedakan antara Space dan Shift-Space.
Keith Thompson
Anda dapat mengkonfigurasi terminal (emulator) untuk mengirim batau ^B(0x2) <shift-Space>. Perhatikan bahwa btepat di atas bilah spasi dalam banyak konfigurasi keyboard
Stéphane Chazelas
@KeithThompson: Semoga saja persahabatan yang bersahabat. Saya berempati; Saya ingin /secara universal diadopsi sebagai "teks pencarian" dengan berbagai alat yang umum, tetapi pada saat yang sama saya khawatir memaksakan standar meglomaniacal yang berlebihan yang membuatnya lebih mudah untuk melakukan sesuatu yang dapat dilakukan dengan satu keystroke (yang dapat dikenali secara universal). Menarik untuk mengetahui bahwa dalam hal ini ini adalah batasan teknis (lihat jawaban 200_success) dan bukan desain yang secara gamblang menjelaskan.
goldilocks
1
@KeithThompson, lihat translationssumber daya untuk widget VT100.
Stéphane Chazelas

Jawaban:

6

Saya pikir Anda telah membawa bentrokan budaya yang disebabkan oleh keterbatasan teknis. Karena Shift+ Spacemenghasilkan keluaran yang sama dengan Space, model terminal Unix memperlakukannya secara identik. Untuk membedakan keduanya, Anda memerlukan lingkungan pemrograman yang mendukung peristiwa key up / key down. Itu dimungkinkan di X11 dan di emulator terminal yang mendukung kunci remapping. Contoh memetakan ulang Shift+ Spaceke PageUp:

# For [u]rxvt, in ~/.Xdefaults:
URxvt.keysym.Shift-space: \033[5~
200_sukses
sumber
1
Kebanyakan emulator terminal mendukung kunci remapping, jadi dimungkinkan untuk melakukannya dengan kebanyakan emulator terminal ( xterm -xrm 'XTerm.VT100.translations: #override Shift <KeyPress> space: string(0x2)'misalnya dalam xterm, atau Anda mengirim urutan yang sama seperti yang dikirim pada <PageUp>). Tentu saja, itu akan membuat memasukkan teks sambil menahan tombol shift canggung.
Stéphane Chazelas
1

Pada emulator terminal, fitur ini akan menghentikan pengetikan teks huruf besar dengan spasi tertanam dengan menahan Shift. Misalnya, jika Anda ingin mengetik "Ini Judul", Anda harus melepaskan Shift antara "A" dan "T". Terus menekannya akan memindahkan kursor Anda dan salah menempatkan sisa dari apa yang Anda ketik. Saya percaya itu akan jauh lebih menyebalkan daripada apa yang Anda dapatkan dengan fitur scroll up.

Memiliki perilaku reguler saat mengetik teks, dan menggulir ke atas setiap kali Space menggulir ke bawah akan membutuhkan desain ulang dan kerja sama yang berat dari aplikasi (misalnya aplikasi yang dapat beralih apa yang dikirim Shift + Space), saya cukup yakin itu tidak akan terjadi.

Perbedaan utama adalah bahwa aplikasi GUI mengetahui "konteks" apakah Anda mengedit atau melihat konten, emulator terminal tidak memiliki cara untuk mengetahui hal ini.

egmont
sumber
1

Terminal emulator mengirim karakter yang sama pada Spacedan Shift+Space. Jika tidak, maka akan sulit untuk mengetik teks sambil menahan Shiftkunci (lihat @ egmont's jawaban yang memperluas argumen itu).

Namun, Anda dapat menyiasatinya dengan memetakan Shift+Spaceke urutan karakter yang pada akhirnya akan memasukkan ruang secara default, dan untuk itu Anda dapat mengonfigurasi aplikasi seperti lessmenggulir ke atas pada penekanan tombol tersebut.

Misalnya, urutan seperti itu bisa ` DEL SPC(ubah DELke BSsistem di mana BS adalah erasekarakter).

Untuk xterm, tambahkan sumber daya:

XTerm.VT100.translations: #override \
  Shift <KeyPress> space: string("`") string(0x7f) string(" ") 

Dan konfigurasikan lessdengan:

printf '%s\n' '#command' '`\177\40 back-screen' | lesskey -
Stéphane Chazelas
sumber
1

lesssaat ini tidak mendukung ini, tetapi pasti bisa ditambahkan .

Jika suatu program menggunakan urutan kontrol xterm untuk mengatur modifyOtherKeyske 2 dengan menulis \e[>4;2mke terminal, maka xtermmembubuhi keterangan kunci dengan informasi tambahan tentang kunci pengubah apa yang aktif. Khusus untuk Spacekunci, dengan modifyOtherKeysaktif dalam xterm, Shift+ Spaceberubah menjadi \e[27;2;32~. lessharus menafsirkan ini dengan benar sebagai Shift+ Spacedan kemudian memicu gulir ke atas.

Meskipun ini pasti akan bekerja di xterm, itu tidak akan berfungsi di setiap aplikasi terminal. Tetapi terminal yang tidak mengenali urutan pelarian ini untuk dihidupkan modifyOtherKeyshanya akan mengabaikan urutan pelarian itu dan terus mengirimkan program karakter ruang normal ketika Anda menekan Shift+ Space.

Ada halaman yang cukup rinci pada situs web xterm yang menjelaskan bagaimana modifyOtherKeyskode dihitung: https://invisible-island.net/xterm/modified-keys.html

andrew
sumber