mirror of
https://github.com/gdamore/tcell.git
synced 2025-04-26 13:48:53 +08:00
fixes #373 Check for and use RGB property in terminfo
This also regenerated some definitions, which should lead to more accurate mouse mode for a few of the terminals.
This commit is contained in:
parent
5216188a4f
commit
bf3f269ccb
@ -34,7 +34,7 @@ func init() {
|
|||||||
EnterAcs: "\x1b(0",
|
EnterAcs: "\x1b(0",
|
||||||
ExitAcs: "\x1b(B",
|
ExitAcs: "\x1b(B",
|
||||||
Mouse: "\x1b[<",
|
Mouse: "\x1b[<",
|
||||||
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
MouseMode: "\x1b[?1006;1000%?%p1%{1}%=%th%el%;",
|
||||||
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
CursorBack1: "\b",
|
CursorBack1: "\b",
|
||||||
CursorUp1: "\x1b[A",
|
CursorUp1: "\x1b[A",
|
||||||
|
@ -34,7 +34,7 @@ func init() {
|
|||||||
ExitAcs: "\x0f",
|
ExitAcs: "\x0f",
|
||||||
EnableAcs: "\x1b)0",
|
EnableAcs: "\x1b)0",
|
||||||
Mouse: "\x1b[<",
|
Mouse: "\x1b[<",
|
||||||
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
MouseMode: "\x1b[?1006;1000%?%p1%{1}%=%th%el%;",
|
||||||
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
CursorBack1: "\b",
|
CursorBack1: "\b",
|
||||||
CursorUp1: "\x1b[A",
|
CursorUp1: "\x1b[A",
|
||||||
@ -93,7 +93,7 @@ func init() {
|
|||||||
ExitAcs: "\x0f",
|
ExitAcs: "\x0f",
|
||||||
EnableAcs: "\x1b)0",
|
EnableAcs: "\x1b)0",
|
||||||
Mouse: "\x1b[<",
|
Mouse: "\x1b[<",
|
||||||
MouseMode: "%?%p1%{1}%=%t%'h'%Pa%e%'l'%Pa%;\x1b[?1000%ga%c\x1b[?1002%ga%c\x1b[?1003%ga%c\x1b[?1006%ga%c",
|
MouseMode: "\x1b[?1006;1000%?%p1%{1}%=%th%el%;",
|
||||||
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
SetCursor: "\x1b[%i%p1%d;%p2%dH",
|
||||||
CursorBack1: "\b",
|
CursorBack1: "\b",
|
||||||
CursorUp1: "\x1b[A",
|
CursorUp1: "\x1b[A",
|
||||||
|
@ -132,7 +132,7 @@ func unescape(s string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (tc *termcap) setupterm(name string) error {
|
func (tc *termcap) setupterm(name string) error {
|
||||||
cmd := exec.Command("infocmp", "-1", name)
|
cmd := exec.Command("infocmp", "-x", "-1", name)
|
||||||
output := &bytes.Buffer{}
|
output := &bytes.Buffer{}
|
||||||
cmd.Stdout = output
|
cmd.Stdout = output
|
||||||
|
|
||||||
@ -362,6 +362,24 @@ func getinfo(name string) (*terminfo.Terminfo, string, error) {
|
|||||||
t.KeyCtrlEnd = "\x1b[8^"
|
t.KeyCtrlEnd = "\x1b[8^"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Technically the RGB flag that is provided for xterm-direct is not
|
||||||
|
// quite right. The problem is that the -direct flag that was introduced
|
||||||
|
// with ncurses 6.1 requires a parsing for the parameters that we lack.
|
||||||
|
// For this case we'll just assume it's XTerm compatible. Someday this
|
||||||
|
// may be incorrect, but right now it is correct, and nobody uses it
|
||||||
|
// anyway.
|
||||||
|
if tc.getflag("Tc") {
|
||||||
|
// This presumes XTerm 24-bit true color.
|
||||||
|
t.TrueColor = true
|
||||||
|
} else if tc.getflag("RGB") {
|
||||||
|
// This is for xterm-direct, which uses a different scheme entirely.
|
||||||
|
// (ncurses went a very different direction from everyone else, and
|
||||||
|
// so it's unlikely anything is using this definition.)
|
||||||
|
t.TrueColor = true
|
||||||
|
t.SetBg = "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m"
|
||||||
|
t.SetFg = "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m"
|
||||||
|
}
|
||||||
|
|
||||||
// If the kmous entry is present, then we need to record the
|
// If the kmous entry is present, then we need to record the
|
||||||
// the codes to enter and exit mouse mode. Sadly, this is not
|
// the codes to enter and exit mouse mode. Sadly, this is not
|
||||||
// part of the terminfo databases anywhere that I've found, but
|
// part of the terminfo databases anywhere that I've found, but
|
||||||
@ -427,6 +445,13 @@ func dotGoAddStr(w io.Writer, n string, s string) {
|
|||||||
}
|
}
|
||||||
fmt.Fprintf(w, "\t\t%-13s %q,\n", n+":", s)
|
fmt.Fprintf(w, "\t\t%-13s %q,\n", n+":", s)
|
||||||
}
|
}
|
||||||
|
func dotGoAddFlag(w io.Writer, n string, b bool) {
|
||||||
|
if !b {
|
||||||
|
// initialized to 0, ignore
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Fprintf(w, "\t\t%-13s true,\n", n+":")
|
||||||
|
}
|
||||||
|
|
||||||
func dotGoAddArr(w io.Writer, n string, a []string) {
|
func dotGoAddArr(w io.Writer, n string, a []string) {
|
||||||
if len(a) == 0 {
|
if len(a) == 0 {
|
||||||
@ -596,6 +621,7 @@ func dotGoInfo(w io.Writer, terms []*TData) {
|
|||||||
dotGoAddStr(w, "KeyCtrlHome", t.KeyCtrlHome)
|
dotGoAddStr(w, "KeyCtrlHome", t.KeyCtrlHome)
|
||||||
dotGoAddStr(w, "KeyCtrlEnd", t.KeyCtrlEnd)
|
dotGoAddStr(w, "KeyCtrlEnd", t.KeyCtrlEnd)
|
||||||
dotGoAddInt(w, "Modifiers", t.Modifiers)
|
dotGoAddInt(w, "Modifiers", t.Modifiers)
|
||||||
|
dotGoAddFlag(w, "TrueColor", t.TrueColor)
|
||||||
fmt.Fprintln(w, "\t})")
|
fmt.Fprintln(w, "\t})")
|
||||||
}
|
}
|
||||||
fmt.Fprintln(w, "}")
|
fmt.Fprintln(w, "}")
|
||||||
|
@ -65,6 +65,7 @@ func init() {
|
|||||||
KeyClear: "\x1b[3;5~",
|
KeyClear: "\x1b[3;5~",
|
||||||
KeyBacktab: "\x1b[Z",
|
KeyBacktab: "\x1b[Z",
|
||||||
Modifiers: 1,
|
Modifiers: 1,
|
||||||
|
TrueColor: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
// simpleterm with 256 colors
|
// simpleterm with 256 colors
|
||||||
@ -126,5 +127,6 @@ func init() {
|
|||||||
KeyClear: "\x1b[3;5~",
|
KeyClear: "\x1b[3;5~",
|
||||||
KeyBacktab: "\x1b[Z",
|
KeyBacktab: "\x1b[Z",
|
||||||
Modifiers: 1,
|
Modifiers: 1,
|
||||||
|
TrueColor: true,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -212,6 +212,7 @@ type Terminfo struct {
|
|||||||
KeyMetaShfHome string
|
KeyMetaShfHome string
|
||||||
KeyMetaShfEnd string
|
KeyMetaShfEnd string
|
||||||
Modifiers int
|
Modifiers int
|
||||||
|
TrueColor bool // true if the terminal supports direct color
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -737,7 +738,9 @@ func LookupTerminfo(name string) (*Terminfo, error) {
|
|||||||
|
|
||||||
// If the name ends in -truecolor, then fabricate an entry
|
// If the name ends in -truecolor, then fabricate an entry
|
||||||
// from the corresponding -256color, -color, or bare terminal.
|
// from the corresponding -256color, -color, or bare terminal.
|
||||||
if t == nil && strings.HasSuffix(name, "-truecolor") {
|
if t.TrueColor {
|
||||||
|
addtruecolor = true
|
||||||
|
} else if t == nil && strings.HasSuffix(name, "-truecolor") {
|
||||||
|
|
||||||
suffixes := []string{
|
suffixes := []string{
|
||||||
"-256color",
|
"-256color",
|
||||||
|
@ -62,5 +62,6 @@ func init() {
|
|||||||
KeyF12: "\x1b[24~",
|
KeyF12: "\x1b[24~",
|
||||||
KeyBacktab: "\x1b[Z",
|
KeyBacktab: "\x1b[Z",
|
||||||
Modifiers: 1,
|
Modifiers: 1,
|
||||||
|
TrueColor: true,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user