1
0
mirror of https://github.com/taigrr/wtf synced 2026-03-31 21:58:48 -07:00

Close #239. Update the tcell dependency

This commit is contained in:
Chris Cummer
2018-07-11 09:45:34 -07:00
parent 0d713325dc
commit b84a4394d7
66 changed files with 1069 additions and 615 deletions

8
vendor/github.com/gdamore/tcell/terminfo/README.md generated vendored Normal file
View File

@@ -0,0 +1,8 @@
To run the database:
./mkinfo -all
You can also generate a single entry:
./mkinfo -db <term>

View File

@@ -1,189 +0,0 @@
#!/bin/bash
# Copyright 2017 The TCell Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use file except in compliance with the License.
# You may obtain a copy of the license at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# When called with no arguments, this shell script builds the Go database,
# which is somewhat minimal for size reasons (it only contains the most
# commonly used entries), and then builds the complete JSON database.
#
# To limit the action to only building one or more terminals, specify them
# on the command line:
#
# ./mkdatabase xterm
#
# The script will also find and update or add any terminal "aliases".
# It does not remove any old entries.
#
# To add to the set of terminals that we compile into the Go database,
# add their names to the models.txt file.
#
# This script is not very efficient, but there isn't really a better way
# without writing code to decode the terminfo binary format directly.
# Its not worth worrying about.
# This script also requires bash, although ksh93 should work as well, because
# we use arrays, which are not specified in POSIX.
export LANG=C
export LC_CTYPE=C
progress()
{
typeset -i num=$1
typeset -i tot=$2
typeset -i x
typeset back
typeset s
if (( tot < 1 ))
then
s=$(printf "[ %d ]" $num)
back="\b\b\b\b\b"
x=$num
while (( x >= 10 ))
do
back="${back}\b"
x=$(( x / 10 ))
done
else
x=$(( num * 100 / tot ))
s=$(printf "<%3d%%>" $x)
back="\b\b\b\b\b\b"
fi
printf "%s${back}" "$s"
}
ord()
{
printf "%02x" "'$1'"
}
goterms=( $(cat models.txt) )
args=( $* )
if (( ${#args[@]} == 0 ))
then
args=( $(toe -a | cut -f1) )
fi
printf "Scanning terminal definitions: "
i=0
aliases=()
models=()
for term in ${args[@]}
do
case "${term}" in
*-truecolor)
line="${term}|24-bit color"
;;
*)
line=$(infocmp $term | head -2 | tail -1)
if [[ -z "$line" ]]
then
echo "Cannot find terminfo for $term"
exit 1
fi
# take off the trailing comma
line=${line%,}
esac
# grab primary name
term=${line%%|*}
all+=( ${term} )
# should this be in our go terminals?
for model in ${goterms[@]}
do
if [[ "${model}" == "${term}" ]]
then
models+=( ${term} )
fi
done
# chop off primary name
line=${line#${term}}
line=${line#|}
# chop off description
line=${line%|*}
while [[ "$line" != "" ]]
do
a=${line%%|*}
aliases+=( ${a}=${term} )
line=${line#$a}
line=${line#|}
done
i=$(( i + 1 ))
progress $i ${#args[@]}
done
echo
# make sure we have mkinfo
printf "Building mkinfo: "
go build mkinfo.go
echo "done."
# Build all the go database files for the "interesting" terminals".
printf "Building Go database: "
i=0
for model in ${models[@]}
do
safe=$(echo $model | tr - _)
file=term_${safe}.go
./mkinfo -go $file $model
go fmt ${file} >/dev/null
i=$(( i + 1 ))
progress $i ${#models[@]}
done
echo
printf "Building JSON database: "
# The JSON files are located for each terminal in a file with the
# terminal name, in the following fashion "database/x/xterm.json
i=0
for model in ${all[@]}
do
letter=$(ord ${model:0:1})
dir=database/${letter}
file=${dir}/${model}.gz
mkdir -p ${dir}
./mkinfo -nofatal -quiet -gzip -json ${file} ${model}
i=$(( i + 1 ))
progress $i ${#all[@]}
done
echo
printf "Building JSON aliases: "
i=0
for model in ${aliases[@]}
do
canon=${model#*=}
model=${model%=*}
letter=$(ord ${model:0:1})
cletter=$(ord ${canon:0:1})
dir=database/${letter}
file=${dir}/${model}
if [[ -f database/${cletter}/${canon}.gz ]]
then
[[ -d ${dir} ]] || mkdir -p ${dir}
# Generally speaking the aliases are better uncompressed
./mkinfo -nofatal -quiet -json ${file} ${model}
fi
i=$(( i + 1 ))
progress $i ${#aliases[@]}
done
echo

View File

@@ -1,6 +1,6 @@
// +build ignore
// Copyright 2017 The TCell Authors
// Copyright 2018 The TCell Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use file except in compliance with the License.
@@ -22,6 +22,8 @@
//
// mkinfo [-init] [-go file.go] [-json file.json] [-quiet] [-nofatal] [<term>...]
//
// -all scan terminfo to determine database entries to use
// -db generate database entries (database/*), implied for -all
// -gzip specifies output should be compressed (json only)
// -go specifies Go output into the named file. Use - for stdout.
// -json specifies JSON output in the named file. Use - for stdout
@@ -31,8 +33,10 @@
package main
import (
"bufio"
"bytes"
"compress/gzip"
"crypto/sha1"
"encoding/json"
"errors"
"flag"
@@ -40,6 +44,7 @@ import (
"io"
"os"
"os/exec"
"path"
"regexp"
"strconv"
"strings"
@@ -74,6 +79,8 @@ const (
ESC
)
var notaddressable = errors.New("terminal not cursor addressable")
func unescape(s string) string {
// Various escapes are in \x format. Control codes are
// encoded as ^M (carat followed by ASCII equivalent).
@@ -101,8 +108,13 @@ func unescape(s string) string {
switch c {
case 'E', 'e':
buf.WriteByte(0x1b)
case '0':
buf.WriteByte(0)
case '0', '1', '2', '3', '4', '5', '6', '7':
if i+2 < len(s) && s[i+1] >= '0' && s[i+1] <= '7' && s[i+2] >= '0' && s[i+2] <= '7' {
buf.WriteByte(((c - '0') * 64) + ((s[i+1] - '0') * 8) + (s[i+2] - '0'))
i = i + 2
} else if c == '0' {
buf.WriteByte(0)
}
case 'n':
buf.WriteByte('\n')
case 'r':
@@ -126,6 +138,25 @@ func unescape(s string) string {
return (buf.String())
}
func getallterms() ([]string, error) {
out := []string{}
cmd := exec.Command("toe", "-a")
output := &bytes.Buffer{}
cmd.Stdout = output
err := cmd.Run()
if err != nil {
return nil, err
}
lines := strings.Split(output.String(), "\n")
for _, l := range lines {
fields := strings.Fields(l)
if len(fields) > 0 {
out = append(out, fields[0])
}
}
return out, nil
}
func (tc *termcap) setupterm(name string) error {
cmd := exec.Command("infocmp", "-1", name)
output := &bytes.Buffer{}
@@ -178,7 +209,7 @@ func (tc *termcap) setupterm(name string) error {
if k := strings.SplitN(val, "=", 2); len(k) == 2 {
tc.strs[k[0]] = unescape(k[1])
} else if k := strings.SplitN(val, "#", 2); len(k) == 2 {
if u, err := strconv.ParseUint(k[1], 10, 0); err != nil {
if u, err := strconv.ParseUint(k[1], 0, 0); err != nil {
return (err)
} else {
tc.nums[k[0]] = int(u)
@@ -428,7 +459,7 @@ func getinfo(name string) (*terminfo.Terminfo, string, error) {
t.Colors = 0
}
if t.SetCursor == "" {
return nil, "", errors.New("terminal not cursor addressable")
return nil, "", notaddressable
}
// For padding, we lookup the pad char. If that isn't present,
@@ -672,13 +703,135 @@ func dotGoInfo(w io.Writer, t *terminfo.Terminfo, desc string) {
fmt.Fprintln(w, "}")
}
var packname = "terminfo"
func dotGoFile(fname string, term *terminfo.Terminfo, desc string, makeDir bool) error {
w := os.Stdout
var e error
if fname != "-" && fname != "" {
if makeDir {
dname := path.Dir(fname)
_ = os.Mkdir(dname, 0777)
}
if w, e = os.Create(fname); e != nil {
return e
}
}
dotGoHeader(w, packname)
dotGoInfo(w, term, desc)
dotGoTrailer(w)
if w != os.Stdout {
w.Close()
}
cmd := exec.Command("go", "fmt", fname)
cmd.Run()
return nil
}
func dotGzFile(fname string, term *terminfo.Terminfo, makeDir bool) error {
var w io.WriteCloser = os.Stdout
var e error
if fname != "-" && fname != "" {
if makeDir {
dname := path.Dir(fname)
_ = os.Mkdir(dname, 0777)
}
if w, e = os.Create(fname); e != nil {
return e
}
}
w = gzip.NewWriter(w)
js, e := json.Marshal(term)
fmt.Fprintln(w, string(js))
if w != os.Stdout {
w.Close()
}
return nil
}
func jsonFile(fname string, term *terminfo.Terminfo, makeDir bool) error {
w := os.Stdout
var e error
if fname != "-" && fname != "" {
if makeDir {
dname := path.Dir(fname)
_ = os.Mkdir(dname, 0777)
}
if w, e = os.Create(fname); e != nil {
return e
}
}
js, e := json.Marshal(term)
fmt.Fprintln(w, string(js))
if w != os.Stdout {
w.Close()
}
return nil
}
func dumpDatabase(terms map[string]*terminfo.Terminfo, descs map[string]string) {
// Load models .text
mfile, e := os.Open("models.txt")
models := make(map[string]bool)
if e != nil {
fmt.Fprintf(os.Stderr, "Failed reading models.txt: %v", e)
}
scanner := bufio.NewScanner(mfile)
for scanner.Scan() {
models[scanner.Text()] = true
}
for name, t := range terms {
// If this is one of our builtin models, generate the GO file
if models[name] {
desc := descs[name]
safename := strings.Replace(name, "-", "_", -1)
goname := fmt.Sprintf("term_%s.go", safename)
e = dotGoFile(goname, t, desc, true)
if e != nil {
fmt.Fprintf(os.Stderr, "Failed creating %s: %v", goname, e)
os.Exit(1)
}
continue
}
hash := fmt.Sprintf("%x", sha1.Sum([]byte(name)))
fname := fmt.Sprintf("%s.gz", hash[0:8])
fname = path.Join("database", hash[0:2], fname)
e = dotGzFile(fname, t, true)
if e != nil {
fmt.Fprintf(os.Stderr, "Failed creating %s: %v", fname, e)
os.Exit(1)
}
for _, a := range t.Aliases {
hash = fmt.Sprintf("%x", sha1.Sum([]byte(a)))
fname = path.Join("database", hash[0:2], hash[0:8])
e = jsonFile(fname, &terminfo.Terminfo{Name: t.Name}, true)
if e != nil {
fmt.Fprintf(os.Stderr, "Failed creating %s: %v", fname, e)
os.Exit(1)
}
}
}
}
func main() {
gofile := ""
jsonfile := ""
packname := "terminfo"
nofatal := false
quiet := false
dogzip := false
all := false
db := false
flag.StringVar(&gofile, "go", "", "generate go source in named file")
flag.StringVar(&jsonfile, "json", "", "generate json in named file")
@@ -686,11 +839,21 @@ func main() {
flag.BoolVar(&nofatal, "nofatal", false, "errors are not fatal")
flag.BoolVar(&quiet, "quiet", false, "suppress error messages")
flag.BoolVar(&dogzip, "gzip", false, "compress json output")
flag.BoolVar(&all, "all", false, "load all terminals from terminfo")
flag.BoolVar(&db, "db", false, "generate json db file in place")
flag.Parse()
var e error
js := []byte{}
args := flag.Args()
if all {
db = true // implied
allterms, e := getallterms()
if e != nil {
fmt.Fprintf(os.Stderr, "Failed: %v", e)
os.Exit(1)
}
args = append(args, allterms...)
}
if len(args) == 0 {
args = []string{os.Getenv("TERM")}
}
@@ -700,6 +863,9 @@ func main() {
for _, term := range args {
if t, desc, e := getinfo(term); e != nil {
if all && e == notaddressable {
continue
}
if !quiet {
fmt.Fprintf(os.Stderr,
"Failed loading %s: %v\n", term, e)
@@ -717,53 +883,33 @@ func main() {
// No data.
os.Exit(0)
}
if gofile != "" {
w := os.Stdout
if gofile != "-" {
if w, e = os.Create(gofile); e != nil {
fmt.Fprintf(os.Stderr, "Failed: %v", e)
os.Exit(1)
}
}
dotGoHeader(w, packname)
if db {
dumpDatabase(tdata, descs)
} else if gofile != "" {
for term, t := range tdata {
if t.Name == term {
dotGoInfo(w, t, descs[term])
e = dotGoFile(gofile, t, descs[term], false)
if e != nil {
fmt.Fprintf(os.Stderr, "Failed %s: %v", gofile, e)
os.Exit(1)
}
}
}
dotGoTrailer(w)
if w != os.Stdout {
w.Close()
}
} else {
o := os.Stdout
if jsonfile != "-" && jsonfile != "" {
if o, e = os.Create(jsonfile); e != nil {
fmt.Fprintf(os.Stderr, "Failed: %v", e)
for _, t := range tdata {
if dogzip {
if e = dotGzFile(jsonfile, t, false); e != nil {
fmt.Fprintf(os.Stderr, "Failed %s: %v", gofile, e)
os.Exit(1)
}
} else {
if e = jsonFile(jsonfile, t, false); e != nil {
fmt.Fprintf(os.Stderr, "Failed %s: %v", gofile, e)
os.Exit(1)
}
}
}
var w io.WriteCloser
w = o
if dogzip {
w = gzip.NewWriter(o)
}
for _, term := range args {
if t := tdata[term]; t != nil {
js, e = json.Marshal(t)
fmt.Fprintln(w, string(js))
}
// arguably if there is more than one term, this
// should be a javascript array, but that's not how
// we load it. We marshal objects one at a time from
// the file.
}
if e != nil {
fmt.Fprintf(os.Stderr, "Failed: %v", e)
os.Exit(1)
}
w.Close()
if w != o {
o.Close()
}
}
}

View File

@@ -8,8 +8,6 @@ cygwin
d200
d210
dtterm
Eterm
Eterm-256color
eterm
gnome
gnome-256color

View File

@@ -1,24 +0,0 @@
// Generated automatically. DO NOT HAND-EDIT.
package terminfo
func init() {
// gnu emacs term.el terminal emulation
AddTerminfo(&Terminfo{
Name: "eterm",
Columns: 80,
Lines: 24,
Bell: "\a",
Clear: "\x1b[H\x1b[J",
EnterCA: "\x1b7\x1b[?47h",
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
AttrOff: "\x1b[m",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Reverse: "\x1b[7m",
PadChar: "\x00",
SetCursor: "\x1b[%i%p1%d;%p2%dH",
CursorBack1: "\b",
CursorUp1: "\x1b[A",
})
}

View File

@@ -1,105 +0,0 @@
// Generated automatically. DO NOT HAND-EDIT.
package terminfo
func init() {
// Eterm with xterm 256-colors
AddTerminfo(&Terminfo{
Name: "Eterm-256color",
Columns: 80,
Lines: 24,
Colors: 256,
Bell: "\a",
Clear: "\x1b[H\x1b[2J",
EnterCA: "\x1b7\x1b[?47h",
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
ShowCursor: "\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[m\x0017",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Blink: "\x1b[5m",
Reverse: "\x1b[7m",
SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m",
PadChar: "\x00",
AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
EnterAcs: "\x0e",
ExitAcs: "\x0f",
EnableAcs: "\x1b)0",
Mouse: "\x1b[M",
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",
SetCursor: "\x1b[%i%p1%d;%p2%dH",
CursorBack1: "\b",
CursorUp1: "\x1b[A",
KeyUp: "\x1b[A",
KeyDown: "\x1b[B",
KeyRight: "\x1b[C",
KeyLeft: "\x1b[D",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "\b",
KeyHome: "\x1b[7~",
KeyEnd: "\x1b[8~",
KeyPgUp: "\x1b[5~",
KeyPgDn: "\x1b[6~",
KeyF1: "\x1b[11~",
KeyF2: "\x1b[12~",
KeyF3: "\x1b[13~",
KeyF4: "\x1b[14~",
KeyF5: "\x1b[15~",
KeyF6: "\x1b[17~",
KeyF7: "\x1b[18~",
KeyF8: "\x1b[19~",
KeyF9: "\x1b[20~",
KeyF10: "\x1b[21~",
KeyF11: "\x1b[23~",
KeyF12: "\x1b[24~",
KeyF13: "\x1b[25~",
KeyF14: "\x1b[26~",
KeyF15: "\x1b[28~",
KeyF16: "\x1b[29~",
KeyF17: "\x1b[31~",
KeyF18: "\x1b[32~",
KeyF19: "\x1b[33~",
KeyF20: "\x1b[34~",
KeyF21: "\x1b[23$",
KeyF22: "\x1b[24$",
KeyF23: "\x1b[11^",
KeyF24: "\x1b[12^",
KeyF25: "\x1b[13^",
KeyF26: "\x1b[14^",
KeyF27: "\x1b[15^",
KeyF28: "\x1b[17^",
KeyF29: "\x1b[18^",
KeyF30: "\x1b[19^",
KeyF31: "\x1b[20^",
KeyF32: "\x1b[21^",
KeyF33: "\x1b[23^",
KeyF34: "\x1b[24^",
KeyF35: "\x1b[25^",
KeyF36: "\x1b[26^",
KeyF37: "\x1b[28^",
KeyF38: "\x1b[29^",
KeyF39: "\x1b[31^",
KeyF40: "\x1b[32^",
KeyF41: "\x1b[33^",
KeyF42: "\x1b[34^",
KeyF43: "\x1b[23@",
KeyF44: "\x1b[24@",
KeyHelp: "\x1b[28~",
KeyShfLeft: "\x1b[d",
KeyShfRight: "\x1b[c",
KeyShfUp: "\x1b[a",
KeyShfDown: "\x1b[b",
KeyCtrlLeft: "\x1b[Od",
KeyCtrlRight: "\x1b[Oc",
KeyCtrlUp: "\x1b[Oa",
KeyCtrlDown: "\x1b[Ob",
KeyShfHome: "\x1b[7$",
KeyShfEnd: "\x1b[8$",
KeyCtrlHome: "\x1b[7^",
KeyCtrlEnd: "\x1b[8^",
})
}

View File

@@ -9,7 +9,7 @@ func init() {
Columns: 80,
Lines: 24,
Bell: "\a",
Clear: "\x0032$<1/>",
Clear: "\x1a$<1/>",
PadChar: "\x00",
SetCursor: "\x1b=%p1%' '%+%c%p2%' '%+%c",
CursorBack1: "\b",

View File

@@ -20,7 +20,7 @@ func init() {
SetBg: "\x1b[4%p1%dm",
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
PadChar: "\x00",
AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376",
AltChars: "+\x10,\x11-\x18.\x190\xdb`\x04a\xb1f\xf8g\xf1h\xb0j\xd9k\xbfl\xdam\xc0n\xc5o~p\xc4q\xc4r\xc4s_t\xc3u\xb4v\xc1w\xc2x\xb3y\xf3z\xf2{\xe3|\xd8}\x9c~\xfe",
EnterAcs: "\x1b[11m",
ExitAcs: "\x1b[10m",
SetCursor: "\x1b[%i%p1%d;%p2%dH",

View File

@@ -15,7 +15,7 @@ func init() {
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
ShowCursor: "\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[m\x0017",
AttrOff: "\x1b[m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Blink: "\x1b[5m",
@@ -41,7 +41,7 @@ func init() {
KeyLeft: "\x1b[D",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1b[7~",
KeyEnd: "\x1b[8~",
KeyPgUp: "\x1b[5~",

View File

@@ -20,7 +20,7 @@ func init() {
SetBg: "\x1b[4%p1%dm",
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
PadChar: "\x00",
AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376",
AltChars: "+\x10,\x11-\x18.\x190\xdb`\x04a\xb1f\xf8g\xf1h\xb0j\xd9k\xbfl\xdam\xc0n\xc5o~p\xc4q\xc4r\xc4s_t\xc3u\xb4v\xc1w\xc2x\xb3y\xf3z\xf2{\xe3|\xd8}\x9c~\xfe",
EnterAcs: "\x1b[11m",
ExitAcs: "\x1b[10m",
SetCursor: "\x1b[%i%p1%d;%p2%dH",

View File

@@ -19,7 +19,7 @@ func init() {
SetBg: "\x1b[4%p1%dm",
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
PadChar: "\x00",
AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376",
AltChars: "+\x10,\x11-\x18.\x190\xdb`\x04a\xb1f\xf8g\xf1h\xb0j\xd9k\xbfl\xdam\xc0n\xc5o~p\xc4q\xc4r\xc4s_t\xc3u\xb4v\xc1w\xc2x\xb3y\xf3z\xf2{\xe3|\xd8}\x9c~\xfe",
EnterAcs: "\x1b[11m",
ExitAcs: "\x1b[10m",
SetCursor: "\x1b[%i%p1%d;%p2%dH",

View File

@@ -11,14 +11,14 @@ func init() {
Lines: 24,
Bell: "\a",
Clear: "\f",
AttrOff: "\x0017\x0025\x0035\x0036E",
AttrOff: "\x0f\x15\x1d\x1eE",
Underline: "\x14",
Bold: "\x1eD\x14",
Dim: "\x1c",
Blink: "\x0e",
Reverse: "\x1eD",
PadChar: "\x00",
SetCursor: "\x0020%p2%c%p1%c",
SetCursor: "\x10%p2%c%p1%c",
CursorBack1: "\x19",
CursorUp1: "\x17",
KeyUp: "\x17",

View File

@@ -13,7 +13,7 @@ func init() {
Clear: "\x1b[H\x1b[J",
ShowCursor: "\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[m\x0017",
AttrOff: "\x1b[m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",

View File

@@ -15,9 +15,10 @@ func init() {
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
ShowCursor: "\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[0m\x0017",
AttrOff: "\x1b[0m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",
Reverse: "\x1b[7m",
EnterKeypad: "\x1b[?1h\x1b=",
ExitKeypad: "\x1b[?1l\x1b>",
@@ -40,7 +41,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1bOH",
KeyEnd: "\x1bOF",
KeyPgUp: "\x1b[5~",

View File

@@ -15,9 +15,10 @@ func init() {
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
ShowCursor: "\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[0m\x0017",
AttrOff: "\x1b[0m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",
Reverse: "\x1b[7m",
EnterKeypad: "\x1b[?1h\x1b=",
ExitKeypad: "\x1b[?1l\x1b>",
@@ -40,7 +41,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1bOH",
KeyEnd: "\x1bOF",
KeyPgUp: "\x1b[5~",
@@ -57,10 +58,10 @@ func init() {
KeyF10: "\x1b[21~",
KeyF11: "\x1b[23~",
KeyF12: "\x1b[24~",
KeyF13: "\x1bO1;2P",
KeyF14: "\x1bO1;2Q",
KeyF15: "\x1bO1;2R",
KeyF16: "\x1bO1;2S",
KeyF13: "\x1b[1;2P",
KeyF14: "\x1b[1;2Q",
KeyF15: "\x1b[1;2R",
KeyF16: "\x1b[1;2S",
KeyF17: "\x1b[15;2~",
KeyF18: "\x1b[17;2~",
KeyF19: "\x1b[18;2~",
@@ -69,10 +70,10 @@ func init() {
KeyF22: "\x1b[21;2~",
KeyF23: "\x1b[23;2~",
KeyF24: "\x1b[24;2~",
KeyF25: "\x1bO1;5P",
KeyF26: "\x1bO1;5Q",
KeyF27: "\x1bO1;5R",
KeyF28: "\x1bO1;5S",
KeyF25: "\x1b[1;5P",
KeyF26: "\x1b[1;5Q",
KeyF27: "\x1b[1;5R",
KeyF28: "\x1b[1;5S",
KeyF29: "\x1b[15;5~",
KeyF30: "\x1b[17;5~",
KeyF31: "\x1b[18;5~",
@@ -81,10 +82,10 @@ func init() {
KeyF34: "\x1b[21;5~",
KeyF35: "\x1b[23;5~",
KeyF36: "\x1b[24;5~",
KeyF37: "\x1bO1;6P",
KeyF38: "\x1bO1;6Q",
KeyF39: "\x1bO1;6R",
KeyF40: "\x1bO1;6S",
KeyF37: "\x1b[1;6P",
KeyF38: "\x1b[1;6Q",
KeyF39: "\x1b[1;6R",
KeyF40: "\x1b[1;6S",
KeyF41: "\x1b[15;6~",
KeyF42: "\x1b[17;6~",
KeyF43: "\x1b[18;6~",
@@ -93,10 +94,10 @@ func init() {
KeyF46: "\x1b[21;6~",
KeyF47: "\x1b[23;6~",
KeyF48: "\x1b[24;6~",
KeyF49: "\x1bO1;3P",
KeyF50: "\x1bO1;3Q",
KeyF51: "\x1bO1;3R",
KeyF52: "\x1bO1;3S",
KeyF49: "\x1b[1;3P",
KeyF50: "\x1b[1;3Q",
KeyF51: "\x1b[1;3R",
KeyF52: "\x1b[1;3S",
KeyF53: "\x1b[15;3~",
KeyF54: "\x1b[17;3~",
KeyF55: "\x1b[18;3~",
@@ -105,9 +106,9 @@ func init() {
KeyF58: "\x1b[21;3~",
KeyF59: "\x1b[23;3~",
KeyF60: "\x1b[24;3~",
KeyF61: "\x1bO1;4P",
KeyF62: "\x1bO1;4Q",
KeyF63: "\x1bO1;4R",
KeyF61: "\x1b[1;4P",
KeyF62: "\x1b[1;4Q",
KeyF63: "\x1b[1;4R",
KeyBacktab: "\x1b[Z",
KeyShfLeft: "\x1b[1;2D",
KeyShfRight: "\x1b[1;2C",

View File

@@ -11,7 +11,7 @@ func init() {
Bell: "\a",
Clear: "~\x1c",
PadChar: "\x00",
SetCursor: "~\x0021%p2%p2%?%{30}%>%t%' '%+%;%'`'%+%c%p1%'`'%+%c",
SetCursor: "~\x11%p2%p2%?%{30}%>%t%' '%+%;%'`'%+%c%p1%'`'%+%c",
CursorBack1: "\b",
CursorUp1: "~\f",
KeyUp: "~\f",

View File

@@ -14,7 +14,7 @@ func init() {
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
ShowCursor: "\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[0m\x0017",
AttrOff: "\x1b[0m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Blink: "\x1b[5m",
@@ -39,7 +39,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1bOH",
KeyEnd: "\x1bOF",
KeyPgUp: "\x1b[5~",

View File

@@ -14,7 +14,7 @@ func init() {
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
ShowCursor: "\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[0m\x0017",
AttrOff: "\x1b[0m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Blink: "\x1b[5m",
@@ -39,7 +39,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1bOH",
KeyEnd: "\x1bOF",
KeyPgUp: "\x1b[5~",

View File

@@ -11,7 +11,7 @@ func init() {
Clear: "\x1b[H\x1b[J",
ShowCursor: "\x1b[?25h\x1b[?0c",
HideCursor: "\x1b[?25l\x1b[?1c",
AttrOff: "\x1b[0;10m",
AttrOff: "\x1b[m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",
@@ -21,9 +21,10 @@ func init() {
SetBg: "\x1b[4%p1%dm",
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
PadChar: "\x00",
AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260i316j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376",
EnterAcs: "\x1b[11m",
ExitAcs: "\x1b[10m",
AltChars: "++,,--..00__``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}c~~",
EnterAcs: "\x0e",
ExitAcs: "\x0f",
EnableAcs: "\x1b(B\x1b)0",
Mouse: "\x1b[M",
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",
SetCursor: "\x1b[%i%p1%d;%p2%dH",
@@ -35,7 +36,7 @@ func init() {
KeyLeft: "\x1b[D",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1b[1~",
KeyEnd: "\x1b[4~",
KeyPgUp: "\x1b[5~",

View File

@@ -20,7 +20,7 @@ func init() {
SetBg: "\x1b[4%p1%dm",
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
PadChar: "\x00",
AltChars: "+\x0020,\x0021-\x0030.\x190333`\x0004a261f370g361h260j331k277l332m300n305o~p304q304r304s_t303u264v301w302x263y363z362{343|330}234~376",
AltChars: "+\x10,\x11-\x18.\x190\xdb`\x04a\xb1f\xf8g\xf1h\xb0j\xd9k\xbfl\xdam\xc0n\xc5o~p\xc4q\xc4r\xc4s_t\xc3u\xb4v\xc1w\xc2x\xb3y\xf3z\xf2{\xe3|\xd8}\x9c~\xfe",
EnterAcs: "\x1b[12m",
ExitAcs: "\x1b[10m",
SetCursor: "\x1b[%i%p1%d;%p2%dH",

View File

@@ -15,7 +15,7 @@ func init() {
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
ShowCursor: "\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[m\x0017",
AttrOff: "\x1b[m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Blink: "\x1b[5m",
@@ -41,7 +41,7 @@ func init() {
KeyLeft: "\x1b[D",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "\b",
KeyBackspace: "\u007f",
KeyHome: "\x1b[7~",
KeyEnd: "\x1b[8~",
KeyPgUp: "\x1b[5~",

View File

@@ -15,7 +15,7 @@ func init() {
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
ShowCursor: "\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[m\x0017",
AttrOff: "\x1b[m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Blink: "\x1b[5m",
@@ -41,7 +41,7 @@ func init() {
KeyLeft: "\x1b[D",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "\b",
KeyBackspace: "\u007f",
KeyHome: "\x1b[7~",
KeyEnd: "\x1b[8~",
KeyPgUp: "\x1b[5~",

View File

@@ -39,7 +39,7 @@ func init() {
KeyLeft: "\x1b[D",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1b[7~",
KeyEnd: "\x1b[8~",
KeyPgUp: "\x1b[5~",

View File

@@ -39,7 +39,7 @@ func init() {
KeyLeft: "\x1b[D",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1b[7~",
KeyEnd: "\x1b[8~",
KeyPgUp: "\x1b[5~",

View File

@@ -15,9 +15,10 @@ func init() {
ExitCA: "\x1b[?1049l",
ShowCursor: "\x1b[34h\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[m\x0017",
AttrOff: "\x1b[m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",
Blink: "\x1b[5m",
Reverse: "\x1b[7m",
EnterKeypad: "\x1b[?1h\x1b=",
@@ -41,7 +42,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "\b",
KeyBackspace: "\u007f",
KeyHome: "\x1b[1~",
KeyEnd: "\x1b[4~",
KeyPgUp: "\x1b[5~",

View File

@@ -15,9 +15,10 @@ func init() {
ExitCA: "\x1b[?1049l",
ShowCursor: "\x1b[34h\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[m\x0017",
AttrOff: "\x1b[m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",
Blink: "\x1b[5m",
Reverse: "\x1b[7m",
EnterKeypad: "\x1b[?1h\x1b=",
@@ -41,7 +42,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "\b",
KeyBackspace: "\u007f",
KeyHome: "\x1b[1~",
KeyEnd: "\x1b[4~",
KeyPgUp: "\x1b[5~",

View File

@@ -3,9 +3,10 @@
package terminfo
func init() {
// simpleterm
// simpleterm 0.4.1
AddTerminfo(&Terminfo{
Name: "st",
Aliases: []string{"stterm"},
Columns: 80,
Lines: 24,
Colors: 8,
@@ -18,7 +19,6 @@ func init() {
AttrOff: "\x1b[0m",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",
Blink: "\x1b[5m",
Reverse: "\x1b[7m",
EnterKeypad: "\x1b[?1h\x1b=",
@@ -26,7 +26,8 @@ func init() {
SetFg: "\x1b[3%p1%dm",
SetBg: "\x1b[4%p1%dm",
SetFgBg: "\x1b[3%p1%d;4%p2%dm",
AltChars: "+C,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
PadChar: "\x00",
AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
EnterAcs: "\x1b(0",
ExitAcs: "\x1b(B",
EnableAcs: "\x1b)0",
@@ -41,7 +42,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1b[1~",
KeyEnd: "\x1b[4~",
KeyPgUp: "\x1b[5~",

View File

@@ -0,0 +1,156 @@
// Generated automatically. DO NOT HAND-EDIT.
package terminfo
func init() {
// simpleterm with 256 colors
AddTerminfo(&Terminfo{
Name: "st-256color",
Aliases: []string{"stterm-256color"},
Columns: 80,
Lines: 24,
Colors: 256,
Bell: "\a",
Clear: "\x1b[H\x1b[2J",
EnterCA: "\x1b[?1049h",
ExitCA: "\x1b[?1049l",
ShowCursor: "\x1b[?12l\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[0m",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Blink: "\x1b[5m",
Reverse: "\x1b[7m",
EnterKeypad: "\x1b[?1h\x1b=",
ExitKeypad: "\x1b[?1l\x1b>",
SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m",
PadChar: "\x00",
AltChars: "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
EnterAcs: "\x1b(0",
ExitAcs: "\x1b(B",
EnableAcs: "\x1b)0",
Mouse: "\x1b[M",
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",
SetCursor: "\x1b[%i%p1%d;%p2%dH",
CursorBack1: "\b",
CursorUp1: "\x1b[A",
KeyUp: "\x1bOA",
KeyDown: "\x1bOB",
KeyRight: "\x1bOC",
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "\u007f",
KeyHome: "\x1b[1~",
KeyEnd: "\x1b[4~",
KeyPgUp: "\x1b[5~",
KeyPgDn: "\x1b[6~",
KeyF1: "\x1bOP",
KeyF2: "\x1bOQ",
KeyF3: "\x1bOR",
KeyF4: "\x1bOS",
KeyF5: "\x1b[15~",
KeyF6: "\x1b[17~",
KeyF7: "\x1b[18~",
KeyF8: "\x1b[19~",
KeyF9: "\x1b[20~",
KeyF10: "\x1b[21~",
KeyF11: "\x1b[23~",
KeyF12: "\x1b[24~",
KeyF13: "\x1b[1;2P",
KeyF14: "\x1b[1;2Q",
KeyF15: "\x1b[1;2R",
KeyF16: "\x1b[1;2S",
KeyF17: "\x1b[15;2~",
KeyF18: "\x1b[17;2~",
KeyF19: "\x1b[18;2~",
KeyF20: "\x1b[19;2~",
KeyF21: "\x1b[20;2~",
KeyF22: "\x1b[21;2~",
KeyF23: "\x1b[23;2~",
KeyF24: "\x1b[24;2~",
KeyF25: "\x1b[1;5P",
KeyF26: "\x1b[1;5Q",
KeyF27: "\x1b[1;5R",
KeyF28: "\x1b[1;5S",
KeyF29: "\x1b[15;5~",
KeyF30: "\x1b[17;5~",
KeyF31: "\x1b[18;5~",
KeyF32: "\x1b[19;5~",
KeyF33: "\x1b[20;5~",
KeyF34: "\x1b[21;5~",
KeyF35: "\x1b[23;5~",
KeyF36: "\x1b[24;5~",
KeyF37: "\x1b[1;6P",
KeyF38: "\x1b[1;6Q",
KeyF39: "\x1b[1;6R",
KeyF40: "\x1b[1;6S",
KeyF41: "\x1b[15;6~",
KeyF42: "\x1b[17;6~",
KeyF43: "\x1b[18;6~",
KeyF44: "\x1b[19;6~",
KeyF45: "\x1b[20;6~",
KeyF46: "\x1b[21;6~",
KeyF47: "\x1b[23;6~",
KeyF48: "\x1b[24;6~",
KeyF49: "\x1b[1;3P",
KeyF50: "\x1b[1;3Q",
KeyF51: "\x1b[1;3R",
KeyF52: "\x1b[1;3S",
KeyF53: "\x1b[15;3~",
KeyF54: "\x1b[17;3~",
KeyF55: "\x1b[18;3~",
KeyF56: "\x1b[19;3~",
KeyF57: "\x1b[20;3~",
KeyF58: "\x1b[21;3~",
KeyF59: "\x1b[23;3~",
KeyF60: "\x1b[24;3~",
KeyF61: "\x1b[1;4P",
KeyF62: "\x1b[1;4Q",
KeyF63: "\x1b[1;4R",
KeyClear: "\x1b[3;5~",
KeyBacktab: "\x1b[Z",
KeyShfLeft: "\x1b[1;2D",
KeyShfRight: "\x1b[1;2C",
KeyShfUp: "\x1b[1;2A",
KeyShfDown: "\x1b[1;2B",
KeyCtrlLeft: "\x1b[1;5D",
KeyCtrlRight: "\x1b[1;5C",
KeyCtrlUp: "\x1b[1;5A",
KeyCtrlDown: "\x1b[1;5B",
KeyMetaLeft: "\x1b[1;9D",
KeyMetaRight: "\x1b[1;9C",
KeyMetaUp: "\x1b[1;9A",
KeyMetaDown: "\x1b[1;9B",
KeyAltLeft: "\x1b[1;3D",
KeyAltRight: "\x1b[1;3C",
KeyAltUp: "\x1b[1;3A",
KeyAltDown: "\x1b[1;3B",
KeyAltShfLeft: "\x1b[1;4D",
KeyAltShfRight: "\x1b[1;4C",
KeyAltShfUp: "\x1b[1;4A",
KeyAltShfDown: "\x1b[1;4B",
KeyMetaShfLeft: "\x1b[1;10D",
KeyMetaShfRight: "\x1b[1;10C",
KeyMetaShfUp: "\x1b[1;10A",
KeyMetaShfDown: "\x1b[1;10B",
KeyCtrlShfLeft: "\x1b[1;6D",
KeyCtrlShfRight: "\x1b[1;6C",
KeyCtrlShfUp: "\x1b[1;6A",
KeyCtrlShfDown: "\x1b[1;6B",
KeyShfHome: "\x1b[1;2H",
KeyShfEnd: "\x1b[1;2F",
KeyCtrlHome: "\x1b[1;5H",
KeyCtrlEnd: "\x1b[1;5F",
KeyAltHome: "\x1b[1;9H",
KeyAltEnd: "\x1b[1;9F",
KeyCtrlShfHome: "\x1b[1;6H",
KeyCtrlShfEnd: "\x1b[1;6F",
KeyMetaShfHome: "\x1b[1;10H",
KeyMetaShfEnd: "\x1b[1;10F",
KeyAltShfHome: "\x1b[1;4H",
KeyAltShfEnd: "\x1b[1;4F",
})
}

View File

@@ -41,7 +41,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1b[1~",
KeyEnd: "\x1b[4~",
KeyPgUp: "\x1b[5~",

View File

@@ -41,7 +41,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1b[1~",
KeyEnd: "\x1b[4~",
KeyPgUp: "\x1b[5~",

View File

@@ -21,7 +21,8 @@ func init() {
KeyDown: "\x1b[B",
KeyRight: "\x1b[C",
KeyLeft: "\x1b[D",
KeyDelete: "177",
KeyInsert: "\x1b[247z",
KeyDelete: "\u007f",
KeyBackspace: "\b",
KeyHome: "\x1b[214z",
KeyEnd: "\x1b[220z",

View File

@@ -12,6 +12,7 @@ func init() {
Bell: "\a",
Clear: "\f",
AttrOff: "\x1b[m",
Bold: "\x1b[1m",
Reverse: "\x1b[7m",
SetFg: "\x1b[3%p1%dm",
SetBg: "\x1b[4%p1%dm",
@@ -24,7 +25,8 @@ func init() {
KeyDown: "\x1b[B",
KeyRight: "\x1b[C",
KeyLeft: "\x1b[D",
KeyDelete: "177",
KeyInsert: "\x1b[247z",
KeyDelete: "\u007f",
KeyBackspace: "\b",
KeyHome: "\x1b[214z",
KeyEnd: "\x1b[220z",

View File

@@ -0,0 +1,152 @@
// Generated automatically. DO NOT HAND-EDIT.
package terminfo
func init() {
// VTE-based terminal
AddTerminfo(&Terminfo{
Name: "xterm-termite",
Columns: 80,
Lines: 24,
Colors: 256,
Bell: "\a",
Clear: "\x1b[H\x1b[2J",
EnterCA: "\x1b[?1049h",
ExitCA: "\x1b[?1049l",
ShowCursor: "\x1b[?12l\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b(B\x1b[m",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",
Reverse: "\x1b[7m",
EnterKeypad: "\x1b[?1h\x1b=",
ExitKeypad: "\x1b[?1l\x1b>",
SetFg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m",
SetBg: "\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m",
SetFgBg: "\x1b[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;;%?%p2%{8}%<%t4%p2%d%e%p2%{16}%<%t10%p2%{8}%-%d%e48;5;%p2%d%;m",
AltChars: "++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
EnterAcs: "\x1b(0",
ExitAcs: "\x1b(B",
Mouse: "\x1b[M",
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",
SetCursor: "\x1b[%i%p1%d;%p2%dH",
CursorBack1: "\b",
CursorUp1: "\x1b[A",
KeyUp: "\x1bOA",
KeyDown: "\x1bOB",
KeyRight: "\x1bOC",
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "\xff",
KeyHome: "\x1bOH",
KeyEnd: "\x1bOF",
KeyPgUp: "\x1b[5~",
KeyPgDn: "\x1b[6~",
KeyF1: "\x1bOP",
KeyF2: "\x1bOQ",
KeyF3: "\x1bOR",
KeyF4: "\x1bOS",
KeyF5: "\x1b[15~",
KeyF6: "\x1b[17~",
KeyF7: "\x1b[18~",
KeyF8: "\x1b[19~",
KeyF9: "\x1b[20~",
KeyF10: "\x1b[21~",
KeyF11: "\x1b[23~",
KeyF12: "\x1b[24~",
KeyF13: "\x1b[1;2P",
KeyF14: "\x1b[1;2Q",
KeyF15: "\x1b[1;2R",
KeyF16: "\x1b[1;2S",
KeyF17: "\x1b[15;2~",
KeyF18: "\x1b[17;2~",
KeyF19: "\x1b[18;2~",
KeyF20: "\x1b[19;2~",
KeyF21: "\x1b[20;2~",
KeyF22: "\x1b[21;2~",
KeyF23: "\x1b[23;2~",
KeyF24: "\x1b[24;2~",
KeyF25: "\x1b[1;5P",
KeyF26: "\x1b[1;5Q",
KeyF27: "\x1b[1;5R",
KeyF28: "\x1b[1;5S",
KeyF29: "\x1b[15;5~",
KeyF30: "\x1b[17;5~",
KeyF31: "\x1b[18;5~",
KeyF32: "\x1b[19;5~",
KeyF33: "\x1b[20;5~",
KeyF34: "\x1b[21;5~",
KeyF35: "\x1b[23;5~",
KeyF36: "\x1b[24;5~",
KeyF37: "\x1b[1;6P",
KeyF38: "\x1b[1;6Q",
KeyF39: "\x1b[1;6R",
KeyF40: "\x1b[1;6S",
KeyF41: "\x1b[15;6~",
KeyF42: "\x1b[17;6~",
KeyF43: "\x1b[18;6~",
KeyF44: "\x1b[19;6~",
KeyF45: "\x1b[20;6~",
KeyF46: "\x1b[21;6~",
KeyF47: "\x1b[23;6~",
KeyF48: "\x1b[24;6~",
KeyF49: "\x1b[1;3P",
KeyF50: "\x1b[1;3Q",
KeyF51: "\x1b[1;3R",
KeyF52: "\x1b[1;3S",
KeyF53: "\x1b[15;3~",
KeyF54: "\x1b[17;3~",
KeyF55: "\x1b[18;3~",
KeyF56: "\x1b[19;3~",
KeyF57: "\x1b[20;3~",
KeyF58: "\x1b[21;3~",
KeyF59: "\x1b[23;3~",
KeyF60: "\x1b[24;3~",
KeyF61: "\x1b[1;4P",
KeyF62: "\x1b[1;4Q",
KeyF63: "\x1b[1;4R",
KeyBacktab: "\x1b[Z",
KeyShfLeft: "\x1b[1;2D",
KeyShfRight: "\x1b[1;2C",
KeyShfUp: "\x1b[1;2A",
KeyShfDown: "\x1b[1;2B",
KeyCtrlLeft: "\x1b[1;5D",
KeyCtrlRight: "\x1b[1;5C",
KeyCtrlUp: "\x1b[1;5A",
KeyCtrlDown: "\x1b[1;5B",
KeyMetaLeft: "\x1b[1;9D",
KeyMetaRight: "\x1b[1;9C",
KeyMetaUp: "\x1b[1;9A",
KeyMetaDown: "\x1b[1;9B",
KeyAltLeft: "\x1b[1;3D",
KeyAltRight: "\x1b[1;3C",
KeyAltUp: "\x1b[1;3A",
KeyAltDown: "\x1b[1;3B",
KeyAltShfLeft: "\x1b[1;4D",
KeyAltShfRight: "\x1b[1;4C",
KeyAltShfUp: "\x1b[1;4A",
KeyAltShfDown: "\x1b[1;4B",
KeyMetaShfLeft: "\x1b[1;10D",
KeyMetaShfRight: "\x1b[1;10C",
KeyMetaShfUp: "\x1b[1;10A",
KeyMetaShfDown: "\x1b[1;10B",
KeyCtrlShfLeft: "\x1b[1;6D",
KeyCtrlShfRight: "\x1b[1;6C",
KeyCtrlShfUp: "\x1b[1;6A",
KeyCtrlShfDown: "\x1b[1;6B",
KeyShfHome: "\x1b[1;2H",
KeyShfEnd: "\x1b[1;2F",
KeyCtrlHome: "\x1b[1;5H",
KeyCtrlEnd: "\x1b[1;5F",
KeyAltHome: "\x1b[1;9H",
KeyAltEnd: "\x1b[1;9F",
KeyCtrlShfHome: "\x1b[1;6H",
KeyCtrlShfEnd: "\x1b[1;6F",
KeyMetaShfHome: "\x1b[1;10H",
KeyMetaShfEnd: "\x1b[1;10F",
KeyAltShfHome: "\x1b[1;4H",
KeyAltShfEnd: "\x1b[1;4F",
})
}

View File

@@ -14,7 +14,7 @@ func init() {
Underline: "\x1bG8",
Reverse: "\x1bG4",
PadChar: "\x00",
AltChars: "b\x0011c\x0014d\re\ni\x0013",
AltChars: "b\tc\fd\re\ni\v",
EnterAcs: "\x15",
ExitAcs: "\x18",
SetCursor: "\x1b=%p1%' '%+%c%p2%' '%+%c",

View File

@@ -11,7 +11,7 @@ func init() {
Lines: 24,
Bell: "\a",
Clear: "\x1b[H\x1b[J$<50>",
AttrOff: "\x1b[m\x0017$<2>",
AttrOff: "\x1b[m\x0f$<2>",
Underline: "\x1b[4m$<2>",
Bold: "\x1b[1m$<2>",
Blink: "\x1b[5m$<2>",

View File

@@ -10,7 +10,7 @@ func init() {
Lines: 24,
Bell: "\a",
Clear: "\x1b[H\x1b[J$<50>",
AttrOff: "\x1b[m\x0017$<2>",
AttrOff: "\x1b[m\x0f$<2>",
Underline: "\x1b[4m$<2>",
Bold: "\x1b[1m$<2>",
Blink: "\x1b[5m$<2>",

View File

@@ -29,6 +29,7 @@ func init() {
KeyRight: "\x1b[C",
KeyLeft: "\x1b[D",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "\b",
KeyPgUp: "\x1b[5~",
KeyPgDn: "\x1b[6~",

View File

@@ -33,7 +33,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1b[1~",
KeyPgUp: "\x1b[5~",
KeyPgDn: "\x1b[6~",

View File

@@ -10,7 +10,9 @@ func init() {
Lines: 24,
Bell: "\a",
Clear: "\x1b[H\x1b[2J$<50>",
AttrOff: "\x1b[m$<2>",
ShowCursor: "\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[m\x1b(B$<2>",
Underline: "\x1b[4m",
Bold: "\x1b[1m$<2>",
Blink: "\x1b[5m$<2>",
@@ -21,6 +23,7 @@ func init() {
AltChars: "``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~",
EnterAcs: "\x1b(0$<2>",
ExitAcs: "\x1b(B$<4>",
EnableAcs: "\x1b)0",
SetCursor: "\x1b[%i%p1%d;%p2%dH$<10>",
CursorBack1: "\b",
CursorUp1: "\x1b[A",

View File

@@ -11,7 +11,7 @@ func init() {
Bell: "\a",
Clear: "\x1bH\x1bJ",
PadChar: "\x00",
AltChars: ".kffgghhompoqqss",
AltChars: "+h.k0affggolpnqprrss",
EnterAcs: "\x1bF",
ExitAcs: "\x1bG",
SetCursor: "\x1bY%p1%' '%+%c%p2%' '%+%c",

View File

@@ -13,7 +13,7 @@ func init() {
Clear: "\x1b+$<20>",
ShowCursor: "\x1b`1",
HideCursor: "\x1b`0",
AttrOff: "\x1b(\x1bH\x0003",
AttrOff: "\x1b(\x1bH\x03",
Dim: "\x1b`7\x1b)",
Reverse: "\x1b`6\x1b)",
PadChar: "\x00",

View File

@@ -15,7 +15,7 @@ func init() {
ExitCA: "\x1bw1",
ShowCursor: "\x1b`1",
HideCursor: "\x1b`0",
AttrOff: "\x1b(\x1bH\x0003\x1bG0\x1bcD",
AttrOff: "\x1b(\x1bH\x03\x1bG0\x1bcD",
Underline: "\x1bG8",
Dim: "\x1bGp",
Blink: "\x1bG2",

View File

@@ -12,7 +12,7 @@ func init() {
Clear: "\x1b[H\x1b[J$<200>",
ShowCursor: "\x1b[34h\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[m\x0017\x1b[\"q",
AttrOff: "\x1b[m\x0f\x1b[\"q",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",
@@ -26,7 +26,7 @@ func init() {
ExitAcs: "\x0f",
EnableAcs: "\x1b)0",
SetCursor: "\x1b[%i%p1%d;%p2%dH",
CursorBack1: "\x0010$<1>",
CursorBack1: "\b$<1>",
CursorUp1: "\x1bM",
KeyUp: "\x1bOA",
KeyDown: "\x1bOB",

View File

@@ -12,7 +12,7 @@ func init() {
Clear: "\x1b[H\x1b[J$<200>",
ShowCursor: "\x1b[34h\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[m\x0017\x1b[\"q",
AttrOff: "\x1b[m\x0f\x1b[\"q",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",
@@ -26,7 +26,7 @@ func init() {
ExitAcs: "\x0f",
EnableAcs: "\x1b)0",
SetCursor: "\x1b[%i%p1%d;%p2%dH",
CursorBack1: "\x0010$<1>",
CursorBack1: "\b$<1>",
CursorUp1: "\x1bM",
KeyUp: "\x1bOA",
KeyDown: "\x1bOB",

View File

@@ -15,7 +15,7 @@ func init() {
ExitCA: "\x1b[2J\x1b[?47l\x1b8",
ShowCursor: "\x1b[?25h",
HideCursor: "\x1b[?25l",
AttrOff: "\x1b[0m\x0017",
AttrOff: "\x1b[0m\x0f",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Reverse: "\x1b[7m",
@@ -40,7 +40,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "177",
KeyBackspace: "\u007f",
KeyHome: "\x1bOH",
KeyEnd: "\x1bOF",
KeyPgUp: "\x1b[5~",

View File

@@ -9,7 +9,7 @@ func init() {
Aliases: []string{"darwin"},
Colors: 8,
Clear: "\x1b[H\x1b[J",
AttrOff: "\x1b[m\x0017",
AttrOff: "\x1b[m",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Reverse: "\x1b[7m",
@@ -26,6 +26,6 @@ func init() {
KeyDown: "\x1bOB",
KeyRight: "\x1bOC",
KeyLeft: "\x1bOD",
KeyBackspace: "177",
KeyBackspace: "\u007f",
})
}

View File

@@ -3,9 +3,10 @@
package terminfo
func init() {
// xterm terminal emulator (X Window System)
// X11 terminal emulator
AddTerminfo(&Terminfo{
Name: "xterm",
Aliases: []string{"xterm-debian"},
Columns: 80,
Lines: 24,
Colors: 8,
@@ -18,6 +19,7 @@ func init() {
AttrOff: "\x1b(B\x1b[m",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",
Blink: "\x1b[5m",
Reverse: "\x1b[7m",
EnterKeypad: "\x1b[?1h\x1b=",
@@ -39,7 +41,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "\b",
KeyBackspace: "\u007f",
KeyHome: "\x1bOH",
KeyEnd: "\x1bOF",
KeyPgUp: "\x1b[5~",

View File

@@ -18,6 +18,7 @@ func init() {
AttrOff: "\x1b(B\x1b[m",
Underline: "\x1b[4m",
Bold: "\x1b[1m",
Dim: "\x1b[2m",
Blink: "\x1b[5m",
Reverse: "\x1b[7m",
EnterKeypad: "\x1b[?1h\x1b=",
@@ -39,7 +40,7 @@ func init() {
KeyLeft: "\x1bOD",
KeyInsert: "\x1b[2~",
KeyDelete: "\x1b[3~",
KeyBackspace: "\b",
KeyBackspace: "\u007f",
KeyHome: "\x1bOH",
KeyEnd: "\x1bOF",
KeyPgUp: "\x1b[5~",

View File

@@ -1,4 +1,4 @@
// Copyright 2017 The TCell Authors
// Copyright 2018 The TCell Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use file except in compliance with the License.
@@ -17,12 +17,14 @@ package terminfo
import (
"bytes"
"compress/gzip"
"crypto/sha1"
"encoding/json"
"errors"
"fmt"
"io"
"os"
"path"
"path/filepath"
"strconv"
"strings"
"sync"
@@ -753,9 +755,23 @@ func loadFromFile(fname string, term string) (*Terminfo, error) {
// LookupTerminfo attempts to find a definition for the named $TERM.
// It first looks in the builtin database, which should cover just about
// everyone. If it can't find one there, then it will attempt to read
// one from the JSON file located in either $TCELLDB, $HOME/.tcelldb
// or in this package's source directory as database.json).
// one from the JSON file located in either $TCELLDB, $HOME/.tcelldb,
// or as a database file.
//
// The database files are named by taking terminal name, hashing it through
// sha1, and then a subdirectory of the form database/hash[0:2]/hash[0:8]
// (with an optional .gz extension).
//
// For other local database files, we will look for the database file using
// the terminal name, so database/term[0:2]/term[0:8], again with optional
// .gz extension.
func LookupTerminfo(name string) (*Terminfo, error) {
if name == "" {
// else on windows: index out of bounds
// on the name[0] reference below
return nil, ErrTermNotFound
}
dblock.Lock()
t := terminfos[name]
dblock.Unlock()
@@ -766,38 +782,65 @@ func LookupTerminfo(name string) (*Terminfo, error) {
letter := fmt.Sprintf("%02x", name[0])
gzfile := path.Join(letter, name+".gz")
jsfile := path.Join(letter, name)
hash := fmt.Sprintf("%x", sha1.Sum([]byte(name)))
gzhfile := path.Join(hash[0:2], hash[0:8]+".gz")
jshfile := path.Join(hash[0:2], hash[0:8])
// Build up the search path. Old versions of tcell used a
// single database file, whereas the new ones locate them
// in JSON (optionally compressed) files.
//
// The search path looks like:
// The search path for "xterm" (SHA1 sig e2e28a8e...) looks
// like this:
//
// $TCELLDB/x/xterm.gz
// $TCELLDB/x/xterm
// $TCELLDB/78/xterm.gz
// $TCELLDB/78/xterm
// $TCELLDB
// $HOME/.tcelldb/x/xterm.gz
// $HOME/.tcelldb/x/xterm
// $HOME/.tcelldb/e2/e2e28a8e.gz
// $HOME/.tcelldb/e2/e2e28a8e
// $HOME/.tcelldb/78/xterm.gz
// $HOME/.tcelldb/78/xterm
// $HOME/.tcelldb
// $GOPATH/terminfo/database/x/xterm.gz
// $GOPATH/terminfo/database/x/xterm
// $GOPATH/terminfo/database/e2/e2e28a8e.gz
// $GOPATH/terminfo/database/e2/e2e28a8e
// $GOPATH/terminfo/database/78/xterm.gz
// $GOPATH/terminfo/database/78/xterm
//
// Note that the legacy name lookups (78/xterm etc.) are
// provided for compatibility. We do not actually deliver
// any files with this style of naming, to avoid collisions
// on case insensitive filesystems. (*cough* mac *cough*).
// If $GOPATH set, honor it, else assume $HOME/go just like
// modern golang does.
gopath := os.Getenv("GOPATH")
if gopath == "" {
gopath = path.Join(os.Getenv("HOME"), "go")
}
if pth := os.Getenv("TCELLDB"); pth != "" {
files = append(files, path.Join(pth, gzfile))
files = append(files, path.Join(pth, jsfile))
files = append(files, pth)
files = append(files,
path.Join(pth, gzfile),
path.Join(pth, jsfile),
pth)
}
if pth := os.Getenv("HOME"); pth != "" {
pth = path.Join(pth, ".tcelldb")
files = append(files, path.Join(pth, gzfile))
files = append(files, path.Join(pth, jsfile))
files = append(files, pth)
files = append(files,
path.Join(pth, gzhfile),
path.Join(pth, jshfile),
path.Join(pth, gzfile),
path.Join(pth, jsfile),
pth)
}
for _, pth := range strings.Split(os.Getenv("GOPATH"), string(os.PathListSeparator)) {
pth = path.Join(pth, "src", "github.com", "gdamore", "tcell", "terminfo", "database")
files = append(files, path.Join(pth, gzfile))
files = append(files, path.Join(pth, jsfile))
for _, pth := range filepath.SplitList(gopath) {
pth = path.Join(pth, "src", "github.com",
"gdamore", "tcell", "terminfo", "database")
files = append(files,
path.Join(pth, gzhfile),
path.Join(pth, jshfile),
path.Join(pth, gzfile),
path.Join(pth, jsfile))
}
for _, fname := range files {