diff --git a/commands.go b/commands.go index 774b0c7..b095e5d 100644 --- a/commands.go +++ b/commands.go @@ -1,12 +1,48 @@ package tea -// Convenience commands. Not part of the Bubble Tea core, but potentially -// handy. - import ( "time" ) +// Batch performs a bunch of commands concurrently with no ordering guarantees +// about the results. Use a Batch to return several commands. +// +// Example: +// +// func (m model) Init() Cmd { +// return tea.Batch(someCommand, someOtherCommand) +// } +func Batch(cmds ...Cmd) Cmd { + var validCmds []Cmd + for _, c := range cmds { + if c == nil { + continue + } + validCmds = append(validCmds, c) + } + if len(validCmds) == 0 { + return nil + } + return func() Msg { + return batchMsg(validCmds) + } +} + +// batchMsg is the internal message used to perform a bunch of commands. You +// can send a batchMsg with Batch. +type batchMsg []Cmd + +// Sequence runs the given commands one at a time, in order. Contrast this with +// Batch, which runs commands concurrently. +func Sequence(cmds ...Cmd) Cmd { + return func() Msg { + return sequenceMsg(cmds) + } +} + +// sequenceMsg is used interally to run the the given commands in order. +type sequenceMsg []Cmd + // Every is a command that ticks in sync with the system clock. So, if you // wanted to tick with the system clock every second, minute or hour you // could use this. It's also handy for having different things tick in sync. diff --git a/tea.go b/tea.go index b080a2f..df6c680 100644 --- a/tea.go +++ b/tea.go @@ -117,34 +117,6 @@ type Program struct { windowsStdin *os.File //nolint:golint,structcheck,unused } -// Batch performs a bunch of commands concurrently with no ordering guarantees -// about the results. Use a Batch to return several commands. -// -// Example: -// -// func (m model) Init() Cmd { -// return tea.Batch(someCommand, someOtherCommand) -// } -func Batch(cmds ...Cmd) Cmd { - var validCmds []Cmd - for _, c := range cmds { - if c == nil { - continue - } - validCmds = append(validCmds, c) - } - if len(validCmds) == 0 { - return nil - } - return func() Msg { - return batchMsg(validCmds) - } -} - -// batchMsg is the internal message used to perform a bunch of commands. You -// can send a batchMsg with Batch. -type batchMsg []Cmd - // Quit is a special command that tells the Bubble Tea program to exit. func Quit() Msg { return quitMsg{} @@ -575,14 +547,3 @@ func (p *Program) Printf(template string, args ...interface{}) { messageBody: fmt.Sprintf(template, args...), } } - -// sequenceMsg is used interally to run the the given commands in order. -type sequenceMsg []Cmd - -// Sequence runs the given commands one at a time, in order. Contrast this with -// Batch, which runs commands concurrently. -func Sequence(cmds ...Cmd) Cmd { - return func() Msg { - return sequenceMsg(cmds) - } -}