เหตุใดคำสั่ง `รีเซ็ต 'จึงรวมการหน่วงเวลาไว้


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

คำตอบ:


24

เทอร์มินัลจริง (ฮาร์ดแวร์) จำเป็นต้องใช้ ตัวอย่างเช่นในบางวิธีการรีเซ็ตพวกเขาคือทำการรีเซ็ตฮาร์ดแวร์

มันไม่เป็นอันตรายกับตัวจำลองเทอร์มินัลและเนื่องจากไม่มีวิธีดั้งเดิมในการบอกความแตกต่าง (และยากเกินไปที่จะตรวจสอบว่าลำดับการหลบหนีบางอย่างอาจทำการรีเซ็ตฮาร์ดแวร์) resetสมมติว่าเทอร์มินัลของคุณเป็นของจริง

การหน่วงเวลาย้อนกลับไปที่tset3BSD ในปี 1979 เช่นนี้

    /* 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
Thomas Dickey

1
ในขณะที่เราอยู่ที่นี่คุณสามารถอธิบายวิธีการลบความล่าช้าถ้าเป็นไปได้?
user541686

7
@Mehrdad tput resetคุณอาจจะลอง ดูเหมือนจะไม่ใช้ความล่าช้า
Ross Ridge

3
@Mehrdad stty saneดูเหมือนจะแก้ไขเงื่อนไขแรกโดยไม่ล่าช้า
sourcejedi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.