从终端读取ANSI转义



维基百科关于终端ANSI转义码的文章显示了一些可以发送到终端的代码AND然后一些数据返回到应用程序。请提供一个如何发送代码的示例,然后在Node.js应用程序中读取结果。

例如,这个转义序列:

CSI 6n|DSR–设备状态报告

将光标位置(CPR)报告给应用程序(就像在键盘上键入的一样)ESC[n;mR,其中n是行,m是列。)

我花了几个小时尝试使用process.stdoutprocess.stdin和各种fs.*函数,甚至尝试从/dev/tty中读取。一切都白费了,完全迷失了方向

这里有一种方法:

var util = require("util");
function dsr(callback) {
  process.stdin.setRawMode(true);
  process.stdin.once("data", function(data) {
    process.stdin.setRawMode(false);
    process.stdin.pause();
    callback(data.toString());
  });
  process.stdout.write("x1b[6n");
}
dsr(function(data) {
  console.log(util.inspect(data));
});

输出:

'u001b[30;1R'

我正在使stdin进入原始模式,这样结果就不会打印在终端中,并且可以在用户不必按回车键的情况下读取。

最新更新