diff options
Diffstat (limited to 'src/tui/tui.go')
-rw-r--r-- | src/tui/tui.go | 71 |
1 files changed, 52 insertions, 19 deletions
diff --git a/src/tui/tui.go b/src/tui/tui.go index aec80fcd..96a72651 100644 --- a/src/tui/tui.go +++ b/src/tui/tui.go @@ -1,8 +1,6 @@ package tui import ( - "fmt" - "os" "strconv" "time" @@ -104,6 +102,7 @@ const ( CtrlAlt Invalid + Fatal Mouse DoubleClick @@ -130,6 +129,7 @@ const ( Result Jump JumpCancel + ClickHeader ) func (t EventType) AsEvent() Event { @@ -303,6 +303,9 @@ type ColorTheme struct { Disabled ColorAttr Fg ColorAttr Bg ColorAttr + SelectedFg ColorAttr + SelectedBg ColorAttr + SelectedMatch ColorAttr PreviewFg ColorAttr PreviewBg ColorAttr DarkBg ColorAttr @@ -314,7 +317,7 @@ type ColorTheme struct { Spinner ColorAttr Info ColorAttr Cursor ColorAttr - Selected ColorAttr + Marker ColorAttr Header ColorAttr Separator ColorAttr Scrollbar ColorAttr @@ -353,7 +356,8 @@ type MouseEvent struct { type BorderShape int const ( - BorderNone BorderShape = iota + BorderUndefined BorderShape = iota + BorderNone BorderRounded BorderSharp BorderBold @@ -368,6 +372,14 @@ const ( BorderRight ) +func (s BorderShape) HasLeft() bool { + switch s { + case BorderNone, BorderRight, BorderTop, BorderBottom, BorderHorizontal: // No Left + return false + } + return true +} + func (s BorderShape) HasRight() bool { switch s { case BorderNone, BorderLeft, BorderTop, BorderBottom, BorderHorizontal: // No right @@ -516,7 +528,7 @@ type TermSize struct { } type Renderer interface { - Init() + Init() error Resize(maxHeightFunc func(int) int) Pause(clear bool) Resume(clear bool, sigcont bool) @@ -595,12 +607,14 @@ var ( ColMatch ColorPair ColCursor ColorPair ColCursorEmpty ColorPair + ColMarker ColorPair ColSelected ColorPair + ColSelectedMatch ColorPair ColCurrent ColorPair ColCurrentMatch ColorPair ColCurrentCursor ColorPair ColCurrentCursorEmpty ColorPair - ColCurrentSelected ColorPair + ColCurrentMarker ColorPair ColCurrentSelectedEmpty ColorPair ColSpinner ColorPair ColInfo ColorPair @@ -622,6 +636,9 @@ func EmptyTheme() *ColorTheme { Input: ColorAttr{colUndefined, AttrUndefined}, Fg: ColorAttr{colUndefined, AttrUndefined}, Bg: ColorAttr{colUndefined, AttrUndefined}, + SelectedFg: ColorAttr{colUndefined, AttrUndefined}, + SelectedBg: ColorAttr{colUndefined, AttrUndefined}, + SelectedMatch: ColorAttr{colUndefined, AttrUndefined}, DarkBg: ColorAttr{colUndefined, AttrUndefined}, Prompt: ColorAttr{colUndefined, AttrUndefined}, Match: ColorAttr{colUndefined, AttrUndefined}, @@ -630,7 +647,7 @@ func EmptyTheme() *ColorTheme { Spinner: ColorAttr{colUndefined, AttrUndefined}, Info: ColorAttr{colUndefined, AttrUndefined}, Cursor: ColorAttr{colUndefined, AttrUndefined}, - Selected: ColorAttr{colUndefined, AttrUndefined}, + Marker: ColorAttr{colUndefined, AttrUndefined}, Header: ColorAttr{colUndefined, AttrUndefined}, Border: ColorAttr{colUndefined, AttrUndefined}, BorderLabel: ColorAttr{colUndefined, AttrUndefined}, @@ -652,6 +669,9 @@ func NoColorTheme() *ColorTheme { Input: ColorAttr{colDefault, AttrUndefined}, Fg: ColorAttr{colDefault, AttrUndefined}, Bg: ColorAttr{colDefault, AttrUndefined}, + SelectedFg: ColorAttr{colDefault, AttrUndefined}, + SelectedBg: ColorAttr{colDefault, AttrUndefined}, + SelectedMatch: ColorAttr{colDefault, AttrUndefined}, DarkBg: ColorAttr{colDefault, AttrUndefined}, Prompt: ColorAttr{colDefault, AttrUndefined}, Match: ColorAttr{colDefault, Underline}, @@ -660,7 +680,7 @@ func NoColorTheme() *ColorTheme { Spinner: ColorAttr{colDefault, AttrUndefined}, Info: ColorAttr{colDefault, AttrUndefined}, Cursor: ColorAttr{colDefault, AttrUndefined}, - Selected: ColorAttr{colDefault, AttrUndefined}, + Marker: ColorAttr{colDefault, AttrUndefined}, Header: ColorAttr{colDefault, AttrUndefined}, Border: ColorAttr{colDefault, AttrUndefined}, BorderLabel: ColorAttr{colDefault, AttrUndefined}, @@ -676,17 +696,15 @@ func NoColorTheme() *ColorTheme { } } -func errorExit(message string) { - fmt.Fprintln(os.Stderr, message) - util.Exit(2) -} - func init() { Default16 = &ColorTheme{ Colored: true, Input: ColorAttr{colDefault, AttrUndefined}, Fg: ColorAttr{colDefault, AttrUndefined}, Bg: ColorAttr{colDefault, AttrUndefined}, + SelectedFg: ColorAttr{colUndefined, AttrUndefined}, + SelectedBg: ColorAttr{colUndefined, AttrUndefined}, + SelectedMatch: ColorAttr{colUndefined, AttrUndefined}, DarkBg: ColorAttr{colBlack, AttrUndefined}, Prompt: ColorAttr{colBlue, AttrUndefined}, Match: ColorAttr{colGreen, AttrUndefined}, @@ -695,7 +713,7 @@ func init() { Spinner: ColorAttr{colGreen, AttrUndefined}, Info: ColorAttr{colWhite, AttrUndefined}, Cursor: ColorAttr{colRed, AttrUndefined}, - Selected: ColorAttr{colMagenta, AttrUndefined}, + Marker: ColorAttr{colMagenta, AttrUndefined}, Header: ColorAttr{colCyan, AttrUndefined}, Border: ColorAttr{colBlack, AttrUndefined}, BorderLabel: ColorAttr{colWhite, AttrUndefined}, @@ -714,6 +732,9 @@ func init() { Input: ColorAttr{colDefault, AttrUndefined}, Fg: ColorAttr{colDefault, AttrUndefined}, Bg: ColorAttr{colDefault, AttrUndefined}, + SelectedFg: ColorAttr{colUndefined, AttrUndefined}, + SelectedBg: ColorAttr{colUndefined, AttrUndefined}, + SelectedMatch: ColorAttr{colUndefined, AttrUndefined}, DarkBg: ColorAttr{236, AttrUndefined}, Prompt: ColorAttr{110, AttrUndefined}, Match: ColorAttr{108, AttrUndefined}, @@ -722,7 +743,7 @@ func init() { Spinner: ColorAttr{148, AttrUndefined}, Info: ColorAttr{144, AttrUndefined}, Cursor: ColorAttr{161, AttrUndefined}, - Selected: ColorAttr{168, AttrUndefined}, + Marker: ColorAttr{168, AttrUndefined}, Header: ColorAttr{109, AttrUndefined}, Border: ColorAttr{59, AttrUndefined}, BorderLabel: ColorAttr{145, AttrUndefined}, @@ -741,6 +762,9 @@ func init() { Input: ColorAttr{colDefault, AttrUndefined}, Fg: ColorAttr{colDefault, AttrUndefined}, Bg: ColorAttr{colDefault, AttrUndefined}, + SelectedFg: ColorAttr{colUndefined, AttrUndefined}, + SelectedBg: ColorAttr{colUndefined, AttrUndefined}, + SelectedMatch: ColorAttr{colUndefined, AttrUndefined}, DarkBg: ColorAttr{251, AttrUndefined}, Prompt: ColorAttr{25, AttrUndefined}, Match: ColorAttr{66, AttrUndefined}, @@ -749,7 +773,7 @@ func init() { Spinner: ColorAttr{65, AttrUndefined}, Info: ColorAttr{101, AttrUndefined}, Cursor: ColorAttr{161, AttrUndefined}, - Selected: ColorAttr{168, AttrUndefined}, + Marker: ColorAttr{168, AttrUndefined}, Header: ColorAttr{31, AttrUndefined}, Border: ColorAttr{145, AttrUndefined}, BorderLabel: ColorAttr{59, AttrUndefined}, @@ -791,12 +815,15 @@ func initTheme(theme *ColorTheme, baseTheme *ColorTheme, forceBlack bool) { theme.Spinner = o(baseTheme.Spinner, theme.Spinner) theme.Info = o(baseTheme.Info, theme.Info) theme.Cursor = o(baseTheme.Cursor, theme.Cursor) - theme.Selected = o(baseTheme.Selected, theme.Selected) + theme.Marker = o(baseTheme.Marker, theme.Marker) theme.Header = o(baseTheme.Header, theme.Header) theme.Border = o(baseTheme.Border, theme.Border) theme.BorderLabel = o(baseTheme.BorderLabel, theme.BorderLabel) // These colors are not defined in the base themes + theme.SelectedFg = o(theme.Fg, theme.SelectedFg) + theme.SelectedBg = o(theme.Bg, theme.SelectedBg) + theme.SelectedMatch = o(theme.Match, theme.SelectedMatch) theme.Disabled = o(theme.Input, theme.Disabled) theme.Gutter = o(theme.DarkBg, theme.Gutter) theme.PreviewFg = o(theme.Fg, theme.PreviewFg) @@ -822,17 +849,23 @@ func initPalette(theme *ColorTheme) { ColPrompt = pair(theme.Prompt, theme.Bg) ColNormal = pair(theme.Fg, theme.Bg) + ColSelected = pair(theme.SelectedFg, theme.SelectedBg) ColInput = pair(theme.Input, theme.Bg) ColDisabled = pair(theme.Disabled, theme.Bg) ColMatch = pair(theme.Match, theme.Bg) + ColSelectedMatch = pair(theme.SelectedMatch, theme.SelectedBg) ColCursor = pair(theme.Cursor, theme.Gutter) ColCursorEmpty = pair(blank, theme.Gutter) - ColSelected = pair(theme.Selected, theme.Gutter) + if theme.SelectedBg.Color != theme.Bg.Color { + ColMarker = pair(theme.Marker, theme.SelectedBg) + } else { + ColMarker = pair(theme.Marker, theme.Gutter) + } ColCurrent = pair(theme.Current, theme.DarkBg) ColCurrentMatch = pair(theme.CurrentMatch, theme.DarkBg) ColCurrentCursor = pair(theme.Cursor, theme.DarkBg) ColCurrentCursorEmpty = pair(blank, theme.DarkBg) - ColCurrentSelected = pair(theme.Selected, theme.DarkBg) + ColCurrentMarker = pair(theme.Marker, theme.DarkBg) ColCurrentSelectedEmpty = pair(blank, theme.DarkBg) ColSpinner = pair(theme.Spinner, theme.Bg) ColInfo = pair(theme.Info, theme.Bg) |