「リセット」コマンドに遅延が含まれるのはなぜですか?


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ターミナルが本物であると想定します。

遅延時間tsetは1979年の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. */
            }
        }

参考文献:

  • 履歴tsetマニュアルページ)
  • 履歴tputマニュアルページ)

1
OpenBSDのコードでは、1000のMSは(呼び出して待つnapms(1000))コメントを伴っている/* Settle the terminal. */
Kusalananda

2
OpenBSDはncursesを使用します。
トーマスディッキー

1
ここにいる間、可能であれば遅延を削除する方法を説明できますか?
user541686

7
@Mehrdadあなたが試すことができtput resetます。遅延を使用していないようです。
ロス・リッジ

3
@Mehrdad stty saneは、最初の条件を遅滞なく修正するようです。
sourcejedi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.