TuiKeymap.kt
package com.depanalyzer.tui
import com.github.ajalt.mordant.input.KeyboardEvent
import com.github.ajalt.mordant.input.isCtrlC
enum class TuiAction {
MOVE_UP,
MOVE_DOWN,
UPDATE_SELECTED,
UPDATE_ALL,
APPLY_PENDING,
DISCARD_PENDING,
FILTER,
NEXT_TAB,
PREVIOUS_TAB,
QUIT,
NONE
}
data class TuiShortcut(
val key: String,
val description: String
)
object TuiKeymap {
private val shortcuts = listOf(
TuiShortcut("↑", "Navegar arriba"),
TuiShortcut("↓", "Navegar abajo"),
TuiShortcut("u", "Actualizar seleccionado"),
TuiShortcut("U", "Actualizar todo"),
TuiShortcut("a", "Aplicar pendientes"),
TuiShortcut("x", "Descartar pendientes"),
TuiShortcut("f", "Filtrar"),
TuiShortcut("q", "Salir")
)
fun shortcuts(): List<TuiShortcut> = shortcuts
fun registeredShortcutKeys(): Set<String> = shortcuts.map { it.key }.toSet()
fun resolve(event: KeyboardEvent): TuiAction {
if (event.isCtrlC) return TuiAction.QUIT
val key = event.key.lowercase()
return when {
key == "arrowup" -> TuiAction.MOVE_UP
key == "arrowdown" -> TuiAction.MOVE_DOWN
key == "tab" || key == "arrowright" -> TuiAction.NEXT_TAB
key == "arrowleft" -> TuiAction.PREVIOUS_TAB
key == "q" -> TuiAction.QUIT
key == "f" -> TuiAction.FILTER
key == "u" && (event.shift || event.key == "U") -> TuiAction.UPDATE_ALL
key == "u" -> TuiAction.UPDATE_SELECTED
key == "a" -> TuiAction.APPLY_PENDING
key == "x" -> TuiAction.DISCARD_PENDING
else -> TuiAction.NONE
}
}
}