mirror of
https://github.com/charmbracelet/gum
synced 2024-06-07 16:22:17 +02:00
refactor: add package comments describing behavior
This commit is contained in:
parent
67f923de35
commit
5de4df66d2
|
@ -1,3 +1,14 @@
|
||||||
|
// Package choose provides an interface to choose one option from a given list
|
||||||
|
// of options. The options can be provided as (new-line separated) stdin or a
|
||||||
|
// list of arguments.
|
||||||
|
//
|
||||||
|
// It is different from the filter command as it does not provide a fuzzy
|
||||||
|
// finding input, so it is best used for smaller lists of options.
|
||||||
|
//
|
||||||
|
// Let's pick from a list of gum flavors:
|
||||||
|
//
|
||||||
|
// $ gum choose "Strawberry" "Banana" "Cherry"
|
||||||
|
//
|
||||||
package choose
|
package choose
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
// Package filter provides a fuzzy searching text input to allow filtering a
|
||||||
|
// list of options to select one option.
|
||||||
|
//
|
||||||
|
// By default it will list all the files (recursively) in the current directory
|
||||||
|
// for the user to choose one, but the script (or user) can provide different
|
||||||
|
// new-line separated options to choose from.
|
||||||
|
//
|
||||||
|
// I.e. let's pick from a list of gum flavors:
|
||||||
|
//
|
||||||
|
// $ cat flavors.text | gum filter
|
||||||
|
//
|
||||||
package filter
|
package filter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
152
gum.go
152
gum.go
|
@ -13,25 +13,18 @@ import (
|
||||||
|
|
||||||
// Gum is the command-line interface for Gum.
|
// Gum is the command-line interface for Gum.
|
||||||
type Gum struct {
|
type Gum struct {
|
||||||
// Input provides a shell script interface for the text input bubble.
|
// Choose provides an interface to choose one option from a given list of
|
||||||
// https://github.com/charmbracelet/bubbles/tree/master/textinput
|
// options. The options can be provided as (new-line separated) stdin or a
|
||||||
|
// list of arguments.
|
||||||
//
|
//
|
||||||
// It can be used to prompt the user for some input. The text the user
|
// It is different from the filter command as it does not provide a fuzzy
|
||||||
// entered will be sent to stdout.
|
// finding input, so it is best used for smaller lists of options.
|
||||||
//
|
//
|
||||||
// $ gum input --placeholder "What's your favorite gum?" > answer.text
|
// Let's pick from a list of gum flavors:
|
||||||
//
|
//
|
||||||
Input input.Options `cmd:"" help:"Prompt for some input"`
|
// $ gum choose "Strawberry" "Banana" "Cherry"
|
||||||
|
|
||||||
// Write provides a shell script interface for the text area bubble.
|
|
||||||
// https://github.com/charmbracelet/bubbles/tree/master/textarea
|
|
||||||
//
|
//
|
||||||
// It can be used to ask the user to write some long form of text
|
Choose choose.Options `cmd:"" help:"Choose an option from a list of choices"`
|
||||||
// (multi-line) input. The text the user entered will be sent to stdout.
|
|
||||||
//
|
|
||||||
// $ gum write > output.text
|
|
||||||
//
|
|
||||||
Write write.Options `cmd:"" help:"Prompt for long-form text"`
|
|
||||||
|
|
||||||
// Filter provides a fuzzy searching text input to allow filtering a list of
|
// Filter provides a fuzzy searching text input to allow filtering a list of
|
||||||
// options to select one option.
|
// options to select one option.
|
||||||
|
@ -46,68 +39,15 @@ type Gum struct {
|
||||||
//
|
//
|
||||||
Filter filter.Options `cmd:"" help:"Filter items from a list"`
|
Filter filter.Options `cmd:"" help:"Filter items from a list"`
|
||||||
|
|
||||||
// Choose provides an interface to choose one option from a given list of
|
// Input provides a shell script interface for the text input bubble.
|
||||||
// options. The options can be provided as (new-line separated) stdin or a
|
// https://github.com/charmbracelet/bubbles/tree/master/textinput
|
||||||
// list of arguments.
|
|
||||||
//
|
//
|
||||||
// It is different from the filter command as it does not provide a fuzzy
|
// It can be used to prompt the user for some input. The text the user
|
||||||
// finding input, so it is best used for smaller lists of options.
|
// entered will be sent to stdout.
|
||||||
//
|
//
|
||||||
// Let's pick from a list of gum flavors:
|
// $ gum input --placeholder "What's your favorite gum?" > answer.text
|
||||||
//
|
//
|
||||||
// $ gum choose "Strawberry" "Banana" "Cherry"
|
Input input.Options `cmd:"" help:"Prompt for some input"`
|
||||||
//
|
|
||||||
Choose choose.Options `cmd:"" help:"Choose an option from a list of choices"`
|
|
||||||
|
|
||||||
// Spin provides a shell script interface for the spinner bubble.
|
|
||||||
// https://github.com/charmbracelet/bubbles/tree/master/spinner
|
|
||||||
//
|
|
||||||
// It is useful for displaying that some task is running in the background
|
|
||||||
// while consuming it's output so that it is not shown to the user.
|
|
||||||
//
|
|
||||||
// For example, let's do a long running task:
|
|
||||||
// $ sleep 5
|
|
||||||
//
|
|
||||||
// We can simply prepend a spinner to this task to show it to the user,
|
|
||||||
// while performing the task / command in the background.
|
|
||||||
//
|
|
||||||
// $ gum spin -t "Taking a nap..." -- sleep 5
|
|
||||||
//
|
|
||||||
// The spinner will automatically exit when the task is complete.
|
|
||||||
Spin spin.Options `cmd:"" help:"Display spinner while running a command"`
|
|
||||||
|
|
||||||
// Progress provides a shell script interface for the progress bubble.
|
|
||||||
// https://github.com/charmbracelet/bubbles/tree/master/progress
|
|
||||||
//
|
|
||||||
// It's useful for indicating that something is happening in the background
|
|
||||||
// that will end after some set time.
|
|
||||||
//
|
|
||||||
Progress progress.Options `cmd:"" help:"Display a progress bar for a certain time"`
|
|
||||||
|
|
||||||
// Style provides a shell script interface for Lip Gloss.
|
|
||||||
// https://github.com/charmbracelet/lipgloss
|
|
||||||
//
|
|
||||||
// It allows you to use Lip Gloss to style text without needing to use Go.
|
|
||||||
// All of the styling options are available as flags.
|
|
||||||
//
|
|
||||||
// Let's make some text glamorous using bash:
|
|
||||||
//
|
|
||||||
// $ gum style \
|
|
||||||
// --foreground "#FF06B7" --border "double" --align "center" \
|
|
||||||
// --width 50 --margin 2 --padding "2 4" \
|
|
||||||
// "Bubble Gum (1¢)" "So sweet and so fresh\!"
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// ╔══════════════════════════════════════════════════╗
|
|
||||||
// ║ ║
|
|
||||||
// ║ ║
|
|
||||||
// ║ Bubble Gum (1¢) ║
|
|
||||||
// ║ So sweet and so fresh! ║
|
|
||||||
// ║ ║
|
|
||||||
// ║ ║
|
|
||||||
// ╚══════════════════════════════════════════════════╝
|
|
||||||
//
|
|
||||||
Style style.Options `cmd:"" help:"Apply coloring, borders, spacing to text"`
|
|
||||||
|
|
||||||
// Join provides a shell script interface for the lipgloss JoinHorizontal
|
// Join provides a shell script interface for the lipgloss JoinHorizontal
|
||||||
// and JoinVertical commands. It allows you to join multi-line text to
|
// and JoinVertical commands. It allows you to join multi-line text to
|
||||||
|
@ -126,4 +66,68 @@ type Gum struct {
|
||||||
// ╚══════════════════════╝╚═════════════╝
|
// ╚══════════════════════╝╚═════════════╝
|
||||||
//
|
//
|
||||||
Join join.Options `cmd:"" help:"Join text vertically or horizontally"`
|
Join join.Options `cmd:"" help:"Join text vertically or horizontally"`
|
||||||
|
|
||||||
|
// Progress provides a shell script interface for the progress bubble.
|
||||||
|
// https://github.com/charmbracelet/bubbles/tree/master/progress
|
||||||
|
//
|
||||||
|
// It's useful for indicating that something is happening in the background
|
||||||
|
// that will end after some set time. It can be passed an increment value
|
||||||
|
// which specifies how much the progress bar should move every interval,
|
||||||
|
// which can also be configured.
|
||||||
|
//
|
||||||
|
// $ gum progress --increment 0.1 --interval 250ms
|
||||||
|
//
|
||||||
|
Progress progress.Options `cmd:"" help:"Display a progress bar for a certain time"`
|
||||||
|
|
||||||
|
// Spin provides a shell script interface for the spinner bubble.
|
||||||
|
// https://github.com/charmbracelet/bubbles/tree/master/spinner
|
||||||
|
//
|
||||||
|
// It is useful for displaying that some task is running in the background
|
||||||
|
// while consuming it's output so that it is not shown to the user.
|
||||||
|
//
|
||||||
|
// For example, let's do a long running task: $ sleep 5
|
||||||
|
//
|
||||||
|
// We can simply prepend a spinner to this task to show it to the user,
|
||||||
|
// while performing the task / command in the background.
|
||||||
|
//
|
||||||
|
// $ gum spin -t "Taking a nap..." -- sleep 5
|
||||||
|
//
|
||||||
|
// The spinner will automatically exit when the task is complete.
|
||||||
|
//
|
||||||
|
Spin spin.Options `cmd:"" help:"Display spinner while running a command"`
|
||||||
|
|
||||||
|
// Style provides a shell script interface for Lip Gloss.
|
||||||
|
// https://github.com/charmbracelet/lipgloss
|
||||||
|
//
|
||||||
|
// It allows you to use Lip Gloss to style text without needing to use Go.
|
||||||
|
// All of the styling options are available as flags.
|
||||||
|
//
|
||||||
|
// Let's make some text glamorous using bash:
|
||||||
|
//
|
||||||
|
// $ gum style \
|
||||||
|
// --foreground 212 --border double --align center \
|
||||||
|
// --width 50 --margin 2 --padding "2 4" \
|
||||||
|
// "Bubble Gum (1¢)" "So sweet and so fresh\!"
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// ╔══════════════════════════════════════════════════╗
|
||||||
|
// ║ ║
|
||||||
|
// ║ ║
|
||||||
|
// ║ Bubble Gum (1¢) ║
|
||||||
|
// ║ So sweet and so fresh! ║
|
||||||
|
// ║ ║
|
||||||
|
// ║ ║
|
||||||
|
// ╚══════════════════════════════════════════════════╝
|
||||||
|
//
|
||||||
|
Style style.Options `cmd:"" help:"Apply coloring, borders, spacing to text"`
|
||||||
|
|
||||||
|
// Write provides a shell script interface for the text area bubble.
|
||||||
|
// https://github.com/charmbracelet/bubbles/tree/master/textarea
|
||||||
|
//
|
||||||
|
// It can be used to ask the user to write some long form of text
|
||||||
|
// (multi-line) input. The text the user entered will be sent to stdout.
|
||||||
|
//
|
||||||
|
// $ gum write > output.text
|
||||||
|
//
|
||||||
|
Write write.Options `cmd:"" help:"Prompt for long-form text"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
// Package input provides a shell script interface for the text input bubble.
|
||||||
|
// https://github.com/charmbracelet/bubbles/tree/master/textinput
|
||||||
|
//
|
||||||
|
// It can be used to prompt the user for some input. The text the user entered
|
||||||
|
// will be sent to stdout.
|
||||||
|
//
|
||||||
|
// $ gum input --placeholder "What's your favorite gum?" > answer.text
|
||||||
|
//
|
||||||
package input
|
package input
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,3 +1,19 @@
|
||||||
|
// Package join provides a shell script interface for the lipgloss
|
||||||
|
// JoinHorizontal and JoinVertical commands. It allows you to join multi-line
|
||||||
|
// text to build different layouts.
|
||||||
|
//
|
||||||
|
// For example, you can place two bordered boxes next to each other: Note: We
|
||||||
|
// wrap the variable in quotes to ensure the new lines are part of a single
|
||||||
|
// argument. Otherwise, the command won't work as expected.
|
||||||
|
//
|
||||||
|
// $ gum join --horizontal "$BUBBLE_BOX" "$GUM_BOX"
|
||||||
|
//
|
||||||
|
// ╔══════════════════════╗╔═════════════╗
|
||||||
|
// ║ ║║ ║
|
||||||
|
// ║ Bubble ║║ Gum ║
|
||||||
|
// ║ ║║ ║
|
||||||
|
// ╚══════════════════════╝╚═════════════╝
|
||||||
|
//
|
||||||
package join
|
package join
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package join
|
package join
|
||||||
|
|
||||||
// Options is the set
|
// Options is the set of options that can configure a join.
|
||||||
type Options struct {
|
type Options struct {
|
||||||
Text []string `arg:"" help:"Text to join."`
|
Text []string `arg:"" help:"Text to join."`
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
|
// Package progress provides a shell script interface for the progress bubble.
|
||||||
|
// https://github.com/charmbracelet/bubbles/tree/master/progress
|
||||||
|
//
|
||||||
|
// It's useful for indicating that something is happening in the background
|
||||||
|
// that will end after some set time. It can be passed an increment value which
|
||||||
|
// specifies how much the progress bar should move every interval, which can
|
||||||
|
// also be configured.
|
||||||
|
//
|
||||||
|
// $ gum progress --increment 0.1 --interval 250ms
|
||||||
|
//
|
||||||
package progress
|
package progress
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
15
spin/spin.go
15
spin/spin.go
|
@ -1,3 +1,18 @@
|
||||||
|
// Package spin provides a shell script interface for the spinner bubble.
|
||||||
|
// https://github.com/charmbracelet/bubbles/tree/master/spinner
|
||||||
|
//
|
||||||
|
// It is useful for displaying that some task is running in the background
|
||||||
|
// while consuming it's output so that it is not shown to the user.
|
||||||
|
//
|
||||||
|
// For example, let's do a long running task: $ sleep 5
|
||||||
|
//
|
||||||
|
// We can simply prepend a spinner to this task to show it to the user, while
|
||||||
|
// performing the task / command in the background.
|
||||||
|
//
|
||||||
|
// $ gum spin -t "Taking a nap..." -- sleep 5
|
||||||
|
//
|
||||||
|
// The spinner will automatically exit when the task is complete.
|
||||||
|
//
|
||||||
package spin
|
package spin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,3 +1,26 @@
|
||||||
|
// Package style provides a shell script interface for Lip Gloss.
|
||||||
|
// https://github.com/charmbracelet/lipgloss
|
||||||
|
//
|
||||||
|
// It allows you to use Lip Gloss to style text without needing to use Go. All
|
||||||
|
// of the styling options are available as flags.
|
||||||
|
//
|
||||||
|
// Let's make some text glamorous using bash:
|
||||||
|
//
|
||||||
|
// $ gum style \
|
||||||
|
// --foreground 212 --border double --align center \
|
||||||
|
// --width 50 --margin 2 --padding "2 4" \
|
||||||
|
// "Bubble Gum (1¢)" "So sweet and so fresh\!"
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// ╔══════════════════════════════════════════════════╗
|
||||||
|
// ║ ║
|
||||||
|
// ║ ║
|
||||||
|
// ║ Bubble Gum (1¢) ║
|
||||||
|
// ║ So sweet and so fresh! ║
|
||||||
|
// ║ ║
|
||||||
|
// ║ ║
|
||||||
|
// ╚══════════════════════════════════════════════════╝
|
||||||
|
//
|
||||||
package style
|
package style
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
26
style/lipgloss.go
Normal file
26
style/lipgloss.go
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
package style
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/charmbracelet/gum/internal/decode"
|
||||||
|
"github.com/charmbracelet/lipgloss"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ToLipgloss takes a Styles flag set and returns the corresponding
|
||||||
|
// lipgloss.Style.
|
||||||
|
func (s Styles) ToLipgloss() lipgloss.Style {
|
||||||
|
return lipgloss.NewStyle().
|
||||||
|
Background(lipgloss.Color(s.Background)).
|
||||||
|
Foreground(lipgloss.Color(s.Foreground)).
|
||||||
|
BorderBackground(lipgloss.Color(s.BorderBackground)).
|
||||||
|
BorderForeground(lipgloss.Color(s.BorderForeground)).
|
||||||
|
Align(decode.Align[s.Align]).
|
||||||
|
Border(border[s.Border]).
|
||||||
|
Height(s.Height).
|
||||||
|
Width(s.Width).
|
||||||
|
Margin(parseMargin(s.Margin)).
|
||||||
|
Padding(parsePadding(s.Padding)).
|
||||||
|
Bold(s.Bold).
|
||||||
|
Faint(s.Faint).
|
||||||
|
Italic(s.Italic).
|
||||||
|
Strikethrough(s.Strikethrough)
|
||||||
|
}
|
|
@ -2,6 +2,36 @@ package style
|
||||||
|
|
||||||
// Options is the customization options for the style command.
|
// Options is the customization options for the style command.
|
||||||
type Options struct {
|
type Options struct {
|
||||||
Text []string `arg:"" optional:"" help:"Text to style"`
|
Text []string `arg:"" optional:"" help:"Text to which to apply the style"`
|
||||||
Style Styles `help:"Style to apply" embed:""`
|
Style Styles `embed:""`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Styles is a flag set of possible styles.
|
||||||
|
//
|
||||||
|
// It corresponds to the available options in the lipgloss.Style struct.
|
||||||
|
//
|
||||||
|
// This flag set is used in other parts of the application to embed styles for
|
||||||
|
// components, through embedding and prefixing.
|
||||||
|
type Styles struct {
|
||||||
|
// Colors
|
||||||
|
Background string `help:"Background color of the ${name=element}" default:"${defaultBackground}" hidden:"" group:"Style Flags"`
|
||||||
|
Foreground string `help:"color of the ${name=element}" default:"${defaultForeground}" group:"Style Flags"`
|
||||||
|
|
||||||
|
// Border
|
||||||
|
Border string `help:"Border style to apply" enum:"none,hidden,normal,rounded,thick,double" default:"none" hidden:"" group:"Style Flags"`
|
||||||
|
BorderBackground string `help:"Border background color" hidden:"" group:"Style Flags"`
|
||||||
|
BorderForeground string `help:"Border foreground color" hidden:"" group:"Style Flags"`
|
||||||
|
|
||||||
|
// Layout
|
||||||
|
Align string `help:"Text alignment" enum:"left,center,right,bottom,middle,top" default:"left" hidden:"" group:"Style Flags"`
|
||||||
|
Height int `help:"Height of output" hidden:"" group:"Style Flags"`
|
||||||
|
Width int `help:"Width of output" hidden:"" group:"Style Flags"`
|
||||||
|
Margin string `help:"Margin to apply around the text." default:"0 0" hidden:"" group:"Style Flags"`
|
||||||
|
Padding string `help:"Padding to apply around the text." default:"0 0" hidden:""`
|
||||||
|
|
||||||
|
// Format
|
||||||
|
Bold bool `help:"Apply bold formatting" hidden:"" group:"Style Flags"`
|
||||||
|
Faint bool `help:"Apply faint formatting" hidden:"" group:"Style Flags"`
|
||||||
|
Italic bool `help:"Apply italic formatting" hidden:"" group:"Style Flags"`
|
||||||
|
Strikethrough bool `help:"Apply strikethrough formatting" hidden:"" group:"Style Flags"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
package style
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/charmbracelet/gum/internal/decode"
|
|
||||||
"github.com/charmbracelet/lipgloss"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Styles is a flag set of possible styles.
|
|
||||||
// It corresponds to the available options in the lipgloss.Style struct.
|
|
||||||
type Styles struct {
|
|
||||||
// Colors
|
|
||||||
Background string `help:"Background color of the ${name=element}" default:"${defaultBackground}" hidden:"" group:"Style Flags"`
|
|
||||||
Foreground string `help:"color of the ${name=element}" default:"${defaultForeground}" group:"Style Flags"`
|
|
||||||
|
|
||||||
// Border
|
|
||||||
Border string `help:"Border style to apply" enum:"none,hidden,normal,rounded,thick,double" default:"none" hidden:"" group:"Style Flags"`
|
|
||||||
BorderBackground string `help:"Border background color" hidden:"" group:"Style Flags"`
|
|
||||||
BorderForeground string `help:"Border foreground color" hidden:"" group:"Style Flags"`
|
|
||||||
|
|
||||||
// Layout
|
|
||||||
Align string `help:"Text alignment" enum:"left,center,right,bottom,middle,top" default:"left" hidden:"" group:"Style Flags"`
|
|
||||||
Height int `help:"Height of output" hidden:"" group:"Style Flags"`
|
|
||||||
Width int `help:"Width of output" hidden:"" group:"Style Flags"`
|
|
||||||
Margin string `help:"Margin to apply around the text." default:"0 0" hidden:"" group:"Style Flags"`
|
|
||||||
Padding string `help:"Padding to apply around the text." default:"0 0" hidden:""`
|
|
||||||
|
|
||||||
// Format
|
|
||||||
Bold bool `help:"Apply bold formatting" hidden:"" group:"Style Flags"`
|
|
||||||
Faint bool `help:"Apply faint formatting" hidden:"" group:"Style Flags"`
|
|
||||||
Italic bool `help:"Apply italic formatting" hidden:"" group:"Style Flags"`
|
|
||||||
Strikethrough bool `help:"Apply strikethrough formatting" hidden:"" group:"Style Flags"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ToLipgloss takes a Styles flag set and returns the corresponding
|
|
||||||
// lipgloss.Style.
|
|
||||||
func (s Styles) ToLipgloss() lipgloss.Style {
|
|
||||||
return lipgloss.NewStyle().
|
|
||||||
Background(lipgloss.Color(s.Background)).
|
|
||||||
Foreground(lipgloss.Color(s.Foreground)).
|
|
||||||
BorderBackground(lipgloss.Color(s.BorderBackground)).
|
|
||||||
BorderForeground(lipgloss.Color(s.BorderForeground)).
|
|
||||||
Align(decode.Align[s.Align]).
|
|
||||||
Border(border[s.Border]).
|
|
||||||
Height(s.Height).
|
|
||||||
Width(s.Width).
|
|
||||||
Margin(parseMargin(s.Margin)).
|
|
||||||
Padding(parsePadding(s.Padding)).
|
|
||||||
Bold(s.Bold).
|
|
||||||
Faint(s.Faint).
|
|
||||||
Italic(s.Italic).
|
|
||||||
Strikethrough(s.Strikethrough)
|
|
||||||
}
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
// Package write provides a shell script interface for the text area bubble.
|
||||||
|
// https://github.com/charmbracelet/bubbles/tree/master/textarea
|
||||||
|
//
|
||||||
|
// It can be used to ask the user to write some long form of text
|
||||||
|
// (multi-line) input. The text the user entered will be sent to stdout.
|
||||||
|
//
|
||||||
|
// $ gum write > output.text
|
||||||
|
//
|
||||||
package write
|
package write
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
Loading…
Reference in a new issue