`Reset 'komutu neden gecikme içeriyor?


17

resetKomut ekranı temizlemek ve dönen arasında bir gecikme içerir. Bu en son terminal tipinde bile xterm-256color. Neden?

man resetbir gecikmeden bahsetmez, sadece özel dizelerin basılmasını belirtir. (Ekranı temizlemekten de bahsetmez. Bunun terminal başlatma dizesi altında olduğunu varsayalım).

Aşağıdaki çıktı dikkat 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

Yanıtlar:


24

Gerçek (donanım) terminaller buna ihtiyaç duyar. Örneğin, bazılarında bunları sıfırlamanın tek yolu donanım sıfırlaması yapmaktır.

Bir terminal emülatörü ile zararsızdır ve farkı anlatmanın geleneksel bir yolu olmadığından (ve bazı kaçış dizilerinin donanım sıfırlaması yapıp yapamayacağını belirlemek çok zor olduğundan), resetterminalinizin gerçek olduğunu varsayar.

Zaman gecikmesi tset1979'da 3BSD'ye kadar uzanır, şöyle:

    /* 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'da biraz gelişti, ancak aynı kılavuzu kullanarak:

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

Daha fazla okuma:


1
OpenBSD kodunda, 1000 ms bekleme (çağrı yoluyla napms(1000)) yorum eşlik ediyor/* Settle the terminal. */
Kusalananda

2
OpenBSD ncurses kullanır.
Thomas Dickey

1
Biz buradayken, mümkünse gecikmeyi nasıl kaldıracağınızı açıklayabilir misiniz?
user541686

7
@Mehrdad Deneyebilirsiniz tput reset. Gecikmeyi kullanmıyor gibi görünüyor.
Ross Ridge

3
@Mehrdad stty saneilk koşulu gecikmeksizin düzeltiyor gibi görünüyor.
sourcejedi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.