Aku bertanya-tanya mengapa Shift+ Arrow Keyhasil di salah satu A
, B
, C
atau D
huruf.
Kenapa bukan surat lain? Kenapa ada surat?
command-line
Dan
sumber
sumber
Shift + Arrow Keys
tidak melakukan apa-apa.Jawaban:
Terminal emulator seperti
gnome-terminal
("Terminal" di Ubuntu) tetapi jugaxterm
danurxvt
dinamai "emulator" karena mereka mereproduksi perilaku terminal lama yang merupakan satu-satunya tampilan komputer. Terminal semacam itu berkomunikasi dengan komputer dengan protokol berbasis teks dan pada awalnya dirancang untuk hanya menerima teks. Dengan cepat, lebih banyak kontrol diperlukan: bagaimana cara menghapus garis? Gunakan warna? Atau ubah posisi kursor?Sumber: Seni Kegunaan Unix - Antarmuka Baris Perintah
Escape sequence dirancang untuk setiap terminal untuk melakukan hal-hal seperti itu. Mereka diberi nama melarikan diri karena mereka mulai dengan kode escape ASCII:
33
. Tidak ada cara untuk mencetak karakter seperti itu secara langsung, yang membuatnya cocok untuk urutan seperti itu. Ketika kami masih ingin menampilkan karakter ini,^[[
sudah digunakan, dan inilah yang akan saya gunakan dalam penjelasan saya.Ketika terminal diterima
^[[A
, itu tidak berarti "print ^ [[A", tetapi "pengguna menekan tombol panah atas". "A" di sini benar-benar arbitrer: kebetulan huruf yang disetujui semua orang, karena itulah yang DEC VT-52 dan penggantinya terminal VT-100 yang populer digunakan.Sumber: DEC VT-52 Manual Pemeliharaan 1976
Ini masih merupakan cara kerja emulator terminal hari ini: tergantung pada
$TERM
variabelnya, database bernamaterminfo
bertanggung jawab untuk mengatakan kode apa yang harus dikirim ke shell (bash, sh, zsh ...), yang kemudian bertanggung jawab untuk memahami mereka dan bereaksi ke mereka.Sekarang, kode untuk Shift+ upadalah
^[[1;2A
: terminal emulator mengirimkan kode ini ke shell, yang mencoba menafsirkan^[[1;2
tetapi tidak menampilkan apa-apa karena tidak tahu tentang urutan pelarian itu. TetapiA
dibiarkan dan ditampilkan.sumber
^[[A
masuk akal ketika saya mengklik tombol panah saat proses sedang berjalan di terminal.cat >/dev/null
lalu mengetik, dan tekan Ctrl + C (atau Enter lalu Ctrl + D) setelah selesai.