Por que o comando `reset` inclui um atraso?

17

O resetcomando inclui um atraso, entre limpar a tela e retornar. Isso é até no último tipo de terminal xterm-256color. Por quê?

man resetnão menciona um atraso, apenas a impressão de seqüências especiais. (Também não menciona a limpeza da tela. Suponho que isso esteja incluído na cadeia de inicialização do terminal).

Percebo a seguinte saída em 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
fonte

Respostas:

24

Os terminais reais (hardware) precisam disso. Por exemplo, com alguns, a única maneira de redefini-los é redefinir o hardware.

É inofensivo com um emulador de terminal e, como não há uma maneira convencional de diferenciar (e muito difícil determinar se alguma sequência de escape pode fazer uma redefinição de hardware), resetassume que o seu terminal é real.

O atraso de tempo remonta ao tset3BSD em 1979, assim:

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

Ele evoluiu um pouco em ncurses, mas usando a mesma diretriz:

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

Leitura adicional:

Thomas Dickey
fonte
1
No código do OpenBSD, a espera de 1000 ms (através de chamada napms(1000)) é acompanhada pelo comentário/* Settle the terminal. */
Kusalananda
2
O OpenBSD usa ncurses.
Thomas Dickey
1
Enquanto estamos aqui, você poderia explicar como remover o atraso, se possível?
user541686
7
@Mehrdad Você pode tentar tput reset. Parece não usar o atraso.
Ross cume
3
O @Mehrdad stty saneparece corrigir a primeira condição, sem demora.
sourcejedi