Почему команда `reset` включает задержку?

17

Команда resetвключает задержку между очисткой экрана и возвратом. Это даже на самом последнем типе терминала xterm-256color. Почему?

man resetне упоминается задержка, только печать специальных строк. (Это также не касается очистки экрана. Я предполагаю, что это включено в строку инициализации терминала).

Я замечаю следующий вывод в 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
источник

Ответы:

24

Реальные (аппаратные) терминалы нуждаются в этом. Например, для некоторых единственным способом их сброса является аппаратный сброс.

С эмулятором терминала это безвредно, и, поскольку нет обычного способа определить разницу (и слишком сложно определить, может ли какая-либо escape-последовательность выполнить аппаратный сброс), resetпредполагается , что ваш терминал реален.

Задержка восходит к tset3BSD в 1979 году, вот так:

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

Это несколько изменилось в ncurses, но с использованием того же руководства:

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

Дальнейшее чтение:

Томас Дики
источник
1
В коде OpenBSD ожидание 1000 мс (через вызов napms(1000)) сопровождается комментарием/* Settle the terminal. */
Кусалананда
2
OpenBSD использует ncurses.
Томас Дики
1
Пока мы здесь, не могли бы вы объяснить, как убрать задержку, если это возможно?
user541686
7
@ Mehrdad Вы можете попробовать tput reset. Кажется, он не использует задержку.
Росс Ридж
3
@Mehrdad, stty saneпохоже, исправляет первое условие без каких-либо задержек.
sourcejedi