Perché il comando `reset` include un ritardo?


17

Il resetcomando include un ritardo, tra la cancellazione dello schermo e il ritorno. Questo è anche sull'ultimo tipo di terminale xterm-256color. Perché?

man resetnon menziona un ritardo, solo la stampa di stringhe speciali. (Non menziona nemmeno la cancellazione dello schermo. Presumo che questo sia incluso nella stringa di inizializzazione del terminale).

Ho notato il seguente output in 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

Risposte:


24

I terminali (hardware) reali ne hanno bisogno. Ad esempio, con alcuni, l'unico modo per ripristinarli è eseguire un ripristino hardware.

È innocuo con un emulatore di terminale e poiché non esiste un modo convenzionale per distinguere (e troppo difficile determinare se una sequenza di escape potrebbe eseguire un ripristino hardware), si resetassume che il terminale sia reale.

Il ritardo risale al tset3BSD nel 1979, in questo modo:

    /* 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 */
    }

Si è evoluto in qualche modo in ncurses, ma usando la stessa linea guida:

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

Ulteriori letture:

  • Storia (tsetpagina del manuale)
  • Storia (tputpagina del manuale)

1
Nel codice OpenBSD, l'attesa di 1000 ms (tramite chiamata napms(1000)) è accompagnata dal commento/* Settle the terminal. */
Kusalananda

2
OpenBSD usa ncurses.
Thomas Dickey,

1
Mentre siamo qui potresti spiegare come rimuovere il ritardo, se possibile?
user541686

7
@Mehrdad Potresti provare tput reset. Non sembra usare il ritardo.
Ross Ridge,

3
@Mehrdad stty sanesembra risolvere la prima condizione, senza alcun ritardo.
Fontejedi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.