1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package list
- import (
- "github.com/charmbracelet/bubbles/key"
- "github.com/charmbracelet/bubbles/list"
- tea "github.com/charmbracelet/bubbletea"
- )
- func newItemDelegate(keys *delegateKeyMap) list.DefaultDelegate {
- d := list.NewDefaultDelegate()
- d.UpdateFunc = func(msg tea.Msg, m *list.Model) tea.Cmd {
- var title string
- if i, ok := m.SelectedItem().(Item); ok {
- title = i.Title()
- } else {
- return nil
- }
- switch msg := msg.(type) {
- case tea.KeyMsg:
- switch {
- case key.Matches(msg, keys.choose):
- return m.NewStatusMessage(statusMessageStyle("You chose " + title))
- case key.Matches(msg, keys.remove):
- index := m.Index()
- m.RemoveItem(index)
- if len(m.Items()) == 0 {
- keys.remove.SetEnabled(false)
- }
- return m.NewStatusMessage(statusMessageStyle("Deleted " + title))
- }
- }
- return nil
- }
- help := []key.Binding{keys.choose, keys.remove}
- d.ShortHelpFunc = func() []key.Binding {
- return help
- }
- d.FullHelpFunc = func() [][]key.Binding {
- return [][]key.Binding{help}
- }
- return d
- }
- type delegateKeyMap struct {
- choose key.Binding
- remove key.Binding
- }
- // Additional short help entries. This satisfies the help.KeyMap interface and
- // is entirely optional.
- func (d delegateKeyMap) ShortHelp() []key.Binding {
- return []key.Binding{
- d.choose,
- d.remove,
- }
- }
- // Additional full help entries. This satisfies the help.KeyMap interface and
- // is entirely optional.
- func (d delegateKeyMap) FullHelp() [][]key.Binding {
- return [][]key.Binding{
- {
- d.choose,
- d.remove,
- },
- }
- }
- func newDelegateKeyMap() *delegateKeyMap {
- return &delegateKeyMap{
- choose: key.NewBinding(
- key.WithKeys("enter"),
- key.WithHelp("enter", "choose"),
- ),
- remove: key.NewBinding(
- key.WithKeys("x", "backspace"),
- key.WithHelp("x", "delete"),
- ),
- }
- }
|