Estoy tratando de hacer un editor de texto en la terminal con nodo y mecanografiado, pero los códigos de escape ansi no mueven el cursor horizontalmente. El cursor se mueve verticalmente correctamente, pero no se moverá horizontalmente.
Código: (index.ts)
var width = process.stdout.columns; var height = process.stdout.rows; function dupe(input: string, length: number) { var newI = '' for (var i = 0; i < length; i++) { newI += input } return newI } function pad(pad: string, input: string, width: number): string { var space = '' for (var i = 0; i < width - input.length; i++) { space += pad } return input + space; } var stdin = process.stdin; // without this, we would only get streams once enter is pressed stdin.setRawMode( true ); // resume stdin in the parent process (node app won't quit all by itself // unless an error or process.exit() happens) stdin.resume(); // i don't want binary, do you? stdin.setEncoding( 'utf8' ); // on any data into stdin stdin.on( 'data', function( key ){ // ctrl-c ( end of text ) if ( key.toString() === '\u0003' ) { process.exit(); } // write the key to stdout all normal like update(key.toString()) }); function setpos(x: number, y: number) { return `\x1b[H\x1b[${y}B\x1b[${x}C` } var mousex = 0; var mousey = 0; async function update(key: string) { key = key.toLowerCase(); width = process.stdout.columns; height = process.stdout.rows; console.clear() console.log(dupe('-', width)) for ( var i = 1; i <= height-2; i++ ) { process.stdout.write(`${pad(' ', i.toString(), 3)}|This is a test string\n`) } if (key === 'w') { mousey --;} if (key === 's') { mousey ++;} if (key === 'a') { mousex --;} if (key === 'd') { mousex ++;} if (mousey < 0) { mousey = 0} if (mousey > height) { mousey = height} if (mousex < 0) { mousex = 0 } if (mousex > width) { mousex = width} console.log(setpos(mousex, mousey)) console.log(`\x1b[1A${mousex} ${mousey} ${width} ${height}`) } update('')desbordamiento de pila, ¿por qué necesito escribir más? Literalmente no tengo nada más que escribir.
No importa, solo fui tonto y no probé un paquete diferente. Instalar terminal-kit solucionó mi problema.