从终端读取ANSI转义

问题描述:

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

例如,这转义序列:

CSI 6N | DSR - 设备状况报告

报告光标位置(CPR)的应用程序(如虽然在键盘上键入)ESC[n;mR,其中n是行,m是列)

我。花费数小时试图使用process.stdout,process.stdin,各种fs.*功能,甚至试图从/dev/tty读取。一切都是徒劳的,完全失去了。

+1

对于不明显看起来违反规则的问题,默默投票结束是令人沮丧的。 – exebook

这里有一种方法:

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' 

我在做标准输入进入原始模式,这样的结果是不是在终端打印,可以在不被读取用户不得不按回车。