package keys
import (
"strings"
"github.com/charmbracelet/bubbles/help"
"github.com/charmbracelet/bubbles/key"
"github.com/charmbracelet/lipgloss"
)
// ShortHelp is what the help view shows in the single-row layout.
func (m Map) ShortHelp() []key.Binding {
return []key.Binding{m.Up, m.Down, m.ToggleFilter, m.FocusDetail, m.Help, m.Quit}
}
// FullHelp is the expanded, multi-column layout.
func (m Map) FullHelp() [][]key.Binding {
return [][]key.Binding{
{m.Up, m.Down, m.PageUp, m.PageDown, m.Top, m.Bottom},
{m.ToggleFilter, m.FocusList, m.FocusDetail, m.Export, m.Copy},
{m.Help, m.Quit},
}
}
// Render draws the help text using the supplied help.Model.
func (m Map) Render(h help.Model, full bool) string {
if full {
return h.FullHelpView(m.FullHelp())
}
return h.ShortHelpView(m.ShortHelp())
}
// Cheatsheet returns a plain-text dump suitable for --help or the man
// page, one binding per line.
func (m Map) Cheatsheet() string {
title := lipgloss.NewStyle().Bold(true).Render("Keybindings")
var b strings.Builder
b.WriteString(title)
b.WriteByte('\n')
for _, kb := range m.All() {
hk := kb.Help().Key
hd := kb.Help().Desc
b.WriteString(" ")
b.WriteString(hk)
if pad := 12 - len(hk); pad > 0 {
b.WriteString(strings.Repeat(" ", pad))
}
b.WriteString(hd)
b.WriteByte('\n')
}
return b.String()
}