为什么“ 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

Answers:


24

真正的(硬件)终端需要这样做。例如,对于某些设备,重置它们的唯一方法是进行硬件重置。

对于终端仿真器而言,这是无害的,并且由于没有传统的方法来区分两者(并且很难确定某些转义序列是否可能进行硬件重置),因此请reset假定您的终端是真实的。

延时可以追溯到tset1979年的3BSD,如下所示:

    /* 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 ms等待(通过调用napms(1000))伴随着注释/* Settle the terminal. */
Kusalananda

2
OpenBSD使用ncurses。
托马斯·迪基

1
当我们在这里时,您能否解释一下如何消除延迟?
user541686

7
@Mehrdad您可以尝试tput reset。似乎没有使用延迟。
罗斯里奇(Ross Ridge)

3
@Mehrdad stty sane似乎已解决第一个条件,没有任何延迟。
sourcejedi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.