発生したばかりの行を「上書き」する必要があるフィルター(端末出力用のパイプ内)を作成しています。これは、aに到達するまでstdinをstdoutに文字ごとに渡し\n
、次に特別な動作を呼び出すことによって機能します。私の問題は、行の先頭に戻る方法に関するものです。
私が最初に考えたのは、\r
またはANSIシーケンスを使用することでした\033[1G
。ただし、行が端末で折り返されるのに十分な長さである場合(したがって、行がスクロールする原因となった場合)、これらはカーソルを現在の物理行に戻すだけです。
私の2番目のアイデアは、行の長さ(前から渡された文字数)を追跡し、それを何度も\n
エコーすることでした。\b
ただし、行に制御文字またはエスケープシーケンス(および場合によってはUnicode?)が含まれている場合は、問題が発生します。
すべての特別なシーケンスを検索し、これを使用して文字数を調整する以外に、これを実現する簡単な方法はありますか?