summaryrefslogtreecommitdiff
path: root/internal/switcher
diff options
context:
space:
mode:
authorBenjamin Chausse <benjamin@chausse.xyz>2024-11-24 13:04:11 -0500
committerGitHub <noreply@github.com>2024-11-24 13:04:11 -0500
commit218931d6ba6f33f023aa9dc921d0aa0aca5a9f12 (patch)
tree92089835c75f36318c81253d67cf89b18b75f774 /internal/switcher
parentef65550765215416195ad1a456408db781e752fd (diff)
feat: add help at the bottom (#5)
* Attemp at using goreleaser * Fix syntax error in .goreleaser.yml * fix: Check roadmap feature for clipboard (README) * feat: add help menu at the bottom (#4) * MVP for a help menu * fix: commented code is evil
Diffstat (limited to 'internal/switcher')
-rw-r--r--internal/switcher/keys.go40
-rw-r--r--internal/switcher/switcher.go51
2 files changed, 71 insertions, 20 deletions
diff --git a/internal/switcher/keys.go b/internal/switcher/keys.go
index e019ba1..215a8e2 100644
--- a/internal/switcher/keys.go
+++ b/internal/switcher/keys.go
@@ -3,7 +3,7 @@ package switcher
import "github.com/charmbracelet/bubbles/key"
type keybinds struct {
- next, prev, cpHex, cpRgb, cpHsl, cpCmyk, quit key.Binding
+ next, prev, cpHex, cpRgb, cpHsl, cpCmyk, help, quit key.Binding
}
func newKeybinds() keybinds {
@@ -14,23 +14,27 @@ func newKeybinds() keybinds {
),
prev: key.NewBinding(
key.WithKeys("shift+tab"),
- key.WithHelp("shift+tab", "previous picker"),
+ key.WithHelp("shift+tab", "prev. picker"),
),
cpHex: key.NewBinding(
key.WithKeys("x"),
- key.WithHelp("x", "yank/copy hex value"),
+ key.WithHelp("x", "copy hex"),
),
cpRgb: key.NewBinding(
key.WithKeys("r"),
- key.WithHelp("r", "yank/copy RGB value"),
+ key.WithHelp("r", "copy rgb"),
),
cpHsl: key.NewBinding(
key.WithKeys("s"),
- key.WithHelp("s", "yank/copy HSL value"),
+ key.WithHelp("s", "copy hsl"),
),
cpCmyk: key.NewBinding(
key.WithKeys("c"),
- key.WithHelp("c", "yank/copy CMYK value"),
+ key.WithHelp("c", "copy cmyk"),
+ ),
+ help: key.NewBinding(
+ key.WithKeys("?"),
+ key.WithHelp("?", "help"),
),
quit: key.NewBinding(
key.WithKeys("q", "ctrl+c"),
@@ -41,9 +45,27 @@ func newKeybinds() keybinds {
func Keys() []key.Binding {
k := newKeybinds()
- return []key.Binding{k.next, k.prev, k.cpHex, k.cpRgb, k.cpHsl, k.cpCmyk, k.quit}
+ return []key.Binding{k.next, k.prev, k.cpHex, k.cpRgb, k.cpHsl, k.cpCmyk, k.help, k.quit}
+}
+
+func shortKeys() [][]key.Binding {
+ keys := make([][]key.Binding, 2)
+ rows := 2
+ cRow := 0
+ for i := 0; i < len(Keys()); i++ {
+ keys[cRow] = append(keys[cRow], Keys()[i])
+ cRow++
+ if cRow == rows {
+ cRow = 0
+ }
+ }
+ return keys
}
-func (m Model) AllKeys() []key.Binding {
- return append(Keys(), m.pickers[m.active].AllKeys()...)
+func (m Model) AllKeys() [][]key.Binding {
+ keys := make([][]key.Binding, len(m.pickers[m.active].AllKeys())+1)
+ keys[0] = Keys()
+ copy(keys[1:], m.pickers[m.active].AllKeys())
+ return keys
+ // return append(m.pickers[m.active].AllKeys(), Keys())
}
diff --git a/internal/switcher/switcher.go b/internal/switcher/switcher.go
index c470557..fdf91af 100644
--- a/internal/switcher/switcher.go
+++ b/internal/switcher/switcher.go
@@ -9,21 +9,27 @@ import (
"github.com/ChausseBenjamin/termpicker/internal/preview"
"github.com/ChausseBenjamin/termpicker/internal/quit"
"github.com/ChausseBenjamin/termpicker/internal/util"
+ "github.com/charmbracelet/bubbles/help"
"github.com/charmbracelet/bubbles/key"
tea "github.com/charmbracelet/bubbletea"
+ "github.com/charmbracelet/lipgloss"
)
type Model struct {
- active int
- pickers []picker.Model
- preview preview.Model
+ active int
+ pickers []picker.Model
+ preview preview.Model
+ help help.Model
+ fullHelp bool // When false, only show help for the switcher (not children)
}
func New(pickers []picker.Model) Model {
return Model{
- active: 0,
- pickers: pickers,
- preview: *preview.New(colors.Hex(pickers[0].GetColor())),
+ active: 0,
+ pickers: pickers,
+ preview: *preview.New(colors.Hex(pickers[0].GetColor())),
+ help: help.New(),
+ fullHelp: false,
}
}
@@ -51,15 +57,36 @@ func (m Model) Init() tea.Cmd {
}
func (m Model) View() string {
- v := "|"
+ tabs := "|"
for i, p := range m.pickers {
if i == m.active {
- v += fmt.Sprintf(">%s<|", p.Title())
+ tabs += fmt.Sprintf(">%s<|", p.Title())
} else {
- v += fmt.Sprintf(" %s |", p.Title())
+ tabs += fmt.Sprintf(" %s |", p.Title())
}
}
- return fmt.Sprintf("%s\n%s\n%s", v, m.pickers[m.active].View(), m.preview.View())
+
+ pickerView := m.pickers[m.active].View()
+ w := lipgloss.Width(pickerView)
+
+ m.help.Styles.ShortKey.Width(w)
+ var helpstr string
+ if m.fullHelp {
+ helpstr = m.help.FullHelpView(m.AllKeys())
+ } else {
+ // This is a hack since the current view has too many keys
+ // and the horizontal "ShortHelpView" gets too wide.
+ // "FullHelpView" seperates keys by columns (and we only show the first).
+ // helpstr = m.help.FullHelpView([][]key.Binding{m.AllKeys()[0]})
+ helpstr = m.help.FullHelpView(shortKeys())
+ }
+
+ return fmt.Sprintf("%s\n%s\n%s\n%v",
+ tabs,
+ pickerView,
+ m.preview.View(),
+ helpstr,
+ )
}
func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
@@ -97,6 +124,9 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
cmyk := colors.CMYK{}.FromPrecise(pc).(colors.CMYK)
util.Copy(cmyk.String())
+ case key.Matches(msg, keys.help):
+ m.fullHelp = !m.fullHelp
+
case key.Matches(msg, keys.quit):
return quit.Model{}, tea.Quit
@@ -112,7 +142,6 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m, tea.Batch(cmds...)
}
default:
- // fmt.Printf("\nmsg: %T\n", msg)
}
for i, p := range m.pickers {
newActive, cmd := p.Update(msg)