¿Por qué el comando `reset` incluye un retraso?

17

El resetcomando incluye un retraso, entre borrar la pantalla y volver. Esto es incluso en el último tipo de terminal xterm-256color. ¿Por qué?

man resetno menciona un retraso, solo la impresión de cadenas especiales. (Tampoco menciona borrar la pantalla. Supongo que esto está incluido en la cadena de inicialización del terminal).

Noto el siguiente resultado en 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
sourcejedi
fuente

Respuestas:

24

Los terminales reales (hardware) lo necesitan. Por ejemplo, con algunos, la única forma de restablecerlos es restablecer el hardware.

Es inofensivo con un emulador de terminal, y dado que no hay una forma convencional de notar la diferencia (y demasiado difícil de determinar si alguna secuencia de escape podría restablecer el hardware), se resetsupone que su terminal es real.

El retraso se remonta a tset3BSD en 1979, así:

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

Ha evolucionado algo en ncurses, pero usando la misma directriz:

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

Otras lecturas:

Thomas Dickey
fuente
1
En el código de OpenBSD, la espera de 1000 ms (a través de llamadas napms(1000)) va acompañada del comentario/* Settle the terminal. */
Kusalananda
2
OpenBSD usa ncurses.
Thomas Dickey
1
Mientras estamos aquí, ¿podría explicar cómo eliminar la demora si es posible?
user541686
77
@Mehrdad Podrías intentarlo tput reset. No parece usar el retraso.
Ross Ridge
3
@Mehrdad stty saneparece corregir la primera condición, sin demora.
sourcejedi