diff --git a/answer.txt b/answer.txt deleted file mode 100644 index 5cac9ff..0000000 --- a/answer.txt +++ /dev/null @@ -1 +0,0 @@ -I love Bubble Gum <3 diff --git a/gum.go b/gum.go index 3c583ca..9cc52a9 100644 --- a/gum.go +++ b/gum.go @@ -2,6 +2,7 @@ package main import ( "github.com/charmbracelet/gum/input" + "github.com/charmbracelet/gum/join" "github.com/charmbracelet/gum/progress" "github.com/charmbracelet/gum/search" "github.com/charmbracelet/gum/spin" @@ -93,4 +94,9 @@ type Gum struct { // ╚══════════════════════════════════════════════════╝ // Style style.Options `cmd:"" help:"Style some text."` + + // Join provides a shell script interface for the lipgloss JoinHorizontal + // and JoinVertical commands. + // + Join join.Options `cmd:"" help:"Join text horizontally or vertically"` } diff --git a/style/align.go b/internal/decode/align.go similarity index 63% rename from style/align.go rename to internal/decode/align.go index f94f77e..3b97919 100644 --- a/style/align.go +++ b/internal/decode/align.go @@ -1,9 +1,9 @@ -package style +package decode import "github.com/charmbracelet/lipgloss" -// align maps strings to `lipgloss.Position`s -var align = map[string]lipgloss.Position{ +// Align maps strings to `lipgloss.Position`s +var Align = map[string]lipgloss.Position{ "center": lipgloss.Center, "left": lipgloss.Left, "top": lipgloss.Top, diff --git a/join/command.go b/join/command.go new file mode 100644 index 0000000..047083b --- /dev/null +++ b/join/command.go @@ -0,0 +1,17 @@ +package join + +import ( + "fmt" + + "github.com/charmbracelet/gum/internal/decode" + "github.com/charmbracelet/lipgloss" +) + +// Run is the command-line interface for the joining strings through lipgloss. +func (o Options) Run() { + join := lipgloss.JoinHorizontal + if o.Vertical { + join = lipgloss.JoinVertical + } + fmt.Println(join(decode.Align[o.Align], o.Text...)) +} diff --git a/join/options.go b/join/options.go new file mode 100644 index 0000000..591c88e --- /dev/null +++ b/join/options.go @@ -0,0 +1,10 @@ +package join + +// Options is the set +type Options struct { + Text []string `arg:"" help:"Text to join."` + + Align string `help:"Text alignment" enum:"left,center,right,bottom,middle,top" default:"left"` + Horizontal bool `help:"Join (potentially multi-line) strings horizontally"` + Vertical bool `help:"Join (potentially multi-line) strings vertically"` +} diff --git a/main.go b/main.go index 3dff410..5b61952 100644 --- a/main.go +++ b/main.go @@ -35,6 +35,7 @@ func main() { gum.Style.Run() case "style ": gum.Style.Run() - case "layout": + case "join ": + gum.Join.Run() } } diff --git a/style/style.go b/style/command.go similarity index 90% rename from style/style.go rename to style/command.go index be78fcb..b5d5bb2 100644 --- a/style/style.go +++ b/style/command.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + "github.com/charmbracelet/gum/internal/decode" "github.com/charmbracelet/lipgloss" ) @@ -17,7 +18,7 @@ func (o Options) Run() { Background(lipgloss.Color(o.Background)). BorderBackground(lipgloss.Color(o.BorderBackground)). BorderForeground(lipgloss.Color(o.BorderForeground)). - Align(align[o.Align]). + Align(decode.Align[o.Align]). Bold(o.Bold). Border(border[o.Border]). Margin(parseMargin(o.Margin)).