El bug de navegación con flechas persiste. Documentación completa del problema y pistas de debugging para próxima sesión. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.3 KiB
Bug: AdvancedTable Keyboard Navigation No Funciona
Fecha: 2025-12-17 Estado: 🔴 NO RESUELTO Severidad: ALTA
Síntoma
Las flechas de teclado no mueven la selección en AdvancedTable cuando se usa en zsimifactu.
Lo que sabemos
Funciona
- El widget se renderiza correctamente
- El click en filas funciona (cambia selección)
- El sorting visual funciona (click en headers)
has_focus=truecuando se hace click en la tablakeyboard_nav=trueen la configuración
No funciona
- Flechas ↑↓←→ no mueven la selección
- No hay mensajes de
selection_changeddespués de presionar flechas
Investigación realizada
1. Cambio de keyPressed a navKeyPressed
Hipótesis: keyPressed() no incluye key repeats.
Cambio: Línea 566 de advanced_table.zig usa navKeyPressed().
Resultado: No resuelve el problema.
2. Debug print consumía el evento
Descubrimiento: Al añadir debug print que llamaba navKeyPressed() ANTES del bloque if (has_focus), el evento se consumía y no llegaba a handleKeyboard.
Evidencia: Con debug print, aparecían mensajes navKeyPressed=.down, has_focus=true, keyboard_nav=true pero sin movimiento.
Conclusión: navKeyPressed() solo puede leerse UNA VEZ por frame.
3. Sin debug print, nada funciona
Observación: Al quitar el debug print, ni siquiera hay mensajes en consola.
Implicación: handleKeyboard no se está ejecutando, o navKeyPressed() devuelve null.
Código actual relevante
advanced_table.zig líneas 165-180
// Handle keyboard
if (has_focus) {
if (table_state.editing) {
handleEditingKeyboard(ctx, table_state, table_schema, &result);
drawEditingOverlay(ctx, bounds, table_state, table_schema, header_h, state_col_w, colors);
} else if (config.keyboard_nav) {
handleKeyboard(ctx, table_state, table_schema, visible_rows, &result);
}
}
handleKeyboard líneas 570-590
if (ctx.input.navKeyPressed()) |nav_key| {
switch (nav_key) {
.up => {
if (table_state.selected_row > 0) {
table_state.selectCell(...);
result.selection_changed = true;
}
},
.down => {
if (table_state.selected_row < row_count - 1) {
table_state.selectCell(...);
result.selection_changed = true;
}
},
// ... etc
}
}
Hipótesis pendientes de verificar
-
¿
has_focuses realmente true?- El debug mostró true, pero quizás el focus se pierde entre frames
-
¿
navKeyPressed()funciona en AdvancedTable?- Funciona en otros widgets (Table original, TextInput)
- Quizás hay algo específico del contexto de AdvancedTable
-
¿El evento de teclado llega al widget?
- zsimifactu tiene su propio event handling en main.zig
- Quizás los eventos se consumen antes de llegar al widget
-
¿Hay diferencia entre Table y AdvancedTable?
- Table original funciona con teclado
- Comparar línea por línea el handling de teclado
Próximos pasos sugeridos
-
Comparar con Table original - El widget Table SÍ funciona con teclado. Comparar cómo maneja eventos.
-
Añadir debug DENTRO de handleKeyboard - No antes del
if (has_focus), sino dentro de la función misma. -
Verificar InputState.navKeyPressed() - Ver si devuelve algo cuando AdvancedTable tiene focus.
-
Revisar el focus system - Quizás AdvancedTable no está registrándose correctamente en el FocusSystem.
Archivos relevantes
/mnt/cello2/arno/re/recode/zig/zcatgui/src/widgets/advanced_table/advanced_table.zig/mnt/cello2/arno/re/recode/zig/zcatgui/src/widgets/table/table.zig(referencia funcional)/mnt/cello2/arno/re/recode/zig/zcatgui/src/core/input.zig(navKeyPressed)/mnt/cello2/arno/re/recode/zig/zsimifactu/src/panels/who_list_advanced.zig/mnt/cello2/arno/re/recode/zig/zsimifactu/src/main.zig(event loop)
Commit actual
Los cambios de "merge Table → AdvancedTable" están commiteados (af1bb76) pero el bug de teclado NO está resuelto.
Documentado por: Claude Code (Opus 4.5) Fecha: 2025-12-17 ~19:00