我有一个C++函数需要被某个线程调用;该函数使用ANSI将一行文本插入控制台,而不中断当前用户输入。
这很好用,直到控制台底部被占满,用户输入被覆盖,因为控制台没有自动滚动,就像这样:
这很好用,直到控制台底部被占满,用户输入被覆盖,因为控制台没有自动滚动,就像这样:
代码:
void log_insert(std::string& line)
{
static int num_of_lines = 1;
// save horizontal cursor position
std::cout << "\033[s";
// insert <X> number of lines (\033[<X>L)
std::cout << "\033[" << num_of_lines + 1 << "L";
// move cursor to beginning
std::cout << "\033[G";
// print text
std::cout << line << "\n";
// restore horizontal cursor position
std::cout << "\033[u";
// move down <X> number of lines
std::cout << "\033[" << num_of_lines + 1 << "B";
}
我知道有一些用于CLI的库,但我觉得这应该是一个很简单的问题。我尝试使用ANSI滚动,但没有成功。