124 lines
2.7 KiB
Go
124 lines
2.7 KiB
Go
package app
|
|
|
|
import "github.com/charmbracelet/bubbles/key"
|
|
|
|
// KeyMap defines all keybindings
|
|
type KeyMap struct {
|
|
// Global
|
|
Quit key.Binding
|
|
Help key.Binding
|
|
PlayPause key.Binding
|
|
|
|
// Navigation (global)
|
|
SeekForward key.Binding
|
|
SeekBackward key.Binding
|
|
SeekForwardBig key.Binding
|
|
SeekBackwardBig key.Binding
|
|
ScrollUp key.Binding
|
|
ScrollDown key.Binding
|
|
PageUp key.Binding
|
|
PageDown key.Binding
|
|
GoTop key.Binding
|
|
GoBottom key.Binding
|
|
|
|
// Editing
|
|
EnterEdit key.Binding
|
|
|
|
// Search
|
|
Search key.Binding
|
|
}
|
|
|
|
// DefaultKeyMap returns the default keybindings
|
|
func DefaultKeyMap() KeyMap {
|
|
return KeyMap{
|
|
Quit: key.NewBinding(
|
|
key.WithKeys("q", "ctrl+c"),
|
|
key.WithHelp("q", "quit"),
|
|
),
|
|
Help: key.NewBinding(
|
|
key.WithKeys("?"),
|
|
key.WithHelp("?", "help"),
|
|
),
|
|
PlayPause: key.NewBinding(
|
|
key.WithKeys(" "),
|
|
key.WithHelp("space", "play/pause"),
|
|
),
|
|
SeekForward: key.NewBinding(
|
|
key.WithKeys("l", "right"),
|
|
key.WithHelp("l/→", "seek forward"),
|
|
),
|
|
SeekBackward: key.NewBinding(
|
|
key.WithKeys("h", "left"),
|
|
key.WithHelp("h/←", "seek backward"),
|
|
),
|
|
SeekForwardBig: key.NewBinding(
|
|
key.WithKeys("L", "shift+right"),
|
|
key.WithHelp("L", "seek forward (big)"),
|
|
),
|
|
SeekBackwardBig: key.NewBinding(
|
|
key.WithKeys("H", "shift+left"),
|
|
key.WithHelp("H", "seek backward (big)"),
|
|
),
|
|
ScrollUp: key.NewBinding(
|
|
key.WithKeys("k", "up"),
|
|
key.WithHelp("k/↑", "previous cue"),
|
|
),
|
|
ScrollDown: key.NewBinding(
|
|
key.WithKeys("j", "down"),
|
|
key.WithHelp("j/↓", "next cue"),
|
|
),
|
|
PageUp: key.NewBinding(
|
|
key.WithKeys("ctrl+u"),
|
|
key.WithHelp("ctrl+u", "jump 5 cues up"),
|
|
),
|
|
PageDown: key.NewBinding(
|
|
key.WithKeys("ctrl+d"),
|
|
key.WithHelp("ctrl+d", "jump 5 cues down"),
|
|
),
|
|
GoTop: key.NewBinding(
|
|
key.WithKeys("g"),
|
|
key.WithHelp("g", "go to first cue"),
|
|
),
|
|
GoBottom: key.NewBinding(
|
|
key.WithKeys("G"),
|
|
key.WithHelp("G", "go to last cue"),
|
|
),
|
|
EnterEdit: key.NewBinding(
|
|
key.WithKeys("i"),
|
|
key.WithHelp("i", "edit transcript"),
|
|
),
|
|
Search: key.NewBinding(
|
|
key.WithKeys("s"),
|
|
key.WithHelp("s", "search cues"),
|
|
),
|
|
}
|
|
}
|
|
|
|
// HelpView returns a formatted help string
|
|
func (k KeyMap) HelpView() string {
|
|
return `Keybindings:
|
|
|
|
Global:
|
|
space Play/Pause
|
|
q Quit
|
|
? Toggle help
|
|
|
|
Navigation (Global):
|
|
h / ← Seek backward (5s)
|
|
l / → Seek forward (5s)
|
|
H Seek backward (30s)
|
|
L Seek forward (30s)
|
|
j / ↓ Next cue
|
|
k / ↑ Previous cue
|
|
ctrl+d Jump 5 cues down
|
|
ctrl+u Jump 5 cues up
|
|
g Go to first cue
|
|
G Go to last cue
|
|
|
|
Editing:
|
|
i Edit in $EDITOR at cue
|
|
|
|
Navigation:
|
|
s Search cues`
|
|
}
|