33

The reset command includes a delay, between clearing the screen and returning. This is even on the latest terminal type xterm-256color. Why?

man reset does not mention a delay, only the printing of special strings. (It doesn't mention clearing the screen either. I assume this is included under the terminal initialization string).

I notice the follow output 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
  • 50,249

1 Answers1

39

Real (hardware) terminals need that. For instance, with some, the only way to reset them is to do a hardware-reset.

It's harmless with a terminal emulator, and since there's no conventional way to tell the difference (and too hard to determine if some escape sequence might do a hardware-reset), reset assumes your terminal is real.

The time-delay dates back to tset in 3BSD in 1979, like this:

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

It's evolved somewhat in ncurses, but using the same guideline:

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

Further reading:

muru
  • 72,889
Thomas Dickey
  • 76,765
  • 3
    While we're here could you explain how to remove the delay if possible? – user541686 Jan 08 '17 at 03:02
  • 12
    @Mehrdad You could try tput reset. It doesn't seem to use the delay. – Ross Ridge Jan 08 '17 at 06:40
  • 1
    @Mehrdad sadly this doesn't do all the reset. If you ctrl+C out of a password prompt for pkcon (or other polkit prompt), none of what you type shows on the screen. I expect it fixes the other condition where you cat a binary file and your prompt turns into alien writing though. – sourcejedi Jan 08 '17 at 09:06
  • 4
    @Mehrdad stty sane appears to fix the first condition, without any delay. – sourcejedi Jan 08 '17 at 09:08
  • 3
    The release (6.0) of ncurses doesn't modify terminal modes (as "reset" or "stty sane" does). currrent ncurses "tput reset" does all but the delay. For OpenBSD... wait 10 years. – Thomas Dickey Jan 08 '17 at 11:26
  • 3
    @Mehrdad this works fine for me: alias reset='tput reset' in ~/.bashrc – hanshenrik Dec 04 '17 at 17:53