读取终端的ANSI转义

时间:2016-04-29 03:48:33

标签: node.js terminal

终端ANSI转义码上的

Wikipedia article显示了一些可以发送到终端 AND 的代码,然后将一些数据返回给应用程序。请提供一个示例,说明如何发送代码,然后在Node.js应用程序中读取结果。

例如这个转义序列:

  

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

     

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

我花了好几个小时尝试使用process.stdoutprocess.stdin,各种fs.*函数,甚至尝试阅读/dev/tty。一切都是徒劳的,完全迷失了。

1 个答案:

答案 0 :(得分:4)

这是一种方式:

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进入原始模式,以便结果不会在终端中打印出来,并且无需用户按返回即可读取。