2016-04-29 103 views
3

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

回答

3

這裏有一種方法:

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' 

我在做標準輸入進入原始模式,這樣的結果是不是在終端打印,可以在不被讀取用戶不得不按回車。