Files
task-master/internal/ui/keys.go
T
2026-10-19 14:19:10 +02:00

139 lines
3.5 KiB
Go

package ui
import "github.com/charmbracelet/bubbles/key"
// KeyMap defines vim-style bindings for the TUI.
type KeyMap struct {
Up key.Binding
Down key.Binding
New key.Binding
Search key.Binding
Project key.Binding
MoveTicket key.Binding // P — move selected ticket to another project
Board key.Binding
Status key.Binding
Edit key.Binding
EditInEditor key.Binding // ctrl+e — open $EDITOR while creating
Delete key.Binding // x — confirm first
DeleteForce key.Binding // X — immediate
ConfirmYes key.Binding
Toggle key.Binding // space — toggle multi-select
Timer key.Binding // t — start/stop timer
TimeManual key.Binding // T — manual duration
TimeEntries key.Binding // m — manage time entries
Report key.Binding // r — time report
Undo key.Binding
Redo key.Binding
Quit key.Binding
Enter key.Binding
Escape key.Binding
}
// DefaultKeyMap returns the default key bindings.
func DefaultKeyMap() KeyMap {
return KeyMap{
Up: key.NewBinding(
key.WithKeys("k", "up"),
key.WithHelp("j/k", "navigate"),
),
Down: key.NewBinding(
key.WithKeys("j", "down"),
key.WithHelp("j/k", "navigate"),
),
New: key.NewBinding(
key.WithKeys("n"),
key.WithHelp("n", "new"),
),
Search: key.NewBinding(
key.WithKeys("/"),
key.WithHelp("/", "search"),
),
Project: key.NewBinding(
key.WithKeys("p"),
key.WithHelp("p", "project"),
),
MoveTicket: key.NewBinding(
key.WithKeys("P"),
key.WithHelp("P", "move ticket"),
),
Board: key.NewBinding(
key.WithKeys("l", "tab"),
key.WithHelp("l", "list"),
),
Status: key.NewBinding(
key.WithKeys("s", "enter"),
key.WithHelp("s", "status"),
),
Edit: key.NewBinding(
key.WithKeys("e"),
key.WithHelp("e", "edit"),
),
EditInEditor: key.NewBinding(
key.WithKeys("ctrl+e"),
key.WithHelp("ctrl+e", "editor"),
),
Delete: key.NewBinding(
key.WithKeys("x"),
key.WithHelp("x", "delete"),
),
DeleteForce: key.NewBinding(
key.WithKeys("X"),
key.WithHelp("X", "force delete"),
),
ConfirmYes: key.NewBinding(
key.WithKeys("y", "Y"),
key.WithHelp("y", "confirm"),
),
Toggle: key.NewBinding(
key.WithKeys(" "),
key.WithHelp("space", "toggle"),
),
Timer: key.NewBinding(
key.WithKeys("t"),
key.WithHelp("t", "timer"),
),
TimeManual: key.NewBinding(
key.WithKeys("T"),
key.WithHelp("T", "log time"),
),
TimeEntries: key.NewBinding(
key.WithKeys("m"),
key.WithHelp("m", "time entries"),
),
Report: key.NewBinding(
key.WithKeys("r"),
key.WithHelp("r", "report"),
),
Undo: key.NewBinding(
key.WithKeys("u", "ctrl+z"),
key.WithHelp("u", "undo"),
),
Redo: key.NewBinding(
key.WithKeys("ctrl+r", "U"),
key.WithHelp("U", "redo"),
),
Quit: key.NewBinding(
key.WithKeys("q", "ctrl+c"),
key.WithHelp("q", "quit"),
),
Enter: key.NewBinding(
key.WithKeys("enter"),
key.WithHelp("enter", "confirm"),
),
Escape: key.NewBinding(
key.WithKeys("esc"),
key.WithHelp("esc", "cancel"),
),
}
}
// ShortHelp implements help.KeyMap.
func (k KeyMap) ShortHelp() []key.Binding {
return []key.Binding{k.Up, k.New, k.Search, k.Project, k.MoveTicket, k.Board, k.Status, k.Edit, k.Timer, k.TimeManual, k.TimeEntries, k.Report, k.Delete, k.DeleteForce, k.Undo, k.Redo, k.Quit}
}
// FullHelp implements help.KeyMap.
func (k KeyMap) FullHelp() [][]key.Binding {
return [][]key.Binding{k.ShortHelp()}
}