2016-04-29 11 views
3

am Terminal ANSI-Escape-Codes zeigt einige Codes, die an ein Terminal UND gesendet werden könnten, dann werden einige Daten an die Anwendung zurückgegeben. Geben Sie ein Beispiel zum Senden des Codes an und lesen Sie das Ergebnis in der Node.js-Anwendung.ANSI-Escape vom Terminal lesen

Zum Beispiel dieser Escape-Sequenz:

CSI 6n | DSR - Device Status Bericht

Meldet die Cursorposition (CPR) zur Anwendung als (als ob über die Tastatur eingegeben) ESC[n;mR, wobei n die Reihe ist und m ist die Spalte)

I. verbrachte Stunden versucht zu verwenden process.stdout, , verschiedene fs.* Funktionen, sogar versucht, von /dev/tty zu lesen. Alles vergebens, wurde total verloren.

+1

Stillschweigend für das Schließen der Frage abstimmen, die offensichtlich nicht wie ein Verstoß gegen die Regeln aussieht, wird abgeraten. – exebook

Antwort

3

Hier ist eine Art und Weise:

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)); 
}); 

Ausgang:

'\u001b[30;1R' 

Ich bin stdin in Raw-Modus gehen zu machen, so dass das Ergebnis nicht in dem Terminal gedruckt und kann ohne die gelesen werden Benutzer muss zurück drücken.

Verwandte Themen