Skip to content

Commit

Permalink
fix(examples): only show keybindings when they'll have an effect
Browse files Browse the repository at this point in the history
  • Loading branch information
meowgorithm committed Feb 21, 2025
1 parent 705c75d commit 62b020e
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 22 deletions.
61 changes: 45 additions & 16 deletions examples/autocomplete/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,16 @@ type model struct {
keymap keymap
}

type keymap struct{}
type keymap struct {
complete, next, prev, quit key.Binding
}

func (k keymap) ShortHelp() []key.Binding {
return []key.Binding{
key.NewBinding(key.WithKeys("tab"), key.WithHelp("tab", "complete")),
key.NewBinding(key.WithKeys("ctrl+n"), key.WithHelp("ctrl+n", "next")),
key.NewBinding(key.WithKeys("ctrl+p"), key.WithHelp("ctrl+p", "prev")),
key.NewBinding(key.WithKeys("esc"), key.WithHelp("esc", "quit")),
k.complete,
k.next,
k.prev,
k.quit,
}
}

Expand All @@ -84,7 +86,6 @@ func (k keymap) FullHelp() [][]key.Binding {

func initialModel() model {
ti := textinput.New()
ti.Placeholder = "repository"
ti.Prompt = "charmbracelet/"
ti.Styles.Focused.Prompt = lipgloss.NewStyle().Foreground(lipgloss.Color("63")).MarginLeft(2)
ti.Styles.Cursor.Color = lipgloss.Color("63")
Expand All @@ -93,7 +94,20 @@ func initialModel() model {
ti.SetWidth(20)
ti.ShowSuggestions = true

return model{textInput: ti, help: help.New()}
km := keymap{
// XXX: we should be using the keybindings on the textinput model.
complete: key.NewBinding(key.WithKeys("tab"), key.WithHelp("tab", "complete"), key.WithDisabled()),
next: key.NewBinding(key.WithKeys("ctrl+n"), key.WithHelp("ctrl+n", "next"), key.WithDisabled()),
prev: key.NewBinding(key.WithKeys("ctrl+p"), key.WithHelp("ctrl+p", "prev"), key.WithDisabled()),

quit: key.NewBinding(key.WithKeys("enter", "ctrl+c", "esc"), key.WithHelp("esc", "quit")),
}

return model{
textInput: ti,
keymap: km,
help: help.New(),
}
}

func (m model) Init() tea.Cmd {
Expand All @@ -108,32 +122,47 @@ func (m model) Cursor() *tea.Cursor {

func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyPressMsg:
switch msg.String() {
case "enter", "ctrl+c", "esc":
return m, tea.Quit
}

case gotReposSuccessMsg:
var suggestions []string
for _, r := range msg {
suggestions = append(suggestions, r.Name)
}
m.textInput.SetSuggestions(suggestions)

case tea.KeyPressMsg:
switch {
case key.Matches(msg, m.keymap.quit):
return m, tea.Quit
}
}

var cmd tea.Cmd
m.textInput, cmd = m.textInput.Update(msg)

// Determine whether to show completion keybindings.
//
// XXX: we should be using the keybindings on the textinput model.
hasChoices := len(m.textInput.MatchedSuggestions()) > 1
m.keymap.complete.SetEnabled(hasChoices)
m.keymap.next.SetEnabled(hasChoices)
m.keymap.prev.SetEnabled(hasChoices)

return m, cmd
}

func (m model) View() string {
func (m model) View() (string, *tea.Cursor) {
if len(m.textInput.AvailableSuggestions()) < 1 {
return "One sec, we're fetching completions...", nil
}

return lipgloss.JoinVertical(
lipgloss.Top,
lipgloss.Left,
m.headerView(),
m.textInput.View(),
m.footerView(),
)
), m.Cursor()
}

func (m model) headerView() string { return "Pick a Charm™ repo:\n" }
func (m model) headerView() string { return "Enter a Charm™ repo:\n" }
func (m model) footerView() string { return "\n" + m.help.View(m.keymap) }
4 changes: 2 additions & 2 deletions examples/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ module examples
go 1.23.1

require (
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250210190055-c20ae83e2f58
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250211170751-4491afa808c7
github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.2.0.20250204175057-2a96bc438da6
github.com/charmbracelet/colorprofile v0.2.0
github.com/charmbracelet/glamour v0.8.0
github.com/charmbracelet/harmonica v0.2.0
github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250204145343-96725424379d
github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250218201041-aa91bd691cf5
github.com/charmbracelet/x/ansi v0.8.0
github.com/charmbracelet/x/exp/teatest/v2 v2.0.0-20241016014612-3b4d04043233
github.com/fogleman/ease v0.0.0-20170301025033-8da417bf1776
Expand Down
8 changes: 4 additions & 4 deletions examples/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWp
github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA=
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250210190055-c20ae83e2f58 h1:P3U+GsG3TK0uUTURbbZO/rVWJLsczLUE6nnPjlDzVbQ=
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250210190055-c20ae83e2f58/go.mod h1:OQsv1nZAu5v8GtZqNTqS4yY5mfR0VgImkpe2F0QYEfs=
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250211170751-4491afa808c7 h1:8cwDdcNLWHcwdN59to+ASr0uaHUWmGTWYpVMrMNA/mU=
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250211170751-4491afa808c7/go.mod h1:OQsv1nZAu5v8GtZqNTqS4yY5mfR0VgImkpe2F0QYEfs=
github.com/charmbracelet/colorprofile v0.2.0 h1:iiIQlp3LSvoJPtR11KoDfIf9wqWm2mn/iU420rHOZ/A=
github.com/charmbracelet/colorprofile v0.2.0/go.mod h1:6wPrSSR4QtwYtOY3h0bLRw5YOUAIKWlZIJ02CTAsZsk=
github.com/charmbracelet/glamour v0.8.0 h1:tPrjL3aRcQbn++7t18wOpgLyl8wrOHUEDS7IZ68QtZs=
Expand All @@ -24,8 +24,8 @@ github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG
github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg=
github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo=
github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250204145343-96725424379d h1:wW4446FqrhqEHT96r2OVGNU0izi8siEybQVZ+qBRpJs=
github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250204145343-96725424379d/go.mod h1:ZWl23X8o1vsQu8dpju10HKXepcMMlsHO8SwLl2OhmEU=
github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250218201041-aa91bd691cf5 h1:IctsjPxgKr8rEpUzoqwM2TlVhLcxS2TlOe7PFa6U7M4=
github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250218201041-aa91bd691cf5/go.mod h1:wvhSDGHyThg9IW8ehatv9MkG4YH5MHYcdhQYmsaCITM=
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
github.com/charmbracelet/x/cellbuf v0.0.12-0.20250212155406-f75055277088 h1:m6tAMwKSqnvNu5+2IsCTkZFPy58SFJ55CNuBE5U8ilw=
Expand Down

0 comments on commit 62b020e

Please sign in to comment.