diff options
author | Reto Brunner <reto@labrat.space> | 2020-05-27 07:37:02 +0200 |
---|---|---|
committer | Reto Brunner <reto@labrat.space> | 2020-05-27 07:57:10 +0200 |
commit | 0f78f06610c0e8887aba2ae50e99b86477a384b3 (patch) | |
tree | ff4cd6581d3af0911954a37550602366d2bb0e2f /lib/ui/textinput.go | |
parent | 6c4ed3cfe2fe66a1e5f26c404ea90e048142db72 (diff) | |
download | aerc-0f78f06610c0e8887aba2ae50e99b86477a384b3.tar.gz |
Add Style configuration
The following functionalities are added to configure aerc ui styles. - Read stylesets from file with very basic fnmatch wildcard matching - Add default styleset - Support different stylesets as part of UiConfig allowing contextual styles. - Move widgets/ui elements to use the stylesets. - Add configuration manual for the styleset
Diffstat (limited to 'lib/ui/textinput.go')
-rw-r--r-- | lib/ui/textinput.go | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/lib/ui/textinput.go b/lib/ui/textinput.go index f6b0c72..2445065 100644 --- a/lib/ui/textinput.go +++ b/lib/ui/textinput.go @@ -6,6 +6,8 @@ import ( "github.com/gdamore/tcell" "github.com/mattn/go-runewidth" + + "git.sr.ht/~sircmpwn/aerc/config" ) // TODO: Attach history providers @@ -27,16 +29,18 @@ type TextInput struct { completeIndex int completeDelay time.Duration completeDebouncer *time.Timer + uiConfig config.UIConfig } // Creates a new TextInput. TextInputs will render a "textbox" in the entire // context they're given, and process keypresses to build a string from user // input. -func NewTextInput(text string) *TextInput { +func NewTextInput(text string, ui config.UIConfig) *TextInput { return &TextInput{ - cells: -1, - text: []rune(text), - index: len([]rune(text)), + cells: -1, + text: []rune(text), + index: len([]rune(text)), + uiConfig: ui, } } @@ -87,16 +91,18 @@ func (ti *TextInput) Draw(ctx *Context) { ti.ensureScroll() } ti.ctx = ctx // gross - ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', tcell.StyleDefault) + + defaultStyle := ti.uiConfig.GetStyle(config.STYLE_DEFAULT) + ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', defaultStyle) text := ti.text[scroll:] sindex := ti.index - scroll if ti.password { - x := ctx.Printf(0, 0, tcell.StyleDefault, "%s", ti.prompt) + x := ctx.Printf(0, 0, defaultStyle, "%s", ti.prompt) cells := runewidth.StringWidth(string(text)) - ctx.Fill(x, 0, cells, 1, '*', tcell.StyleDefault) + ctx.Fill(x, 0, cells, 1, '*', defaultStyle) } else { - ctx.Printf(0, 0, tcell.StyleDefault, "%s%s", ti.prompt, string(text)) + ctx.Printf(0, 0, defaultStyle, "%s%s", ti.prompt, string(text)) } cells := runewidth.StringWidth(string(text[:sindex]) + ti.prompt) if ti.focus { @@ -126,6 +132,7 @@ func (ti *TextInput) drawPopover(ctx *Context) { ti.Set(stem + ti.StringRight()) ti.Invalidate() }, + uiConfig: ti.uiConfig, } width := maxLen(ti.completions) + 3 height := len(ti.completions) @@ -353,6 +360,7 @@ type completions struct { onSelect func(int) onExec func() onStem func(string) + uiConfig config.UIConfig } func maxLen(ss []string) int { @@ -367,10 +375,10 @@ func maxLen(ss []string) int { } func (c *completions) Draw(ctx *Context) { - bg := tcell.StyleDefault - sel := tcell.StyleDefault.Reverse(true) - gutter := tcell.StyleDefault - pill := tcell.StyleDefault.Reverse(true) + bg := c.uiConfig.GetStyle(config.STYLE_COMPLETION_DEFAULT) + gutter := c.uiConfig.GetStyle(config.STYLE_COMPLETION_GUTTER) + pill := c.uiConfig.GetStyle(config.STYLE_COMPLETION_PILL) + sel := c.uiConfig.GetStyleSelected(config.STYLE_COMPLETION_DEFAULT) ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', bg) |