[tcell] 24-bit color support

TAGS=tcell make install

    printf "\x1b[38;2;100;200;250mTRUECOLOR\x1b[m\n" |
        TERM=xterm-truecolor fzf --ansi
This commit is contained in:
Junegunn Choi 2016-11-26 00:36:38 +09:00
parent 6f17f412ba
commit de1c6b8727
No known key found for this signature in database
GPG Key ID: 254BC280FEF9C627
4 changed files with 26 additions and 3 deletions

View File

@ -169,6 +169,8 @@ func interpretCode(ansiCode string, prevState *ansiState) *ansiState {
} }
case 1: case 1:
switch num { switch num {
case 2:
state256 = 10 // MAGIC
case 5: case 5:
state256++ state256++
default: default:
@ -177,8 +179,20 @@ func interpretCode(ansiCode string, prevState *ansiState) *ansiState {
case 2: case 2:
*ptr = tui.Color(num) *ptr = tui.Color(num)
state256 = 0 state256 = 0
case 10:
*ptr = tui.Color(1<<24) | tui.Color(num<<16)
state256++
case 11:
*ptr = *ptr | tui.Color(num<<8)
state256++
case 12:
*ptr = *ptr | tui.Color(num)
state256 = 0
} }
} }
} }
if state256 > 0 {
*ptr = -1
}
return state return state
} }

View File

@ -295,6 +295,10 @@ func RefreshWindows(windows []*Window) {
} }
func PairFor(fg Color, bg Color) ColorPair { func PairFor(fg Color, bg Color) ColorPair {
// ncurses does not support 24-bit colors
if fg.is24() || bg.is24() {
return ColDefault
}
key := (int(fg) << 8) + int(bg) key := (int(fg) << 8) + int(bg)
if found, prs := _colorMap[key]; prs { if found, prs := _colorMap[key]; prs {
return found return found

View File

@ -11,8 +11,9 @@ import (
"runtime" "runtime"
"github.com/gdamore/tcell" // https://github.com/gdamore/tcell/pull/135
"github.com/gdamore/tcell/encoding" "github.com/junegunn/tcell"
"github.com/junegunn/tcell/encoding"
"github.com/junegunn/go-runewidth" "github.com/junegunn/go-runewidth"
) )

View File

@ -93,7 +93,11 @@ const (
doubleClickDuration = 500 * time.Millisecond doubleClickDuration = 500 * time.Millisecond
) )
type Color int16 type Color int32
func (c Color) is24() bool {
return c > 0 && (c&(1<<24)) > 0
}
const ( const (
colUndefined Color = -2 colUndefined Color = -2