87 lines
2.7 KiB
Go
87 lines
2.7 KiB
Go
|
package main
|
|||
|
|
|||
|
import (
|
|||
|
"fmt"
|
|||
|
"os"
|
|||
|
|
|||
|
"github.com/charmbracelet/bubbles/list"
|
|||
|
tea "github.com/charmbracelet/bubbletea"
|
|||
|
"github.com/charmbracelet/lipgloss"
|
|||
|
)
|
|||
|
|
|||
|
var docStyle = lipgloss.NewStyle().Margin(1, 2)
|
|||
|
|
|||
|
type item struct {
|
|||
|
title, desc string
|
|||
|
}
|
|||
|
|
|||
|
func (i item) Title() string { return i.title }
|
|||
|
func (i item) Description() string { return i.desc }
|
|||
|
func (i item) FilterValue() string { return i.title }
|
|||
|
|
|||
|
type testModel struct {
|
|||
|
list list.Model
|
|||
|
}
|
|||
|
|
|||
|
func (m testModel) Init() tea.Cmd {
|
|||
|
return nil
|
|||
|
}
|
|||
|
|
|||
|
func (m testModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||
|
switch msg := msg.(type) {
|
|||
|
case tea.KeyMsg:
|
|||
|
if msg.String() == "ctrl+c" {
|
|||
|
return m, tea.Quit
|
|||
|
}
|
|||
|
case tea.WindowSizeMsg:
|
|||
|
h, v := docStyle.GetFrameSize()
|
|||
|
m.list.SetSize(msg.Width-h, msg.Height-v)
|
|||
|
}
|
|||
|
|
|||
|
var cmd tea.Cmd
|
|||
|
m.list, cmd = m.list.Update(msg)
|
|||
|
return m, cmd
|
|||
|
}
|
|||
|
|
|||
|
func (m testModel) View() string {
|
|||
|
return docStyle.Render(m.list.View())
|
|||
|
}
|
|||
|
|
|||
|
func terminalTest() {
|
|||
|
items := []list.Item{
|
|||
|
item{title: "Raspberry Pi’s", desc: "I have ’em all over my house"},
|
|||
|
item{title: "Nutella", desc: "It's good on toast"},
|
|||
|
item{title: "Bitter melon", desc: "It cools you down"},
|
|||
|
item{title: "Nice socks", desc: "And by that I mean socks without holes"},
|
|||
|
item{title: "Eight hours of sleep", desc: "I had this once"},
|
|||
|
item{title: "Cats", desc: "Usually"},
|
|||
|
item{title: "Plantasia, the album", desc: "My plants love it too"},
|
|||
|
item{title: "Pour over coffee", desc: "It takes forever to make though"},
|
|||
|
item{title: "VR", desc: "Virtual reality...what is there to say?"},
|
|||
|
item{title: "Noguchi Lamps", desc: "Such pleasing organic forms"},
|
|||
|
item{title: "Linux", desc: "Pretty much the best OS"},
|
|||
|
item{title: "Business school", desc: "Just kidding"},
|
|||
|
item{title: "Pottery", desc: "Wet clay is a great feeling"},
|
|||
|
item{title: "Shampoo", desc: "Nothing like clean hair"},
|
|||
|
item{title: "Table tennis", desc: "It’s surprisingly exhausting"},
|
|||
|
item{title: "Milk crates", desc: "Great for packing in your extra stuff"},
|
|||
|
item{title: "Afternoon tea", desc: "Especially the tea sandwich part"},
|
|||
|
item{title: "Stickers", desc: "The thicker the vinyl the better"},
|
|||
|
item{title: "20° Weather", desc: "Celsius, not Fahrenheit"},
|
|||
|
item{title: "Warm light", desc: "Like around 2700 Kelvin"},
|
|||
|
item{title: "The vernal equinox", desc: "The autumnal equinox is pretty good too"},
|
|||
|
item{title: "Gaffer’s tape", desc: "Basically sticky fabric"},
|
|||
|
item{title: "Terrycloth", desc: "In other words, towel fabric"},
|
|||
|
}
|
|||
|
|
|||
|
m := testModel{list: list.New(items, list.NewDefaultDelegate(), 0, 0)}
|
|||
|
m.list.Title = "My Fave Things"
|
|||
|
|
|||
|
p := tea.NewProgram(m, tea.WithAltScreen())
|
|||
|
|
|||
|
if _, err := p.Run(); err != nil {
|
|||
|
fmt.Println("Error running program:", err)
|
|||
|
os.Exit(1)
|
|||
|
}
|
|||
|
}
|