我正在使用Node ansi.js来编写“Hello World!”到终端并稍后擦除它。
var net = require('net');
var ansi = require('ansi');
var cursor = ansi(process.stdout);
setInterval(function() {
cursor.write("Hello World!");
setTimeout(function() {
cursor.horizontalAbsolute(0).eraseLine();
}, 1000);
}, 2000);
此代码按预期工作。 “你好,世界!”被写入控制台并每两秒擦除一次。
我想通过虚拟终端连接复制此行为。我尝试使用以下代码:
net.createServer(function(socket) {
var cursor = ansi(socket);
setInterval(function() {
cursor.write("Hello World!");
setTimeout(function() {
cursor.horizontalAbsolute(0).eraseLine();
}, 1000);
}, 2000);
}).listen(1337);
当我运行上面的脚本并在另一个终端窗口中运行telnet 127.0.0.1 1337
时,第二个窗口收到“Hello World!”每两秒但它永远不会被删除。如何擦除已通过节点传送到套接字的数据?
更新: ansi.js没有发送转义码,因为socket.isTTY为false-y。设置选项{enabled:true}会覆盖此行为并修复此问题。
我打开这个问题,因为知道ansi.js默认情况下不会将转义字符发送到套接字是有用的。