在Node.js控制台中阻止输入/输出混合?

时间:2015-07-11 16:23:05

标签: javascript node.js

我设法得到一个Node.js minecraft bot API(称为mineflayer)。当我最后一次制作我的Minecraft bot时(用C ++,我自己),我遇到了when writing in the console, the server messages would mix with whatever I'm writing的问题。我得到的答案似乎有太复杂/不清楚的解决方案所以我放弃了。

现在我希望Node.js解决了这个问题,但显然没有。 Node.js中有一个简单的解决方案吗?我想要的是这个:

image description

但是现在,我正在编写的命令与输出混合(红色是写入输入,绿色是控制台输出,使用GIMP着色):

image description

我正在使用readline模块:

var readline = require("readline");
var rl = readline.createInterface({
    input: process.stdin,
    output: null,
});

rl.on('line', function(line) {
  var inp = line.trim();
  //Bot internal commands start with ~
  if(line[0]=='~') {
    command(line.substr(1));
  }
  else {
    //use server chat
    bot.chat(line);
  }
});

1 个答案:

答案 0 :(得分:0)

我从一个简单的功能示例开始,只是为了向您展示一种方法:

var
    readline = require("readline"),
    ansi = require('ansi');

var rl = readline.createInterface({
    input: process.stdin,
    output: null
});

ansi.clear();
ansi.row(1);

rl.on('line', function(line) {

    ansi.row(2);
    ansi.clearLine();
    ansi.print(line);

    ansi.row(1);
    ansi.clearLine();
});

ansi是我几个月前用ANSI escape codes操纵终端线的简单测试。要使用它,只需在与上面代码相​​同的文件夹中运行以下命令:

npm install https://github.com/luciopaiva/ansi.git

您可以直接转到my library's repository来查看我的代码。

代码非常简单,我建议您复制它并适应您的需求。

ansi.clear()只清除整个终端,然后ansi.row(1)将光标移动到第一行,您可以在那里输入命令。在我的简单示例中,代码将仅打印到第2行,用户在返回返回键之前键入的内容。然后运行上面的代码,看它是否正常工作,并使其适应一种机制,使消息沿着终端的剩余行滚动。

相关问题