diff --git a/write/command.go b/write/command.go index e0bb933..d91a71a 100644 --- a/write/command.go +++ b/write/command.go @@ -47,7 +47,11 @@ func (o Options) Run() error { a.SetHeight(o.Height) a.SetValue(o.Value) - p := tea.NewProgram(model{textarea: a}, tea.WithOutput(os.Stderr)) + p := tea.NewProgram(model{ + textarea: a, + header: o.Header, + headerStyle: o.HeaderStyle.ToLipgloss(), + }, tea.WithOutput(os.Stderr)) tm, err := p.StartReturningModel() if err != nil { return fmt.Errorf("failed to run write: %w", err) diff --git a/write/options.go b/write/options.go index 53ef1c9..59eb5c0 100644 --- a/write/options.go +++ b/write/options.go @@ -6,6 +6,7 @@ import "github.com/charmbracelet/gum/style" type Options struct { Width int `help:"Text area width" default:"50" env:"GUM_WRITE_WIDTH"` Height int `help:"Text area height" default:"5" env:"GUM_WRITE_HEIGHT"` + Header string `help:"Header value" default:"" env:"GUM_WRITE_HEADER"` Placeholder string `help:"Placeholder value" default:"Write something..." env:"GUM_WRITE_PLACEHOLDER"` Prompt string `help:"Prompt to display" default:"┃ " env:"GUM_WRITE_PROMPT"` ShowCursorLine bool `help:"Show cursor line" default:"false" env:"GUM_WRITE_SHOW_CURSOR_LINE"` @@ -19,6 +20,7 @@ type Options struct { CursorStyle style.Styles `embed:"" prefix:"cursor." set:"defaultForeground=212" envprefix:"GUM_WRITE_CURSOR_"` EndOfBufferStyle style.Styles `embed:"" prefix:"end-of-buffer." set:"defaultForeground=0" envprefix:"GUM_WRITE_END_OF_BUFFER_"` LineNumberStyle style.Styles `embed:"" prefix:"line-number." set:"defaultForeground=7" envprefix:"GUM_WRITE_LINE_NUMBER_"` + HeaderStyle style.Styles `embed:"" prefix:"header." set:"defaultForeground=240" envprefix:"GUM_WRITE_HEADER_"` PlaceholderStyle style.Styles `embed:"" prefix:"placeholder." set:"defaultForeground=240" envprefix:"GUM_WRITE_PLACEHOLDER_"` PromptStyle style.Styles `embed:"" prefix:"prompt." set:"defaultForeground=7" envprefix:"GUM_WRITE_PROMPT_"` } diff --git a/write/write.go b/write/write.go index 9b43100..e0ce696 100644 --- a/write/write.go +++ b/write/write.go @@ -11,12 +11,15 @@ package write import ( "github.com/charmbracelet/bubbles/textarea" tea "github.com/charmbracelet/bubbletea" + "github.com/charmbracelet/lipgloss" ) type model struct { - aborted bool - quitting bool - textarea textarea.Model + aborted bool + header string + headerStyle lipgloss.Style + quitting bool + textarea textarea.Model } func (m model) Init() tea.Cmd { return textarea.Blink } @@ -24,6 +27,13 @@ func (m model) View() string { if m.quitting { return "" } + + // Display the header above the text area if it is not empty. + if m.header != "" { + header := m.headerStyle.Render(m.header) + return lipgloss.JoinVertical(lipgloss.Left, header, m.textarea.View()) + } + return m.textarea.View() } func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {