aboutsummaryrefslogblamecommitdiffstats
path: root/vendor/github.com/nsf/termbox-go/collect_terminfo.py
blob: 5e50975e63ab9300fe8dd3c96bae289c1c1be14e (plain) (tree)













































































































                                                                                      
#!/usr/bin/env python

import sys, os, subprocess

def escaped(s):
    return repr(s)[1:-1]

def tput(term, name):
    try:
        return subprocess.check_output(['tput', '-T%s' % term, name]).decode()
    except subprocess.CalledProcessError as e:
        return e.output.decode()


def w(s):
    if s == None:
        return
    sys.stdout.write(s)

terminals = {
    'xterm' : 'xterm',
    'rxvt-256color' : 'rxvt_256color',
    'rxvt-unicode' : 'rxvt_unicode',
    'linux' : 'linux',
    'Eterm' : 'eterm',
    'screen' : 'screen'
}

keys = [
    "F1",       "kf1",
    "F2",       "kf2",
    "F3",       "kf3",
    "F4",       "kf4",
    "F5",       "kf5",
    "F6",       "kf6",
    "F7",       "kf7",
    "F8",       "kf8",
    "F9",       "kf9",
    "F10",      "kf10",
    "F11",      "kf11",
    "F12",      "kf12",
    "INSERT",   "kich1",
    "DELETE",   "kdch1",
    "HOME",     "khome",
    "END",      "kend",
    "PGUP",     "kpp",
    "PGDN",     "knp",
    "KEY_UP",   "kcuu1",
    "KEY_DOWN", "kcud1",
    "KEY_LEFT", "kcub1",
    "KEY_RIGHT",    "kcuf1"
]

funcs = [
    "T_ENTER_CA",       "smcup",
    "T_EXIT_CA",        "rmcup",
    "T_SHOW_CURSOR",    "cnorm",
    "T_HIDE_CURSOR",    "civis",
    "T_CLEAR_SCREEN",   "clear",
    "T_SGR0",       "sgr0",
    "T_UNDERLINE",      "smul",
    "T_BOLD",       "bold",
    "T_BLINK",      "blink",
    "T_REVERSE",            "rev",
    "T_ENTER_KEYPAD",   "smkx",
    "T_EXIT_KEYPAD",    "rmkx"
]

def iter_pairs(iterable):
    iterable = iter(iterable)
    while True:
        yield (next(iterable), next(iterable))

def do_term(term, nick):
    w("// %s\n" % term)
    w("var %s_keys = []string{\n\t" % nick)
    for k, v in iter_pairs(keys):
        w('"')
        w(escaped(tput(term, v)))
        w('",')
    w("\n}\n")
    w("var %s_funcs = []string{\n\t" % nick)
    for k,v in iter_pairs(funcs):
        w('"')
        if v == "sgr":
            w("\\033[3%d;4%dm")
        elif v == "cup":
            w("\\033[%d;%dH")
        else:
            w(escaped(tput(term, v)))
        w('", ')
    w("\n}\n\n")

def do_terms(d):
    w("var terms = []struct {\n")
    w("\tname  string\n")
    w("\tkeys  []string\n")
    w("\tfuncs []string\n")
    w("}{\n")
    for k, v in d.items():
        w('\t{"%s", %s_keys, %s_funcs},\n' % (k, v, v))
    w("}\n\n")

w("// +build !windows\n\npackage termbox\n\n")

for k,v in terminals.items():
    do_term(k, v)

do_terms(terminals)