我看到了这个演示,它打印出一段文本(就像您在键入时会得到的一样some-command --help),然后 在终端中已经打印出 该文本 后,它又 跳回到文本中的几个关键字并更改了文本颜色。。
some-command --help
在我看来,这太疯狂了。他们是怎么做到的?
开始去想它,我想stdout和stdin在技术上的“IO流”,所以也许这是一个跟踪光标的位置的持久变量?我记得在构建语言解析器时做了类似的事情。
stdout
stdin
目标是这样的:说您在控制台中键入以下内容,它会输出一个空白数组,因为在Node.js中,它们都是异步的,我们不想每次都在控制台中编写异步函数:
$ node app.js > App.User.all() => []
然后在执行异步回调时,返回并编辑,=> []以包含结果:
=> []
$ node app.js > App.User.all() => [#<User id:1>, #<User id:2>...]
即使至少还有很多其他问题需要解决(与这个问题无关,我也知道可以定义一个全局回调并执行类似的操作App.User.all(_c)),至少知道如何实现还是很棒的。
App.User.all(_c)
终端输出已打印后,如何编辑?
终于发现“演示”:
http://ascii-table.com/ansi-escape-sequences-vt-100.php
定位光标:\033[<L>;<C>H或\033[<L>;<C>f(将光标放在L行和C列)
\033[<L>;<C>H
\033[<L>;<C>f
将光标向上移动N行: \033[<N>A
\033[<N>A
\033[<N>B
\033[<N>C
\033[<N>D
\033[2J
\033[K
\033[s
\033[u