Jawaban Johan Myréen sudah dekat, tetapi tidak persis masalahnya: sebagian besar emulator terminal yang akan Anda gunakan memiliki mode normal dan aplikasi untuk kunci khusus. Deskripsi terminal ditulis untuk satu mode, yang sesuai dengan apa yang digunakan aplikasi layar penuh. Aplikasi lain (seperti shell interaktif ) biasanya tidak menginisialisasi layar untuk menggunakan mode aplikasi . Bash adalah contohnya.
Dalam mode normal , xterm dan terminal serupa mengirim escape[
(CSI) ketika dalam mode aplikasi , keypad mereka mengirim escapeO
(SS3). Dalam sintaks terminfo, pelarian itu adalah \E
. Jadi infocmp
menunjukkan kepada Anda bahwa deskripsi menggunakan mode aplikasi. The home
kemampuan dikirim ke terminal, mengatakan itu bagaimana untuk memindahkan kursor ke rumah posisi (kiri atas), dan tidak sama dengan khome
(dikirim dari terminal menggunakan keyboard).
Aplikasi layar penuh (seperti yang menggunakan ncurses) dapat mengirim string kemampuan terminal untuk menginisialisasi keypad. Beberapa deskripsi terminal menempatkan terminal ke mode aplikasi, beberapa tidak.
Penggunaan kend
versus end
adalah konvensi penamaan: dalam terminfo oleh konvensi, nama apa pun yang dimulai dengan k mengacu pada tombol khusus (tombol fungsi, tombol kursor, tombol-tombol) untuk memperjelas bahwa ini adalah string yang harus dibaca oleh aplikasi. Misalnya, kcub1
( tombol kursor mundur ) berbeda dari cub1
(pindahkan kursor ke belakang satu kolom).
ncurses mengenali kunci KEY_END
karena aplikasi yang Anda gunakan akan memanggil keypad
fungsi untuk menginisialisasi terminal menggunakan smkx
(mnemonic berarti "memulai mode transmisi keyboard"). Itu mungkin / mungkin tidak benar-benar mengaktifkan mode aplikasi. Deskripsi terminal konsol Linux tidak, sedangkan xterm.
Pada prinsipnya, Anda dapat menggunakan tput
untuk mengganti mode (dan mendapatkan hasil berbeda dari showkey
):
$ showkey -a
Press any keys - Ctrl-D will terminate this program
^[[H 27 0033 0x1b
91 0133 0x5b
72 0110 0x48
^C 3 0003 0x03
^D 4 0004 0x04
$ tput smkx
$ showkey -a
Press any keys - Ctrl-D will terminate this program
^[OH 27 0033 0x1b
79 0117 0x4f
72 0110 0x48
Sebagai komplikasi, kutukan hanya akan mengenali satu nama untuk sebuah string. Beberapa terminal (seperti xterm) meniru terminal perangkat keras yang lebih tua menggunakan nama yang berbeda untuk tombol pada keypad pengeditan. Dalam FAQ xterm yang tercantum di bawah, ada kemungkinan penamaan bahwa "Beranda" kunci "Sisipkan" ...
Bacaan lebih lanjut:
home
dankhome
adalah bahwakhome
string adalah urutan yang menekan tombol Home menghasilkan, sedangkanhome
string adalah urutan yang harus dikirim ke terminal untuk memindahkan kursor ke posisi home. Sepengetahuan saya, terminfo tidak mendefinisikanend
kemampuan, hanya sajakend
.