¿Cómo leer la entrada del usuario desde la terminal antes de presionar enter usando nodo y javascript?
Creé una aplicación javascript simple que usa process.stdin o readline para obtener la entrada del usuario, pero no quiero que el usuario tenga que enviar su entrada con enter/return. Me gustaría leer la entrada del usuario en keydown/keypress. es posible? ¿Cómo podría lograr esto? ¡Gracias!
Requisitos:
Preferir:
Una manera fácil de hacerlo podría ser con el paquete iohook .
La forma nativa de Node.JS de hacerlo sería así.
require("readline").emitKeypressEvents(process.stdin); process.stdin.setRawMode(true); process.stdin.on("keypress", (char, evt) => { console.log("=====Key pressed====="); console.log("Char:", JSON.stringify(char), "Evt:", JSON.stringify(evt)); if (char === "h") console.log("Hello World!"); if (char === "q") process.exit(); }); La primera línea, require("readline").emitKeypressEvents(process.stdin) hace que process.stdin emita eventos de pulsación de tecla, ya que normalmente no emite el evento.
El segundo, process.stdin.setRawMode(true) convierte a process.stdin en un dispositivo sin procesar. En un flujo configurado de dispositivo sin procesar, los eventos de pulsación de tecla se emiten por carácter, en lugar de emitirse por pulsación de tecla Intro.
Luego, el detector de eventos de keypress de teclas se agrega a process.stdin para manejar las pulsaciones de teclas.
Cuando process.stdin se convierte en un dispositivo sin formato, Ctrl+C no emite una señal SIGINT , en otras palabras, Ctrl+C no detendrá el programa. Esto significa que deberá vincular manualmente una clave para salir.