Skip to content

Commit

Permalink
refactor!: remove program options
Browse files Browse the repository at this point in the history
This replace program options by exposing them in the Program struct.
  • Loading branch information
aymanbagabas committed Jan 27, 2025
1 parent 94888ce commit e9aea7c
Show file tree
Hide file tree
Showing 11 changed files with 131 additions and 640 deletions.
6 changes: 3 additions & 3 deletions examples/altscreen-toggle/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ type model struct {
suspending bool
}

func (m model) Init() (tea.Model, tea.Cmd) {
func (m model) Init() (model, tea.Cmd) {
return m, nil
}

func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
func (m model) Update(msg tea.Msg) (model, tea.Cmd) {
switch msg := msg.(type) {
case tea.ResumeMsg:
m.suspending = false
Expand Down Expand Up @@ -79,7 +79,7 @@ func (m model) View() fmt.Stringer {
}

func main() {
if _, err := tea.NewProgram(model{}).Run(); err != nil {
if err := tea.NewProgram(model{}).Run(); err != nil {
fmt.Println("Error running program:", err)
os.Exit(1)
}
Expand Down
16 changes: 7 additions & 9 deletions examples/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ module examples
go 1.23.1

require (
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250114183437-fbe642df174c
github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.2.0.20250114201644-43a5b4dd0af0
github.com/charmbracelet/colorprofile v0.1.9
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250123213707-518ff7d0d016
github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.2.0.20250123211610-443afa6fa0c1
github.com/charmbracelet/colorprofile v0.1.10-0.20250125232710-602ea259b0c8
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.20250114171829-b67eb015d607
github.com/charmbracelet/x/ansi v0.7.0
github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250125233033-58a153eb00e6
github.com/charmbracelet/x/ansi v0.7.1-0.20250127142642-47b367694781
github.com/charmbracelet/x/exp/teatest/v2 v2.0.0-20241016014612-3b4d04043233
github.com/fogleman/ease v0.0.0-20170301025033-8da417bf1776
github.com/lucasb-eyer/go-colorful v1.2.0
Expand All @@ -23,11 +23,10 @@ require (
github.com/aymanbagabas/go-udiff v0.2.0 // indirect
github.com/aymerick/douceur v0.2.0 // indirect
github.com/charmbracelet/lipgloss v1.0.0 // indirect
github.com/charmbracelet/x/cellbuf v0.0.7-0.20250113065325-800d48271e72 // indirect
github.com/charmbracelet/x/cellbuf v0.0.7-0.20250127142642-47b367694781 // indirect
github.com/charmbracelet/x/exp/golden v0.0.0-20241212170349-ad4b7ae0f25f // indirect
github.com/charmbracelet/x/input v0.3.0 // indirect
github.com/charmbracelet/x/input v0.3.1-0.20250127142642-47b367694781 // indirect
github.com/charmbracelet/x/term v0.2.1 // indirect
github.com/charmbracelet/x/wcwidth v0.0.0-20241113152101-0af7d04e9f32 // indirect
github.com/charmbracelet/x/windows v0.2.0 // indirect
github.com/dlclark/regexp2 v1.11.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
Expand All @@ -46,7 +45,6 @@ require (
golang.org/x/sync v0.10.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/term v0.27.0 // indirect
golang.org/x/text v0.21.0 // indirect
)

replace github.com/charmbracelet/bubbletea/v2 => ../
24 changes: 14 additions & 10 deletions examples/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuP
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250114183437-fbe642df174c h1:hhR5M/3Wt/mKLTPF/MyvA4/WWtnTmIzLXo69pW/9S5s=
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250114183437-fbe642df174c/go.mod h1:M271uOSMoLQsiVV1yhFZx6JprPQCVXgLYpSEbWXtidM=
github.com/charmbracelet/colorprofile v0.1.9 h1:5JnfvX+I9D6rRNu8xK3pgIqknaBVTXHU9pGu1jkZxLw=
github.com/charmbracelet/colorprofile v0.1.9/go.mod h1:+jpmObxZl1Dab3H3IMVIPSZTsKcFpjJUv97G0dLqM60=
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250123213707-518ff7d0d016 h1:qLul2uRoupbiXXjixWPE3yk5tMKEhWEmTHOGZpewFqs=
github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250123213707-518ff7d0d016/go.mod h1:DBfWo/ohdtbvjyDk/Q4UffdRd/rRKfYTwTqHdPFVHT8=
github.com/charmbracelet/colorprofile v0.1.10-0.20250125232710-602ea259b0c8 h1:vG6Rjlc1uOAefKeKKOOgUvfZpzOhZ3CRsrKEIKYMY9A=
github.com/charmbracelet/colorprofile v0.1.10-0.20250125232710-602ea259b0c8/go.mod h1:F6Bp9eJqNKFwPl00QmAqyEd89wzO8Hhvz+PMCrNp+HQ=
github.com/charmbracelet/glamour v0.8.0 h1:tPrjL3aRcQbn++7t18wOpgLyl8wrOHUEDS7IZ68QtZs=
github.com/charmbracelet/glamour v0.8.0/go.mod h1:ViRgmKkf3u5S7uakt2czJ272WSg2ZenlYEZXT2x7Bjw=
github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ=
Expand All @@ -26,20 +28,24 @@ github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O
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.20250114171829-b67eb015d607 h1:lERE4ow371r5WMqQAt7Eqlg1A4tBNA8T4RLwdXnKyBo=
github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250114171829-b67eb015d607/go.mod h1:MD7Vb+O1zFRgBo+F94JHHuME7df8XBByNKuX5k/L/qs=
github.com/charmbracelet/x/ansi v0.7.0 h1:/QfFmiXOGGwN6fRbzvQaYp7fu1pkxpZ3qFBZWBsP404=
github.com/charmbracelet/x/ansi v0.7.0/go.mod h1:KBUFw1la39nl0dLl10l5ORDAqGXaeurTQmwyyVKse/Q=
github.com/charmbracelet/x/cellbuf v0.0.7-0.20250113065325-800d48271e72 h1:P90NI2rZuBISjB1HIHdkBDE+riKtVzIOi6Xun3qjUn8=
github.com/charmbracelet/x/cellbuf v0.0.7-0.20250113065325-800d48271e72/go.mod h1:VXZSjC/QYH0t+9CG1qtcEx3XZubTDJb5ilWS6qJg4/0=
github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250125233033-58a153eb00e6 h1:SL+y2koIzHnj8Mlde4UULviy6hPOzIsmroV9CV3jaBc=
github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250125233033-58a153eb00e6/go.mod h1:SmnBx+JGxy7zdh0MrEA+JCxXkWrqVCz1DWQ1RSkjRMc=
github.com/charmbracelet/x/ansi v0.7.1-0.20250125231001-6f3bcd3f0ebe h1:kjPvZEd/oDzhBm6G6ZVQB+eVFrrWB/hGbrNCfgerBnI=
github.com/charmbracelet/x/ansi v0.7.1-0.20250125231001-6f3bcd3f0ebe/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
github.com/charmbracelet/x/ansi v0.7.1-0.20250127142642-47b367694781 h1:49ZGAhAv4j4RWD11i2aClUbB4DpXI3AZ6y9AvUx+qiQ=
github.com/charmbracelet/x/ansi v0.7.1-0.20250127142642-47b367694781/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
github.com/charmbracelet/x/cellbuf v0.0.7-0.20250127142642-47b367694781 h1:ApfTT4PJREWwcZqKrl5VOmyBUQ49fSsxqvK6IHDgqrg=
github.com/charmbracelet/x/cellbuf v0.0.7-0.20250127142642-47b367694781/go.mod h1:sLZd8ioVodkhg0N9rc3SCGkUCa4gS59Ir6AQj/VY8W0=
github.com/charmbracelet/x/exp/golden v0.0.0-20241212170349-ad4b7ae0f25f h1:UytXHv0UxnsDFmL/7Z9Q5SBYPwSuRLXHbwx+6LycZ2w=
github.com/charmbracelet/x/exp/golden v0.0.0-20241212170349-ad4b7ae0f25f/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
github.com/charmbracelet/x/exp/teatest/v2 v2.0.0-20241016014612-3b4d04043233 h1:2bTR/MtnJuq9RrCZSPwCOO34YSDByKL6nzXQMnsKK6U=
github.com/charmbracelet/x/exp/teatest/v2 v2.0.0-20241016014612-3b4d04043233/go.mod h1:cw9df32BXdkcd0LzAHsFMmvXOsrrlDKazIW8PCq0cPM=
github.com/charmbracelet/x/input v0.3.0 h1:lVzEz92E2u9jCU0mUwcyKeSOxkoeat+1eUkjzL0WCYI=
github.com/charmbracelet/x/input v0.3.0/go.mod h1:M8CHPIYnmmiNHA17hqXmvSfeZLO2lj9pzJFX3aWvzgw=
github.com/charmbracelet/x/input v0.3.1-0.20250127142642-47b367694781 h1:e0Ia8xMncObhCD1zj2NgsI1x4UHW23Iixo6EtTv2PVE=
github.com/charmbracelet/x/input v0.3.1-0.20250127142642-47b367694781/go.mod h1:qvZg4rmYhd5wslnkW3/zR9CzAKZ0sscFNRmCmhY5JE0=
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
github.com/charmbracelet/x/wcwidth v0.0.0-20241113152101-0af7d04e9f32 h1:14czE6R5CgOlvONsJYa2B1uTyLvXzGXpBqw2AyZeTh4=
github.com/charmbracelet/x/wcwidth v0.0.0-20241113152101-0af7d04e9f32/go.mod h1:hyua5CY63kyl7IfyIxv1SjVEqoKze/XmDkEglItuVjA=
github.com/charmbracelet/x/windows v0.2.0 h1:ilXA1GJjTNkgOm94CLPeSz7rar54jtFatdmoiONPuEw=
github.com/charmbracelet/x/windows v0.2.0/go.mod h1:ZibNFR49ZFqCXgP76sYanisxRyC+EYrBE7TTknD8s1s=
github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
Expand Down Expand Up @@ -93,5 +99,3 @@ golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
6 changes: 3 additions & 3 deletions examples/list-fancy/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ type model struct {
delegateKeys *delegateKeyMap
}

func (m model) Init() (tea.Model, tea.Cmd) {
func (m model) Init() (model, tea.Cmd) {
m.once = new(sync.Once)
return m, tea.Batch(
tea.RequestBackgroundColor,
Expand Down Expand Up @@ -163,7 +163,7 @@ func (m *model) updateListProperties() {
m.list.SetSize(m.width-h, m.height-v)
}

func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
func (m model) Update(msg tea.Msg) (model, tea.Cmd) {
var cmds []tea.Cmd

switch msg := msg.(type) {
Expand Down Expand Up @@ -244,7 +244,7 @@ func (m model) View() fmt.Stringer {
}

func main() {
if _, err := tea.NewProgram(model{}).Run(); err != nil {
if err := tea.NewProgram(model{}).Run(); err != nil {
fmt.Println("Error running program:", err)
os.Exit(1)
}
Expand Down
6 changes: 3 additions & 3 deletions examples/pipe/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ func main() {

model := newModel(strings.TrimSpace(b.String()))

if _, err := tea.NewProgram(model).Run(); err != nil {
if err := tea.NewProgram(model).Run(); err != nil {
fmt.Println("Couldn't start program:", err)
os.Exit(1)
}
Expand All @@ -68,11 +68,11 @@ func newModel(initialValue string) (m model) {
return
}

func (m model) Init() (tea.Model, tea.Cmd) {
func (m model) Init() (model, tea.Cmd) {
return m, textinput.Blink
}

func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
func (m model) Update(msg tea.Msg) (model, tea.Cmd) {
if key, ok := msg.(tea.KeyMsg); ok {
switch key.String() {
case "ctrl+c", "esc", "enter":
Expand Down
23 changes: 17 additions & 6 deletions examples/textarea/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,19 @@ import (
)

func main() {
p := tea.NewProgram(initialModel())
// p := tea.NewProgram(initialModel())
m := initialModel()
p := &tea.Program[model]{
Init: m.Init,
Update: func(m model, msg tea.Msg) (model, tea.Cmd) {
return m.Update(msg)
},
View: func(m model) fmt.Stringer {
return m.View()
},
}

if _, err := p.Run(); err != nil {
if err := p.Run(); err != nil {
log.Fatal(err)
}
}
Expand All @@ -31,21 +41,21 @@ func initialModel() model {
ti := textarea.New()
ti.Placeholder = "Once upon a time..."
ti.Focus()
ti.Cursor.SetMode(cursor.CursorHide)
ti.VirtualCursor.SetMode(cursor.CursorHide)

return model{
textarea: ti,
err: nil,
}
}

func (m model) Init() (tea.Model, tea.Cmd) {
func (m model) Init() (model, tea.Cmd) {
return m, tea.Batch(
textarea.Blink,
)
}

func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
func (m model) Update(msg tea.Msg) (model, tea.Cmd) {
var cmds []tea.Cmd
var cmd tea.Cmd

Expand Down Expand Up @@ -87,7 +97,8 @@ func (m model) View() fmt.Stringer {
"(ctrl+c to quit)",
) + "\n\n")

x, y := m.textarea.CursorPosition()
cur := m.textarea.Cursor()
x, y := cur.Position.X, cur.Position.Y
f.Cursor = tea.NewCursor(x+xOffset, y+yOffset)

return f
Expand Down
Loading

0 comments on commit e9aea7c

Please sign in to comment.