summaryrefslogtreecommitdiffstats
path: root/src/tui
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2023-05-14 18:28:46 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2023-05-16 23:24:05 +0900
commit5a391024059e055f9e21b997ff77e1b4ba5302c5 (patch)
tree0e9195c80598cc1b34e45c13882f79495859a352 /src/tui
parent94999101e358385f3ca67a6ec9512f549196b802 (diff)
Allow customizing the color of preview scrollbar via 'preview-scrollbar'
Diffstat (limited to 'src/tui')
-rw-r--r--src/tui/tui.go294
1 files changed, 154 insertions, 140 deletions
diff --git a/src/tui/tui.go b/src/tui/tui.go
index 73ed0c97..5fd27d0f 100644
--- a/src/tui/tui.go
+++ b/src/tui/tui.go
@@ -253,29 +253,31 @@ func (p ColorPair) MergeNonDefault(other ColorPair) ColorPair {
}
type ColorTheme struct {
- Colored bool
- Input ColorAttr
- Disabled ColorAttr
- Fg ColorAttr
- Bg ColorAttr
- PreviewFg ColorAttr
- PreviewBg ColorAttr
- DarkBg ColorAttr
- Gutter ColorAttr
- Prompt ColorAttr
- Match ColorAttr
- Current ColorAttr
- CurrentMatch ColorAttr
- Spinner ColorAttr
- Info ColorAttr
- Cursor ColorAttr
- Selected ColorAttr
- Header ColorAttr
- Separator ColorAttr
- Scrollbar ColorAttr
- Border ColorAttr
- BorderLabel ColorAttr
- PreviewLabel ColorAttr
+ Colored bool
+ Input ColorAttr
+ Disabled ColorAttr
+ Fg ColorAttr
+ Bg ColorAttr
+ PreviewFg ColorAttr
+ PreviewBg ColorAttr
+ DarkBg ColorAttr
+ Gutter ColorAttr
+ Prompt ColorAttr
+ Match ColorAttr
+ Current ColorAttr
+ CurrentMatch ColorAttr
+ Spinner ColorAttr
+ Info ColorAttr
+ Cursor ColorAttr
+ Selected ColorAttr
+ Header ColorAttr
+ Separator ColorAttr
+ Scrollbar ColorAttr
+ Border ColorAttr
+ PreviewBorder ColorAttr
+ PreviewScrollbar ColorAttr
+ BorderLabel ColorAttr
+ PreviewLabel ColorAttr
}
type Event struct {
@@ -508,57 +510,61 @@ var (
func EmptyTheme() *ColorTheme {
return &ColorTheme{
- Colored: true,
- Input: ColorAttr{colUndefined, AttrUndefined},
- Fg: ColorAttr{colUndefined, AttrUndefined},
- Bg: ColorAttr{colUndefined, AttrUndefined},
- DarkBg: ColorAttr{colUndefined, AttrUndefined},
- Prompt: ColorAttr{colUndefined, AttrUndefined},
- Match: ColorAttr{colUndefined, AttrUndefined},
- Current: ColorAttr{colUndefined, AttrUndefined},
- CurrentMatch: ColorAttr{colUndefined, AttrUndefined},
- Spinner: ColorAttr{colUndefined, AttrUndefined},
- Info: ColorAttr{colUndefined, AttrUndefined},
- Cursor: ColorAttr{colUndefined, AttrUndefined},
- Selected: ColorAttr{colUndefined, AttrUndefined},
- Header: ColorAttr{colUndefined, AttrUndefined},
- Border: ColorAttr{colUndefined, AttrUndefined},
- BorderLabel: ColorAttr{colUndefined, AttrUndefined},
- Disabled: ColorAttr{colUndefined, AttrUndefined},
- PreviewFg: ColorAttr{colUndefined, AttrUndefined},
- PreviewBg: ColorAttr{colUndefined, AttrUndefined},
- Gutter: ColorAttr{colUndefined, AttrUndefined},
- PreviewLabel: ColorAttr{colUndefined, AttrUndefined},
- Separator: ColorAttr{colUndefined, AttrUndefined},
- Scrollbar: ColorAttr{colUndefined, AttrUndefined},
+ Colored: true,
+ Input: ColorAttr{colUndefined, AttrUndefined},
+ Fg: ColorAttr{colUndefined, AttrUndefined},
+ Bg: ColorAttr{colUndefined, AttrUndefined},
+ DarkBg: ColorAttr{colUndefined, AttrUndefined},
+ Prompt: ColorAttr{colUndefined, AttrUndefined},
+ Match: ColorAttr{colUndefined, AttrUndefined},
+ Current: ColorAttr{colUndefined, AttrUndefined},
+ CurrentMatch: ColorAttr{colUndefined, AttrUndefined},
+ Spinner: ColorAttr{colUndefined, AttrUndefined},
+ Info: ColorAttr{colUndefined, AttrUndefined},
+ Cursor: ColorAttr{colUndefined, AttrUndefined},
+ Selected: ColorAttr{colUndefined, AttrUndefined},
+ Header: ColorAttr{colUndefined, AttrUndefined},
+ Border: ColorAttr{colUndefined, AttrUndefined},
+ BorderLabel: ColorAttr{colUndefined, AttrUndefined},
+ Disabled: ColorAttr{colUndefined, AttrUndefined},
+ PreviewFg: ColorAttr{colUndefined, AttrUndefined},
+ PreviewBg: ColorAttr{colUndefined, AttrUndefined},
+ Gutter: ColorAttr{colUndefined, AttrUndefined},
+ PreviewBorder: ColorAttr{colUndefined, AttrUndefined},
+ PreviewScrollbar: ColorAttr{colUndefined, AttrUndefined},
+ PreviewLabel: ColorAttr{colUndefined, AttrUndefined},
+ Separator: ColorAttr{colUndefined, AttrUndefined},
+ Scrollbar: ColorAttr{colUndefined, AttrUndefined},
}
}
func NoColorTheme() *ColorTheme {
return &ColorTheme{
- Colored: false,
- Input: ColorAttr{colDefault, AttrUndefined},
- Fg: ColorAttr{colDefault, AttrUndefined},
- Bg: ColorAttr{colDefault, AttrUndefined},
- DarkBg: ColorAttr{colDefault, AttrUndefined},
- Prompt: ColorAttr{colDefault, AttrUndefined},
- Match: ColorAttr{colDefault, Underline},
- Current: ColorAttr{colDefault, Reverse},
- CurrentMatch: ColorAttr{colDefault, Reverse | Underline},
- Spinner: ColorAttr{colDefault, AttrUndefined},
- Info: ColorAttr{colDefault, AttrUndefined},
- Cursor: ColorAttr{colDefault, AttrUndefined},
- Selected: ColorAttr{colDefault, AttrUndefined},
- Header: ColorAttr{colDefault, AttrUndefined},
- Border: ColorAttr{colDefault, AttrUndefined},
- BorderLabel: ColorAttr{colDefault, AttrUndefined},
- Disabled: ColorAttr{colDefault, AttrUndefined},
- PreviewFg: ColorAttr{colDefault, AttrUndefined},
- PreviewBg: ColorAttr{colDefault, AttrUndefined},
- Gutter: ColorAttr{colDefault, AttrUndefined},
- PreviewLabel: ColorAttr{colDefault, AttrUndefined},
- Separator: ColorAttr{colDefault, AttrUndefined},
- Scrollbar: ColorAttr{colDefault, AttrUndefined},
+ Colored: false,
+ Input: ColorAttr{colDefault, AttrUndefined},
+ Fg: ColorAttr{colDefault, AttrUndefined},
+ Bg: ColorAttr{colDefault, AttrUndefined},
+ DarkBg: ColorAttr{colDefault, AttrUndefined},
+ Prompt: ColorAttr{colDefault, AttrUndefined},
+ Match: ColorAttr{colDefault, Underline},
+ Current: ColorAttr{colDefault, Reverse},
+ CurrentMatch: ColorAttr{colDefault, Reverse | Underline},
+ Spinner: ColorAttr{colDefault, AttrUndefined},
+ Info: ColorAttr{colDefault, AttrUndefined},
+ Cursor: ColorAttr{colDefault, AttrUndefined},
+ Selected: ColorAttr{colDefault, AttrUndefined},
+ Header: ColorAttr{colDefault, AttrUndefined},
+ Border: ColorAttr{colDefault, AttrUndefined},
+ BorderLabel: ColorAttr{colDefault, AttrUndefined},
+ Disabled: ColorAttr{colDefault, AttrUndefined},
+ PreviewFg: ColorAttr{colDefault, AttrUndefined},
+ PreviewBg: ColorAttr{colDefault, AttrUndefined},
+ Gutter: ColorAttr{colDefault, AttrUndefined},
+ PreviewBorder: ColorAttr{colDefault, AttrUndefined},
+ PreviewScrollbar: ColorAttr{colDefault, AttrUndefined},
+ PreviewLabel: ColorAttr{colDefault, AttrUndefined},
+ Separator: ColorAttr{colDefault, AttrUndefined},
+ Scrollbar: ColorAttr{colDefault, AttrUndefined},
}
}
@@ -569,79 +575,85 @@ func errorExit(message string) {
func init() {
Default16 = &ColorTheme{
- Colored: true,
- Input: ColorAttr{colDefault, AttrUndefined},
- Fg: ColorAttr{colDefault, AttrUndefined},
- Bg: ColorAttr{colDefault, AttrUndefined},
- DarkBg: ColorAttr{colBlack, AttrUndefined},
- Prompt: ColorAttr{colBlue, AttrUndefined},
- Match: ColorAttr{colGreen, AttrUndefined},
- Current: ColorAttr{colYellow, AttrUndefined},
- CurrentMatch: ColorAttr{colGreen, AttrUndefined},
- Spinner: ColorAttr{colGreen, AttrUndefined},
- Info: ColorAttr{colWhite, AttrUndefined},
- Cursor: ColorAttr{colRed, AttrUndefined},
- Selected: ColorAttr{colMagenta, AttrUndefined},
- Header: ColorAttr{colCyan, AttrUndefined},
- Border: ColorAttr{colBlack, AttrUndefined},
- BorderLabel: ColorAttr{colWhite, AttrUndefined},
- Disabled: ColorAttr{colUndefined, AttrUndefined},
- PreviewFg: ColorAttr{colUndefined, AttrUndefined},
- PreviewBg: ColorAttr{colUndefined, AttrUndefined},
- Gutter: ColorAttr{colUndefined, AttrUndefined},
- PreviewLabel: ColorAttr{colUndefined, AttrUndefined},
- Separator: ColorAttr{colUndefined, AttrUndefined},
- Scrollbar: ColorAttr{colUndefined, AttrUndefined},
+ Colored: true,
+ Input: ColorAttr{colDefault, AttrUndefined},
+ Fg: ColorAttr{colDefault, AttrUndefined},
+ Bg: ColorAttr{colDefault, AttrUndefined},
+ DarkBg: ColorAttr{colBlack, AttrUndefined},
+ Prompt: ColorAttr{colBlue, AttrUndefined},
+ Match: ColorAttr{colGreen, AttrUndefined},
+ Current: ColorAttr{colYellow, AttrUndefined},
+ CurrentMatch: ColorAttr{colGreen, AttrUndefined},
+ Spinner: ColorAttr{colGreen, AttrUndefined},
+ Info: ColorAttr{colWhite, AttrUndefined},
+ Cursor: ColorAttr{colRed, AttrUndefined},
+ Selected: ColorAttr{colMagenta, AttrUndefined},
+ Header: ColorAttr{colCyan, AttrUndefined},
+ Border: ColorAttr{colBlack, AttrUndefined},
+ BorderLabel: ColorAttr{colWhite, AttrUndefined},
+ Disabled: ColorAttr{colUndefined, AttrUndefined},
+ PreviewFg: ColorAttr{colUndefined, AttrUndefined},
+ PreviewBg: ColorAttr{colUndefined, AttrUndefined},
+ Gutter: ColorAttr{colUndefined, AttrUndefined},
+ PreviewBorder: ColorAttr{colUndefined, AttrUndefined},
+ PreviewScrollbar: ColorAttr{colUndefined, AttrUndefined},
+ PreviewLabel: ColorAttr{colUndefined, AttrUndefined},
+ Separator: ColorAttr{colUndefined, AttrUndefined},
+ Scrollbar: ColorAttr{colUndefined, AttrUndefined},
}
Dark256 = &ColorTheme{
- Colored: true,
- Input: ColorAttr{colDefault, AttrUndefined},
- Fg: ColorAttr{colDefault, AttrUndefined},
- Bg: ColorAttr{colDefault, AttrUndefined},
- DarkBg: ColorAttr{236, AttrUndefined},
- Prompt: ColorAttr{110, AttrUndefined},
- Match: ColorAttr{108, AttrUndefined},
- Current: ColorAttr{254, AttrUndefined},
- CurrentMatch: ColorAttr{151, AttrUndefined},
- Spinner: ColorAttr{148, AttrUndefined},
- Info: ColorAttr{144, AttrUndefined},
- Cursor: ColorAttr{161, AttrUndefined},
- Selected: ColorAttr{168, AttrUndefined},
- Header: ColorAttr{109, AttrUndefined},
- Border: ColorAttr{59, AttrUndefined},
- BorderLabel: ColorAttr{145, AttrUndefined},
- Disabled: ColorAttr{colUndefined, AttrUndefined},
- PreviewFg: ColorAttr{colUndefined, AttrUndefined},
- PreviewBg: ColorAttr{colUndefined, AttrUndefined},
- Gutter: ColorAttr{colUndefined, AttrUndefined},
- PreviewLabel: ColorAttr{colUndefined, AttrUndefined},
- Separator: ColorAttr{colUndefined, AttrUndefined},
- Scrollbar: ColorAttr{colUndefined, AttrUndefined},
+ Colored: true,
+ Input: ColorAttr{colDefault, AttrUndefined},
+ Fg: ColorAttr{colDefault, AttrUndefined},
+ Bg: ColorAttr{colDefault, AttrUndefined},
+ DarkBg: ColorAttr{236, AttrUndefined},
+ Prompt: ColorAttr{110, AttrUndefined},
+ Match: ColorAttr{108, AttrUndefined},
+ Current: ColorAttr{254, AttrUndefined},
+ CurrentMatch: ColorAttr{151, AttrUndefined},
+ Spinner: ColorAttr{148, AttrUndefined},
+ Info: ColorAttr{144, AttrUndefined},
+ Cursor: ColorAttr{161, AttrUndefined},
+ Selected: ColorAttr{168, AttrUndefined},
+ Header: ColorAttr{109, AttrUndefined},
+ Border: ColorAttr{59, AttrUndefined},
+ BorderLabel: ColorAttr{145, AttrUndefined},
+ Disabled: ColorAttr{colUndefined, AttrUndefined},
+ PreviewFg: ColorAttr{colUndefined, AttrUndefined},
+ PreviewBg: ColorAttr{colUndefined, AttrUndefined},
+ Gutter: ColorAttr{colUndefined, AttrUndefined},
+ PreviewBorder: ColorAttr{colUndefined, AttrUndefined},
+ PreviewScrollbar: ColorAttr{colUndefined, AttrUndefined},
+ PreviewLabel: ColorAttr{colUndefined, AttrUndefined},
+ Separator: ColorAttr{colUndefined, AttrUndefined},
+ Scrollbar: ColorAttr{colUndefined, AttrUndefined},
}
Light256 = &ColorTheme{
- Colored: true,
- Input: ColorAttr{colDefault, AttrUndefined},
- Fg: ColorAttr{colDefault, AttrUndefined},
- Bg: ColorAttr{colDefault, AttrUndefined},
- DarkBg: ColorAttr{251, AttrUndefined},
- Prompt: ColorAttr{25, AttrUndefined},
- Match: ColorAttr{66, AttrUndefined},
- Current: ColorAttr{237, AttrUndefined},
- CurrentMatch: ColorAttr{23, AttrUndefined},
- Spinner: ColorAttr{65, AttrUndefined},
- Info: ColorAttr{101, AttrUndefined},
- Cursor: ColorAttr{161, AttrUndefined},
- Selected: ColorAttr{168, AttrUndefined},
- Header: ColorAttr{31, AttrUndefined},
- Border: ColorAttr{145, AttrUndefined},
- BorderLabel: ColorAttr{59, AttrUndefined},
- Disabled: ColorAttr{colUndefined, AttrUndefined},
- PreviewFg: ColorAttr{colUndefined, AttrUndefined},
- PreviewBg: ColorAttr{colUndefined, AttrUndefined},
- Gutter: ColorAttr{colUndefined, AttrUndefined},
- PreviewLabel: ColorAttr{colUndefined, AttrUndefined},
- Separator: ColorAttr{colUndefined, AttrUndefined},
- Scrollbar: ColorAttr{colUndefined, AttrUndefined},
+ Colored: true,
+ Input: ColorAttr{colDefault, AttrUndefined},
+ Fg: ColorAttr{colDefault, AttrUndefined},
+ Bg: ColorAttr{colDefault, AttrUndefined},
+ DarkBg: ColorAttr{251, AttrUndefined},
+ Prompt: ColorAttr{25, AttrUndefined},
+ Match: ColorAttr{66, AttrUndefined},
+ Current: ColorAttr{237, AttrUndefined},
+ CurrentMatch: ColorAttr{23, AttrUndefined},
+ Spinner: ColorAttr{65, AttrUndefined},
+ Info: ColorAttr{101, AttrUndefined},
+ Cursor: ColorAttr{161, AttrUndefined},
+ Selected: ColorAttr{168, AttrUndefined},
+ Header: ColorAttr{31, AttrUndefined},
+ Border: ColorAttr{145, AttrUndefined},
+ BorderLabel: ColorAttr{59, AttrUndefined},
+ Disabled: ColorAttr{colUndefined, AttrUndefined},
+ PreviewFg: ColorAttr{colUndefined, AttrUndefined},
+ PreviewBg: ColorAttr{colUndefined, AttrUndefined},
+ Gutter: ColorAttr{colUndefined, AttrUndefined},
+ PreviewBorder: ColorAttr{colUndefined, AttrUndefined},
+ PreviewScrollbar: ColorAttr{colUndefined, AttrUndefined},
+ PreviewLabel: ColorAttr{colUndefined, AttrUndefined},
+ Separator: ColorAttr{colUndefined, AttrUndefined},
+ Scrollbar: ColorAttr{colUndefined, AttrUndefined},
}
}
@@ -682,8 +694,10 @@ func initTheme(theme *ColorTheme, baseTheme *ColorTheme, forceBlack bool) {
theme.PreviewFg = o(theme.Fg, theme.PreviewFg)
theme.PreviewBg = o(theme.Bg, theme.PreviewBg)
theme.PreviewLabel = o(theme.BorderLabel, theme.PreviewLabel)
+ theme.PreviewBorder = o(theme.Border, theme.PreviewBorder)
theme.Separator = o(theme.Border, theme.Separator)
theme.Scrollbar = o(theme.Border, theme.Scrollbar)
+ theme.PreviewScrollbar = o(theme.PreviewBorder, theme.PreviewScrollbar)
initPalette(theme)
}
@@ -721,6 +735,6 @@ func initPalette(theme *ColorTheme) {
ColBorderLabel = pair(theme.BorderLabel, theme.Bg)
ColPreviewLabel = pair(theme.PreviewLabel, theme.PreviewBg)
ColPreview = pair(theme.PreviewFg, theme.PreviewBg)
- ColPreviewBorder = pair(theme.Border, theme.PreviewBg)
- ColPreviewScrollbar = pair(theme.Scrollbar, theme.PreviewBg)
+ ColPreviewBorder = pair(theme.PreviewBorder, theme.PreviewBg)
+ ColPreviewScrollbar = pair(theme.PreviewScrollbar, theme.PreviewBg)
}