Files
homarr/tools/homarr-dev/internal/ui/keys.go
T

139 lines
5.7 KiB
Go

package ui
import "charm.land/bubbles/v2/key"
// KeyMap is the complete binding set. Bindings are declared once here so the
// help overlay, the footer hints, and the dispatcher can never drift apart —
// adding a key to the map is what makes it appear in the help.
type KeyMap struct {
Up key.Binding
Down key.Binding
Top key.Binding
Bottom key.Binding
Enter key.Binding
Filter key.Binding
Refresh key.Binding
Quit key.Binding
Help key.Binding
Dev key.Binding
Instances key.Binding
Cycle key.Binding
Sidebar key.Binding
SidebarTab key.Binding
Pin key.Binding
Follow key.Binding
PageUp key.Binding
PageDown key.Binding
Pull key.Binding
Build key.Binding
Demo key.Binding
Bots key.Binding
OpenPR key.Binding
OpenApp key.Binding
Copy key.Binding
Stop key.Binding
Restart key.Binding
Remove key.Binding
Manage key.Binding
Tasks key.Binding
Cancel key.Binding
ManageImage key.Binding
ManageData key.Binding
ManageBuild key.Binding
ManageStop key.Binding
ManagePrune key.Binding
ManageConfirm key.Binding
ManageAbort key.Binding
}
func DefaultKeyMap() KeyMap {
return KeyMap{
Up: key.NewBinding(key.WithKeys("up", "k"), key.WithHelp("↑/k", "up")),
Down: key.NewBinding(key.WithKeys("down", "j"), key.WithHelp("↓/j", "down")),
Top: key.NewBinding(key.WithKeys("home", "g"), key.WithHelp("g", "top")),
Bottom: key.NewBinding(key.WithKeys("end", "G"), key.WithHelp("G", "bottom")),
Enter: key.NewBinding(key.WithKeys("enter", " "), key.WithHelp("enter", "start/stop")),
Filter: key.NewBinding(key.WithKeys("/"), key.WithHelp("/", "filter")),
Refresh: key.NewBinding(key.WithKeys("r"), key.WithHelp("r", "refresh")),
Quit: key.NewBinding(key.WithKeys("q", "ctrl+c"), key.WithHelp("q", "quit")),
Help: key.NewBinding(key.WithKeys("?"), key.WithHelp("?", "help")),
Dev: key.NewBinding(key.WithKeys("1"), key.WithHelp("1", "development")),
Instances: key.NewBinding(key.WithKeys("2"), key.WithHelp("2", "instances")),
Cycle: key.NewBinding(key.WithKeys("d"), key.WithHelp("d", "switch screen")),
Sidebar: key.NewBinding(key.WithKeys("l"), key.WithHelp("l", "sidebar")),
SidebarTab: key.NewBinding(key.WithKeys("tab"), key.WithHelp("tab", "logs/build/ci")),
Pin: key.NewBinding(key.WithKeys("L"), key.WithHelp("L", "pin logs")),
Follow: key.NewBinding(key.WithKeys("f"), key.WithHelp("f", "follow")),
PageUp: key.NewBinding(key.WithKeys("pgup"), key.WithHelp("pgup", "scroll up")),
PageDown: key.NewBinding(key.WithKeys("pgdown"), key.WithHelp("pgdn", "scroll down")),
Pull: key.NewBinding(key.WithKeys("p"), key.WithHelp("p", "pull remote")),
Build: key.NewBinding(key.WithKeys("R"), key.WithHelp("R", "build locally")),
Demo: key.NewBinding(key.WithKeys("M"), key.WithHelp("M", "demo mode")),
Bots: key.NewBinding(key.WithKeys("b"), key.WithHelp("b", "bot PRs")),
OpenPR: key.NewBinding(key.WithKeys("o"), key.WithHelp("o", "open PR")),
OpenApp: key.NewBinding(key.WithKeys("a"), key.WithHelp("a", "open app")),
Copy: key.NewBinding(key.WithKeys("c"), key.WithHelp("c", "copy URL")),
Stop: key.NewBinding(key.WithKeys("s"), key.WithHelp("s", "stop")),
Restart: key.NewBinding(key.WithKeys("S"), key.WithHelp("S", "restart")),
Remove: key.NewBinding(key.WithKeys("x"), key.WithHelp("x", "remove")),
Manage: key.NewBinding(key.WithKeys("m"), key.WithHelp("m", "manage")),
Tasks: key.NewBinding(key.WithKeys("t"), key.WithHelp("t", "tasks")),
Cancel: key.NewBinding(key.WithKeys("esc"), key.WithHelp("esc", "clear filter")),
ManageImage: key.NewBinding(key.WithKeys("i"), key.WithHelp("i", "delete image")),
ManageData: key.NewBinding(key.WithKeys("d"), key.WithHelp("d", "delete data")),
ManageBuild: key.NewBinding(key.WithKeys("b"), key.WithHelp("b", "rebuild locally")),
ManageStop: key.NewBinding(key.WithKeys("c"), key.WithHelp("c", "remove container")),
ManagePrune: key.NewBinding(key.WithKeys("p"), key.WithHelp("p", "prune stopped")),
ManageConfirm: key.NewBinding(key.WithKeys("y", "enter"), key.WithHelp("y", "confirm")),
ManageAbort: key.NewBinding(key.WithKeys("n", "esc"), key.WithHelp("n", "cancel")),
}
}
// ShortHelp is the footer hint set, kept to what fits on two lines.
func (k KeyMap) ShortHelp() []key.Binding {
return []key.Binding{k.Up, k.Down, k.Enter, k.Filter, k.Sidebar, k.Manage, k.Tasks, k.Cycle, k.Help, k.Quit}
}
// FullHelp is the grouped set rendered by the help overlay.
func (k KeyMap) FullHelp() [][]key.Binding {
return [][]key.Binding{
{k.Up, k.Down, k.Top, k.Bottom, k.Filter, k.Refresh},
{k.Enter, k.Pull, k.Build, k.Demo, k.Bots},
{k.Sidebar, k.SidebarTab, k.Pin, k.Follow, k.PageUp, k.PageDown},
{k.Stop, k.Restart, k.Remove, k.OpenPR, k.OpenApp, k.Copy},
{k.Manage, k.Tasks, k.Dev, k.Instances, k.Cycle, k.Quit},
}
}
// DevHelp is the footer hint set for the development screen.
func (k KeyMap) DevHelp() []key.Binding {
return []key.Binding{k.Enter, k.Pull, k.Build, k.Demo, k.OpenPR, k.OpenApp, k.Bots}
}
// InstanceHelp is the footer hint set for the instances screen.
func (k KeyMap) InstanceHelp() []key.Binding {
return []key.Binding{k.Enter, k.Stop, k.Restart, k.Remove, k.Build, k.OpenApp, k.Copy}
}
// CommonHelp is the second footer line, shared by both screens.
func (k KeyMap) CommonHelp() []key.Binding {
return []key.Binding{k.Filter, k.Cancel, k.Sidebar, k.SidebarTab, k.Pin, k.Follow, k.Manage, k.Tasks, k.Cycle, k.Refresh, k.Help, k.Quit}
}
// ManageHelp is the binding set shown while manage mode is armed.
func (k KeyMap) ManageHelp() []key.Binding {
return []key.Binding{k.ManageBuild, k.ManageImage, k.ManageData, k.ManageStop, k.ManagePrune, k.ManageAbort}
}