Pourquoi la commande `reset` inclut-elle un délai?

17

La resetcommande comprend un délai, entre l'effacement de l'écran et le retour. C'est même sur le dernier type de terminal xterm-256color. Pourquoi?

man resetne mentionne pas de retard, seulement l'impression de cordes spéciales. (Il ne mentionne pas non plus l'effacement de l'écran. Je suppose que cela est inclus sous la chaîne d'initialisation du terminal).

Je remarque la sortie suivante dans 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
la source

Réponses:

24

Les vrais terminaux (matériels) en ont besoin. Par exemple, avec certains, la seule façon de les réinitialiser est de faire une réinitialisation matérielle.

Il est inoffensif avec un émulateur de terminal, et puisqu'il n'y a pas de moyen conventionnel de faire la différence (et trop difficile à déterminer si une séquence d'échappement pourrait faire une réinitialisation matérielle), resetsuppose que votre terminal est réel.

Le délai remonte à tset3BSD en 1979, comme ceci:

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

Il a quelque peu évolué dans ncurses, mais en utilisant la même directive:

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

Lectures complémentaires:

Thomas Dickey
la source
1
Dans le code OpenBSD, l'attente de 1000 ms (via l'appel napms(1000)) est accompagnée du commentaire/* Settle the terminal. */
Kusalananda
2
OpenBSD utilise ncurses.
Thomas Dickey
1
Pendant que nous sommes ici, pourriez-vous expliquer comment supprimer le retard si possible?
user541686
7
@Mehrdad Vous pouvez essayer tput reset. Il ne semble pas utiliser le délai.
Ross Ridge
3
@Mehrdad stty sanesemble résoudre la première condition sans délai.
sourcejedi