javascript js:防止光标换行

sdnqo3pr  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(127)

使用process.stdout.write,光标将留在输出字符串的末尾。
但是,当您在终端的右边框上写入任何内容时,光标将被放置在下一行的开头。
如果您希望通过填充整个终端来为应用程序提供背景,这将导致问题,因为它将滚动窗口。
有一个解决方法,在写入右下角的字符槽后,向上滚动一行,但这似乎并不适用于所有平台,即cmd。

gcxthw6b

gcxthw6b1#

从描述来看,您似乎在谈论ansi.js,它(如accepted answer中的ANSI escape sequences aren't printed to stdout on Windows所述)依赖于libuv等库。
该库实现了中等数量的转义序列。但是参考source-code for ansi.js,它使用escape[S来实现向上滚动特性。libuv不处理该转义序列。
libuv中的注解解释了原因:

* Normally cursor movement in windows is relative to the console screen buffer,
 * e.g. the application is allowed to overwrite the 'history'. This is very
 * inconvenient, it makes absolute cursor movement pretty useless. There is
 * also the concept of 'client rect' which is defined by the actual size of
 * the console window and the scroll position of the screen buffer, but it's
 * very volatile because it changes when the user scrolls.

在curses应用程序中,这类事情是通过将右下角的字符写入倒数第二列,然后使用insert-character将其放置到位来完成的。但是ansi.jslibuv都没有实现这一点。

相关问题