[Bug] block() function leaves stdin in raw mode on Windows, breaking Ctrl+C signal handling
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 42/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- node.js, typescript
- Área
- cli
Línea de trabajo
Empieza con el código de limpieza de block() de @clack/prompts y el flujo de spinner.stop(), especialmente con la condición de raw-mode específica de Windows. Ejecuta la reproducción mínima enlazada en Windows y verifica si Ctrl+C genera SIGINT después de que se detenga el spinner. Se considera terminado cuando stdin se restaura sin regresar el comportamiento de Windows asociado con issue #176.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Environment
- OS: Windows 11 (MSYS_NT-10.0-26100)
- Node Version: v22.20.0
- Package: @clack/prompts
- Package Version: v1.0.0-alpha.6
Describe the bug
After calling spinner.stop(), stdin remains in raw mode on Windows, preventing Ctrl+C from generating SIGINT signals. This breaks signal handling for any code that runs after the spinner stops.
The root cause is in the block() function's cleanup code, which intentionally skips restoring raw mode on Windows to prevent issue #176:
// From clack source - block() cleanup
if (input instanceof ReadStream && input.isTTY && !isWindows) {
input.setRawMode(false);
}
This leaves stdin stuck in raw mode on Windows. In raw mode, Ctrl+C sends raw keypress data instead of generating SIGINT signals, so signal handlers never fire.
To Reproduce
Link to minimal reproduction:
https://stackblitz.com/edit/node-3wkqdznz?file=index.js,package.json
Steps to reproduce:
- Run the code above on Windows
- Wait for spinner to stop
- Press Ctrl+C
- Bug: Process hangs - SIGINT handler never fires because stdin is in raw mode
Expected behavior
Pressing Ctrl+C should:
- Generate a SIGINT signal
- Trigger the signal handler
- Print "✓ SIGINT received!"
- Exit the process
This works correctly on macOS/Linux but fails on Windows due to the !isWindows condition.
Additional Information
Workaround: Manually restore stdin after stopping the spinner:
spinner.stop("Done");
if (process.stdin.isTTY) {
process.stdin.setRawMode(false);
}
If there's a Windows-specific reason to keep raw mode during spinner execution, I'm unsure of the reason. This is causing my issues on Windows.
- Lenguaje dominante
- TypeScript
- Estrellas
- 8.1k
- Forks
- 218
- Merge medio
- 1 d 23 h
- PR fusionados (30 d)
- 6
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de bombshell-dev/clack
-
Dificultad 3/5 1-2 días Aptitud para principiantes 70/100
bombshell-dev/clack#613 · 4 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
bombshell-dev/clack#597 ·
-
rfc: accessible modeAbiertoenhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
bombshell-dev/clack#585 · 1 comentario · 1 reacción ·
-
[Bug] Spinner does not run `onCancel` function on `Ctrl + C`Posiblemente ocupada @cyphercodes la tomó hace 101 días. Abiertobug
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
bombshell-dev/clack#573 · 1 comentario · 2 reacciones ·
-
enhancement
Dificultad 3/5 1-2 días Aptitud para principiantes 62/100
bombshell-dev/clack#565 · 1 comentario · 1 reacción ·
Todos los issues de bombshell-dev/clack
Issues similares
-
awaiting-response bug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
wildcard/caro#1562 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
supadata-ai/mcp#27 ·
-
content
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
cosimochellini/one-piece-zero-spoiler#516 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
capricorn86/happy-dom#2485 ·
Los mantenedores suelen responder en 2 días
-
lane: fast
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
unicef/adt-studio#946 ·
Los mantenedores suelen responder en 2 días