从终端读取ANSI转义序列

5

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

例如,这个转义序列:

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

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

我花了几个小时尝试使用process.stdoutprocess.stdin,各种fs.*函数,甚至尝试从/dev/tty读取。所有都徒劳无功,完全迷失了。


1
不鼓励默默投票关闭那些明显没有违反规则的问题。 - exebook
1个回答

8
这里有一种方法:
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'

我正在将标准输入模式更改为原始模式,以便结果不会在终端上打印并且可以在用户无需按回车键的情况下读取。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接