Jadi saya menulis emulasi terminal (saya tahu, saya harus mengkompilasi dempul, dll.) Dan saya pada tahap melompati vttest untuk memastikan itu benar. Saya mendasarkannya pada VT102 untuk saat ini tetapi akan menambahkan fitur terminal nantinya seperti warna ketika dasar-dasarnya bekerja dengan benar.
Set perintah sebagian besar ANSI. DEC memiliki set perintah mereka sendiri tetapi mendukung perintah ANSI dari sekitar tahun 1973. Standar-standar ANSI itu tampaknya tidak tersedia sekarang tetapi ekuivalen ECMA adalah, saya memilikinya (ECMA-48 tampaknya paling relevan) tetapi tidak menjawab pertanyaan ini sejauh saya bisa melihat. Sebagian besar urutan perintah ANSI dimulai dengan ESC. Banyak perintah dimulai dengan pengidentifikasi urutan perintah yang ditampilkan di sini sebagai CSI dan direpresentasikan dalam data sebagai 0x1c 0x5b (ESC [
), atau 0xdb jika komunikasi 8-bit dimungkinkan. Kemudian mengikuti urutan yang mengidentifikasi perintah. Beberapa perintah mempengaruhi posisi kursor, beberapa layar, beberapa memprovokasi respons ke tuan rumah dan sebagainya.
Beberapa perintah terminal termasuk argumen numerik. Contoh CSI 10 ; 5 H
berarti membuat posisi kursor baris 10, kolom 5. Ketika argumen numerik hilang ada nilai default untuk digunakan: CSI 10 ; H
berarti membuat posisi kursor baris 10, kolom 1 karena 1 adalah nilai default ketika argumen tidak diberikan.
Saya memiliki manual vt102 dari vt100.net (sumber yang bagus) dan sekitar selusin halaman memberikan informasi parsial tentang urutan perintah ini. Tampaknya spec terminal DEC Injil yang lengkap tidak pernah keluar dari DEC.
Yang jelas adalah CSI C
memindahkan kursor ke kanan dan nilai defaultnya adalah 1.
Apa yang tidak jelas adalah apa artinya CSI 0 C
.
Mengapa ada nol di sana, sepertinya membuat perintah tidak melakukan apa-apa? Jika itu berarti "gunakan nilai default" maka itu bisa dikirim sebagai 1 sebagai gantinya, tetapi string yang lebih pendek tidak memiliki argumen dan mengandalkan nilai default yang ditafsirkan sebagai 1. Terminal VT fisik yang sebenarnya sering digunakan pada 300 baud dan di bawah sehingga karakter yang satu itu penting!
Saya tidak begitu mahir dengan vttest sehingga saya bisa mencoba keduanya dan melihat mana yang membuat semuanya sempurna tetapi saya cukup jauh sehingga pertanyaan kecil seperti ini mulai menjadi masalah.
sumber
[
, yang dapat disandikan sebagai urutan dua karakterESC [
, atau seperti[
yang diatur pada bit ke-8. (Beberapa model mungkin hanya mendukungESC [
) Saya tidak tahu apa yangCSI 0 C
terjadi pada vt102; pada xterm sama denganCSI 1 C
. Saya curiga, tetapi tidak tahu pasti, bahwa 0 dan tidak adanya nilai diuraikan secara identik di beberapa titik (pikirkanatoi
). Apakah Anda mencari komentar di sumber xterm?Jawaban:
Saya menghubungi Thomas Dickey (invisible-island.net) yang mengelola xterm dan vttest - ia menjelaskan bahwa
CSI 0 C
itu sama denganCSI 1 C
atauCSI C
di xterm.Bagi siapa pun yang mencari informasi lebih lanjut tentang pemrograman terminal, saya sangat merekomendasikan untuk memeriksa sumber xterm yang dihostingnya - khususnya ctlseqs.txt di dalam xterm, yang sangat mirip dengan referensi sekuens kontrol terminal yang benar yang telah saya cari.
sumber
Mengapa kompatibilitas hardcode untuk jenis terminal tertentu ketika Anda sudah memiliki database yang memetakan fungsionalitas ke urutan kode spesifik untuk banyak terminal yang berbeda? (basis data terminfo biasanya di / usr / share dan termasuk dalam sebagian besar distribusi ncurses). Sumber daya apa pun tentang kutukan harus menjelaskan cara fungsi-fungsi ini diberi label.
Perhatikan bahwa file terminfo biasanya dikompilasi (menggunakan tic) sehingga Anda mungkin harus menggali sedikit untuk menemukan file source terminfo.
Lihat juga http://tldp.org/HOWTO/Text-Terminal-HOWTO.html#toc16 (ada tautan di dalamnya ke satu repositori file terminfo.src)
sumber