Mengapa perintah `reset` termasuk penundaan?


17

The resetperintah termasuk penundaan, antara membersihkan layar dan kembali. Ini bahkan pada tipe terminal terbaru xterm-256color. Mengapa?

man resettidak menyebutkan penundaan, hanya pencetakan string khusus. (Tidak disebutkan juga membersihkan layar. Saya menganggap ini termasuk dalam string inisialisasi terminal).

Saya perhatikan output ikuti di strace -f reset:

nanosleep({tv_sec=1, tv_nsec=0}, 0x7ffe1964f100) = 0
ioctl(2, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0

Jawaban:


24

Terminal nyata (perangkat keras) membutuhkan itu. Misalnya, dengan beberapa, satu-satunya cara untuk meresetnya adalah dengan melakukan reset perangkat keras.

Tidak berbahaya dengan emulator terminal, dan karena tidak ada cara konvensional untuk mengetahui perbedaannya (dan terlalu sulit untuk menentukan apakah beberapa urutan escape mungkin melakukan reset perangkat keras), resetanggap terminal Anda nyata.

Penundaan waktu kembali ke tset3BSD pada tahun 1979, seperti ini:

    /* output startup string */
    if (!RepOnly && !NoInit)
    {
            bufp = buf;
            if (tgetstr("is", &bufp) != 0)
                    prs(buf);
            bufp = buf;
            if (tgetstr("if", &bufp) != 0)
                    cat(buf);
            sleep(1);       /* let terminal settle down */
    }

Ini agak berkembang dalam ncurses, tetapi menggunakan pedoman yang sama:

        if (!noinit) {
            if (send_init_strings(my_fd, &oldmode)) {
                (void) putc('\r', stderr);
                (void) fflush(stderr);
                (void) napms(1000);         /* Settle the terminal. */
            }
        }

Bacaan lebih lanjut:


1
Dalam kode OpenBSD, menunggu 1000 ms (melalui panggilan napms(1000)) disertai dengan komentar/* Settle the terminal. */
Kusalananda

2
OpenBSD menggunakan ncurses.
Thomas Dickey

1
Sementara kami di sini, bisakah Anda menjelaskan cara menghapus penundaan jika memungkinkan?
user541686

7
@Mehrdad Anda bisa mencoba tput reset. Sepertinya tidak menggunakan penundaan.
Ross Ridge

3
@Mehrdad stty sanetampaknya memperbaiki kondisi pertama, tanpa penundaan.
sourcejedi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.