Warum enthält der Befehl "reset" eine Verzögerung?

15

Der resetBefehl enthält eine Verzögerung zwischen dem Löschen des Bildschirms und der Rückkehr. Dies gilt sogar für den neuesten Terminaltyp xterm-256color. Warum?

man resetErwähnt keine Verzögerung, nur das Drucken von Sonderzeichenfolgen. (Es wird auch nicht erwähnt, dass der Bildschirm gelöscht wird. Ich gehe davon aus, dass dies in der Terminalinitialisierungszeichenfolge enthalten ist.)

Ich bemerke die folgende Ausgabe in 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
quelle

Antworten:

22

Echte (Hardware-) Terminals brauchen das. Beispielsweise besteht bei einigen die einzige Möglichkeit, sie zurückzusetzen, in einem Hardware-Reset.

Mit einem Terminal-Emulator ist dies harmlos. Da es keinen herkömmlichen Weg gibt, den Unterschied zu erkennen (und zu schwer zu bestimmen, ob eine Escape-Sequenz einen Hardware-Reset durchführen könnte), wird resetdavon ausgegangen, dass Ihr Terminal echt ist.

Die Zeitverzögerung geht auf tset3BSD im Jahr 1979 zurück:

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

Es hat sich in ncurses etwas weiterentwickelt, verwendet aber die gleiche Richtlinie:

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

Weitere Lektüre:

Thomas Dickey
quelle
1
Im OpenBSD-Code wird die Wartezeit von 1000 ms (durch Aufruf napms(1000)) von dem Kommentar begleitet/* Settle the terminal. */
Kusalananda
2
OpenBSD benutzt ncurses.
Thomas Dickey
1
Können Sie uns erklären, wie Sie die Verzögerung nach Möglichkeit beseitigen können?
user541686
6
@Mehrdad Du könntest es versuchen tput reset. Es scheint die Verzögerung nicht zu nutzen.
Ross Ridge
3
@Mehrdad stty sanescheint die erste Bedingung ohne Verzögerung zu beheben.
Sourcejedi