Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[Bug] block() function leaves stdin in raw mode on Windows, breaking Ctrl+C signal handling

Abierto
#408 1 comentario 0 reacciones 0 asignados Ver en GitHub

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

bug

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:

  1. Run the code above on Windows
  2. Wait for spinner to stop
  3. Press Ctrl+C
  4. Bug: Process hangs - SIGINT handler never fires because stdin is in raw mode

Expected behavior

Pressing Ctrl+C should:

  1. Generate a SIGINT signal
  2. Trigger the signal handler
  3. Print "✓ SIGINT received!"
  4. 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

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de bombshell-dev/clack

Todos los issues de bombshell-dev/clack

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.