about summary refs log tree commit diff stats
path: root/lib/ui/textinput.go
diff options
context:
space:
mode:
authorReto Brunner <reto@labrat.space>2020-05-27 07:37:02 +0200
committerReto Brunner <reto@labrat.space>2020-05-27 07:57:10 +0200
commit0f78f06610c0e8887aba2ae50e99b86477a384b3 (patch)
treeff4cd6581d3af0911954a37550602366d2bb0e2f /lib/ui/textinput.go
parent6c4ed3cfe2fe66a1e5f26c404ea90e048142db72 (diff)
downloadaerc-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.go32
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)