diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2019-12-12 23:03:17 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2019-12-12 23:03:17 +0900 |
| commit | 3db6b88d82d77f29478771f416fcab708e841fc4 (patch) | |
| tree | 7b0dc6f00dfa121d015a2853ab4b4e2be7cd3c64 /src/tui | |
| parent | 8ae96774df202497c7e73d24e10c51e621eabddf (diff) | |
| download | fzf-3db6b88d82d77f29478771f416fcab708e841fc4.tar.gz | |
Add preview-fg and preview-bg for --color
Close #1776
Diffstat (limited to 'src/tui')
| -rw-r--r-- | src/tui/dummy.go | 2 | ||||
| -rw-r--r-- | src/tui/light.go | 21 | ||||
| -rw-r--r-- | src/tui/tcell.go | 37 | ||||
| -rw-r--r-- | src/tui/tui.go | 20 |
4 files changed, 56 insertions, 24 deletions
diff --git a/src/tui/dummy.go b/src/tui/dummy.go index 3965c9ea..76a16e55 100644 --- a/src/tui/dummy.go +++ b/src/tui/dummy.go @@ -39,6 +39,6 @@ func (r *FullscreenRenderer) MaxY() int { return 0 } func (r *FullscreenRenderer) RefreshWindows(windows []Window) {} -func (r *FullscreenRenderer) NewWindow(top int, left int, width int, height int, borderStyle BorderStyle) Window { +func (r *FullscreenRenderer) NewWindow(top int, left int, width int, height int, preview bool, borderStyle BorderStyle) Window { return nil } diff --git a/src/tui/light.go b/src/tui/light.go index d1020a99..5c4fadf7 100644 --- a/src/tui/light.go +++ b/src/tui/light.go @@ -666,7 +666,7 @@ func (r *LightRenderer) DoesAutoWrap() bool { return false } -func (r *LightRenderer) NewWindow(top int, left int, width int, height int, borderStyle BorderStyle) Window { +func (r *LightRenderer) NewWindow(top int, left int, width int, height int, preview bool, borderStyle BorderStyle) Window { w := &LightWindow{ renderer: r, colored: r.theme != nil, @@ -679,8 +679,13 @@ func (r *LightRenderer) NewWindow(top int, left int, width int, height int, bord fg: colDefault, bg: colDefault} if r.theme != nil { - w.fg = r.theme.Fg - w.bg = r.theme.Bg + if preview { + w.fg = r.theme.PreviewFg + w.bg = r.theme.PreviewBg + } else { + w.fg = r.theme.Fg + w.bg = r.theme.Bg + } } w.drawBorder() return w @@ -704,16 +709,16 @@ func (w *LightWindow) drawBorderHorizontal() { func (w *LightWindow) drawBorderAround() { w.Move(0, 0) - w.CPrint(ColBorder, AttrRegular, + w.CPrint(ColPreviewBorder, AttrRegular, string(w.border.topLeft)+repeat(w.border.horizontal, w.width-2)+string(w.border.topRight)) for y := 1; y < w.height-1; y++ { w.Move(y, 0) - w.CPrint(ColBorder, AttrRegular, string(w.border.vertical)) - w.cprint2(colDefault, w.bg, AttrRegular, repeat(' ', w.width-2)) - w.CPrint(ColBorder, AttrRegular, string(w.border.vertical)) + w.CPrint(ColPreviewBorder, AttrRegular, string(w.border.vertical)) + w.CPrint(ColPreviewBorder, AttrRegular, repeat(' ', w.width-2)) + w.CPrint(ColPreviewBorder, AttrRegular, string(w.border.vertical)) } w.Move(w.height-1, 0) - w.CPrint(ColBorder, AttrRegular, + w.CPrint(ColPreviewBorder, AttrRegular, string(w.border.bottomLeft)+repeat(w.border.horizontal, w.width-2)+string(w.border.bottomRight)) } diff --git a/src/tui/tcell.go b/src/tui/tcell.go index 4bd7c812..339f7dff 100644 --- a/src/tui/tcell.go +++ b/src/tui/tcell.go @@ -32,6 +32,7 @@ type TcellWindow struct { left int width int height int + normal ColorPair lastX int lastY int moveCursor bool @@ -408,14 +409,18 @@ func (r *FullscreenRenderer) RefreshWindows(windows []Window) { _screen.Show() } -func (r *FullscreenRenderer) NewWindow(top int, left int, width int, height int, borderStyle BorderStyle) Window { - // TODO +func (r *FullscreenRenderer) NewWindow(top int, left int, width int, height int, preview bool, borderStyle BorderStyle) Window { + normal := ColNormal + if preview { + normal = ColPreview + } return &TcellWindow{ color: r.theme != nil, top: top, left: left, width: width, height: height, + normal: normal, borderStyle: borderStyle} } @@ -423,16 +428,16 @@ func (w *TcellWindow) Close() { // TODO } -func fill(x, y, w, h int, r rune) { +func fill(x, y, w, h int, n ColorPair, r rune) { for ly := 0; ly <= h; ly++ { for lx := 0; lx <= w; lx++ { - _screen.SetContent(x+lx, y+ly, r, nil, ColNormal.style()) + _screen.SetContent(x+lx, y+ly, r, nil, n.style()) } } } func (w *TcellWindow) Erase() { - fill(w.left-1, w.top, w.width+1, w.height, ' ') + fill(w.left-1, w.top, w.width+1, w.height, w.normal, ' ') } func (w *TcellWindow) Enclose(y int, x int) bool { @@ -449,13 +454,13 @@ func (w *TcellWindow) Move(y int, x int) { func (w *TcellWindow) MoveAndClear(y int, x int) { w.Move(y, x) for i := w.lastX; i < w.width; i++ { - _screen.SetContent(i+w.left, w.lastY+w.top, rune(' '), nil, ColNormal.style()) + _screen.SetContent(i+w.left, w.lastY+w.top, rune(' '), nil, w.normal.style()) } w.lastX = x } func (w *TcellWindow) Print(text string) { - w.printString(text, ColNormal, 0) + w.printString(text, w.normal, 0) } func (w *TcellWindow) printString(text string, pair ColorPair, a Attr) { @@ -468,7 +473,7 @@ func (w *TcellWindow) printString(text string, pair ColorPair, a Attr) { Reverse(a&Attr(tcell.AttrReverse) != 0). Underline(a&Attr(tcell.AttrUnderline) != 0) } else { - style = ColNormal.style(). + style = w.normal.style(). Reverse(a&Attr(tcell.AttrReverse) != 0 || pair == ColCurrent || pair == ColCurrentMatch). Underline(a&Attr(tcell.AttrUnderline) != 0 || pair == ColMatch || pair == ColCurrentMatch) } @@ -519,7 +524,7 @@ func (w *TcellWindow) fillString(text string, pair ColorPair, a Attr) FillReturn if w.color { style = pair.style() } else { - style = ColNormal.style() + style = w.normal.style() } style = style. Blink(a&Attr(tcell.AttrBlink) != 0). @@ -559,15 +564,15 @@ func (w *TcellWindow) fillString(text string, pair ColorPair, a Attr) FillReturn } func (w *TcellWindow) Fill(str string) FillReturn { - return w.fillString(str, ColNormal, 0) + return w.fillString(str, w.normal, 0) } func (w *TcellWindow) CFill(fg Color, bg Color, a Attr, str string) FillReturn { if fg == colDefault { - fg = ColNormal.Fg() + fg = w.normal.Fg() } if bg == colDefault { - bg = ColNormal.Bg() + bg = w.normal.Bg() } return w.fillString(str, NewColorPair(fg, bg), a) } @@ -584,9 +589,13 @@ func (w *TcellWindow) drawBorder() { var style tcell.Style if w.color { - style = ColBorder.style() + if w.borderStyle.shape == BorderAround { + style = ColPreviewBorder.style() + } else { + style = ColBorder.style() + } } else { - style = ColNormal.style() + style = w.normal.style() } for x := left; x < right; x++ { diff --git a/src/tui/tui.go b/src/tui/tui.go index 4ec852e3..9af11472 100644 --- a/src/tui/tui.go +++ b/src/tui/tui.go @@ -173,6 +173,8 @@ func (p ColorPair) Bg() Color { type ColorTheme struct { Fg Color Bg Color + PreviewFg Color + PreviewBg Color DarkBg Color Gutter Color Prompt Color @@ -272,7 +274,7 @@ type Renderer interface { MaxY() int DoesAutoWrap() bool - NewWindow(top int, left int, width int, height int, borderStyle BorderStyle) Window + NewWindow(top int, left int, width int, height int, preview bool, borderStyle BorderStyle) Window } type Window interface { @@ -334,12 +336,16 @@ var ( ColInfo ColorPair ColHeader ColorPair ColBorder ColorPair + ColPreview ColorPair + ColPreviewBorder ColorPair ) func EmptyTheme() *ColorTheme { return &ColorTheme{ Fg: colUndefined, Bg: colUndefined, + PreviewFg: colUndefined, + PreviewBg: colUndefined, DarkBg: colUndefined, Gutter: colUndefined, Prompt: colUndefined, @@ -363,6 +369,8 @@ func init() { Default16 = &ColorTheme{ Fg: colDefault, Bg: colDefault, + PreviewFg: colUndefined, + PreviewBg: colUndefined, DarkBg: colBlack, Gutter: colUndefined, Prompt: colBlue, @@ -378,6 +386,8 @@ func init() { Dark256 = &ColorTheme{ Fg: colDefault, Bg: colDefault, + PreviewFg: colUndefined, + PreviewBg: colUndefined, DarkBg: 236, Gutter: colUndefined, Prompt: 110, @@ -393,6 +403,8 @@ func init() { Light256 = &ColorTheme{ Fg: colDefault, Bg: colDefault, + PreviewFg: colUndefined, + PreviewBg: colUndefined, DarkBg: 251, Gutter: colUndefined, Prompt: 25, @@ -425,6 +437,8 @@ func initTheme(theme *ColorTheme, baseTheme *ColorTheme, forceBlack bool) { } theme.Fg = o(baseTheme.Fg, theme.Fg) theme.Bg = o(baseTheme.Bg, theme.Bg) + theme.PreviewFg = o(theme.Fg, o(baseTheme.PreviewFg, theme.PreviewFg)) + theme.PreviewBg = o(theme.Bg, o(baseTheme.PreviewBg, theme.PreviewBg)) theme.DarkBg = o(baseTheme.DarkBg, theme.DarkBg) theme.Gutter = o(theme.DarkBg, o(baseTheme.Gutter, theme.Gutter)) theme.Prompt = o(baseTheme.Prompt, theme.Prompt) @@ -461,6 +475,8 @@ func initPalette(theme *ColorTheme) { ColInfo = pair(theme.Info, theme.Bg) ColHeader = pair(theme.Header, theme.Bg) ColBorder = pair(theme.Border, theme.Bg) + ColPreview = pair(theme.PreviewFg, theme.PreviewBg) + ColPreviewBorder = pair(theme.Border, theme.PreviewBg) } else { ColPrompt = pair(colDefault, colDefault) ColNormal = pair(colDefault, colDefault) @@ -475,6 +491,8 @@ func initPalette(theme *ColorTheme) { ColInfo = pair(colDefault, colDefault) ColHeader = pair(colDefault, colDefault) ColBorder = pair(colDefault, colDefault) + ColPreview = pair(colDefault, colDefault) + ColPreviewBorder = pair(colDefault, colDefault) } } |
