Por que o comando 'reset' inclui um atraso?

13

O comando reset inclui um atraso, entre a limpeza da tela e o retorno. Isto é mesmo no último tipo de terminal xterm-256color . Por quê?

man reset não menciona um atraso, apenas a impressão de strings especiais. (Também não menciono limpar a tela. Suponho que isso esteja incluído na sequência de inicialização do terminal).

Eu observo 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
    
por sourcejedi 07.01.2017 / 21:32

1 resposta

21

Os terminais reais (hardware) precisam disso. Por exemplo, com alguns, a única maneira de redefini-los é fazer uma reinicialização de 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 reinicialização de hardware), reset assume que seu terminal é real.

O tempo de atraso data de tset no 3BSD 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 nas 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:

por 07.01.2017 / 21:37

Tags