Чому команда `скидання` включає затримку?


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

Відповіді:


24

У цьому потрібні справжні (апаратні) термінали. Наприклад, для деяких, єдиний спосіб їх скинути - це зробити апаратне відновлення.

Це нешкідливо для емулятора терміналу, і оскільки немає звичайного способу визначити різницю (і занадто важко визначити, чи може якась послідовність втечі зробити апаратне відновлення), 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. */
Kusalananda

2
OpenBSD використовує ncurses.
Томас Дікі

1
Хоча ми тут, чи можете ви пояснити, як зняти затримку, якщо можливо?
користувач541686

7
@Mehrdad Ви можете спробувати tput reset. Схоже, це не використовує затримку.
Росс Рідж

3
Здається, @Mehrdad stty saneвиправляє першу умову без будь-якої затримки.
sourcejedi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.