Apa yang Anda tanyakan sebenarnya bukan API grafis, itu hanya karakter kontrol terminal.
Ada banyak sejarah di baliknya, tetapi terminal pada masa itu adalah mesin Teletype . Pada dasarnya sebuah mesin tik dengan kertas pengumpanan track terhubung ke komputer dengan koneksi serial. Mengetik karakter akan mengirim nilai biner itu ke komputer (dan juga mengetiknya di halaman). Komputer akan mencetak karakter kembali sebagai output dari apa pun yang Anda minta.
Karakter khusus digunakan untuk mengendalikan terminal (dari sanalah kunci kontrol berasal, itu untuk menghasilkan karakter tersebut). Misalnya, ^H
atau ^?
akan menjadi backspace, ^M
adalah carriage return (memindahkan kursor ke awal baris) dan ^J
merupakan umpan baris (memindahkan halaman ke atas satu baris). Beberapa kode kontrol memiliki urutan keluar dalam C (yang dibagikan oleh hampir semua bahasa pemrograman) untuk menghasilkan karakter kontrol. Kontrol terdaftar sebelumnya akan \b
, \r
, \n
masing-masing.
The emulator terminal Anda gunakan hari ini adalah hanya apa yang suara seperti, software itu yang berpura-pura menjadi mesin teletype tua. Di satu sisi, hampir seolah-olah Unix masih berpikir Anda menggunakan mesin tik untuk berkomunikasi dengannya.
Dalam kasus curl
, ia menulis seluruh baris kemudian mengirimkan \r
(carriage return) mengambil kursor ke awal baris kemudian menulis baris lain. Karena umpan baris tidak terkirim, ia terus menulis pada baris yang sama di layar.
Berikut ini sesuatu yang dapat Anda coba tunjukkan:
echo -n "First" ; sleep 5 ; echo -en "\rSecond\n"
Anda akan melihat kata "Pertama" dicetak (tetapi tidak ada baris baru yang dikirim). 5 detik kemudian akan diganti dengan kata "Kedua" dan baris baru dikirim. Anda dapat mengulangi pola ini tanpa batas. Coba tambahkan "Ketiga" sendiri, Anda akan melihat sesuatu yang mungkin tidak Anda harapkan ;-)
Untuk informasi lebih lanjut tentang ini dan karakter kontrol lainnya lihat ascii(7)
manual.
ncurses
.Pertanyaan itu sebenarnya beberapa pertanyaan, dan "karakter kontrol" hanya membahas sebagian kecil saja, misalnya bilah kemajuan untuk
curl
. Secara umum, ini adalah fitur umum dari terminal (dan emulator terminal).Sebagian besar fitur umum ini distandarisasi dalam ECMA-48: Fungsi Kontrol untuk Set Karakter Coded . Namun, fitur lainnya tidak . Mereka didefinisikan implementasi.
ECMA-48 mengacu pada fungsi kontrol . Itu termasuk karakter kontrol dan urutan kontrol (sering disebut sebagai urutan melarikan diri, urutan ANSI, dll).
Beberapa karakter kontrol digunakan untuk operasi sederhana , misalnya,
Bilah kemajuan untuk
curl
dibangun menggunakan operasi sederhana ini. Tetapi karakter kontrol hanya bisa melakukan begitu banyak, tidak lebih. Kontrol urutan melakukan lebih banyak, misalnya,Begitu banyak persamaan antara sederhana / kompleks. Urutan kontrol juga digunakan untuk mengubah warna teks dan latar belakang, menghapus teks dari layar, menampilkan teks dalam video terbalik (atau cetak tebal, garis bawah, berkedip).
Program yang menggambar urutan kontrol menggunakan reverse-video (atau berwarna) menggunakan bar .
Meskipun urutan kontrol dapat melakukan lebih banyak, mereka hanya dapat melakukan hal-hal tertentu. Menyatukan mereka untuk membuat editor teks, layar instalasi (dan program yang menggambar progress-bar berwarna) menjadi rumit. Beberapa di antaranya dibuat lebih sederhana dengan menggunakan perpustakaan yang tahu tentang hal-hal ini. Awalnya, kami memiliki termcap (dan database beberapa ratus jenis terminal), diperluas ke terminfo (dan database sekitar seribu jenis terminal).
Bahkan dengan standarisasi, ada puluhan deskripsi terminal yang dapat Anda gunakan . Jadi kami terus menggunakan perpustakaan untuk semua kecuali yang paling sepele dari aplikasi ini. Salah satunya adalah ncurses ("kutukan baru"), yang lain adalah bahasa gaul (secara teknis "S-Lang").
Bacaan lebih lanjut:
sumber