El manejo de la entrada-salida del terminal es arte oscuro y misterioso. Cualquiera que intente hacer que la salida coloreada de bash
funcione en Windows PowerShell
a través de ssh
lo sabe. (Y varios hábitos de acceso directo como Ctrl + Retroceso solo empeoran las cosas.)
Uno de los posibles motivos de su problema es el manejo de caracteres especiales. Cada terminal puede escribir caracteres en número de modos diferentes, y analiza su propia salida en busca de ciertas secuencias de caracteres para alternar estados.
F.e. here se pueden encontrar secuencias de código de escape ANSI, una de las posibles normas admitidas entre diferentes tipos de terminales.
Ver allí Esc[5;45m
? Eso hará que parpadee toda la siguiente salida en el fondo magenta. Y hay muchas más cosas así por ahí.
Entonces, la respuesta a su pregunta tomada literalmente es - su comando choice
confunde algo con los modos de salida usando secuencias de escape especiales, y ruby obtiene descansos en ese peculiar modo especial de operación de la terminal.
Pero más útil será el enlace a HighLine gem documentation. ¿Por qué uno querría implementar un comportamiento intrusivo y específico de la plataforma cuando es posible implementarlo con about 12 LOC? Todo el respeto por el Gist va al botimer, solo he tropezado con su código usando la búsqueda.
Debe tener más en claro la naturaleza del comportamiento extraño. Lo probé y noté que no aceptaba datos a menos que presionara la tecla enter dos veces, después de ejecutar el comando 'system (" choice/c YN ")'. Una carta extra a veces se colaría allí también. ¿Es eso lo que sucede en tu extremo? – KChaloux
@KChaloux Eso es exactamente lo que sucede, sí. Editaré mi publicación para incluir esos detalles. – itdoesntwork
Eso es raro, Windows casi nunca arruina nada. –