1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #!/usr/bin/env python
- # vim:fileencoding=utf-8
- # License: GPL v3 Copyright: 2019, Kovid Goyal <kovid at kovidgoyal.net>
- import glob
- import os
- import shutil
- import subprocess
- import sys
- import tempfile
- def compile_terminfo(base):
- with tempfile.TemporaryDirectory() as tdir:
- proc = subprocess.run(['tic', '-x', f'-o{tdir}', 'terminfo/kitty.terminfo'], capture_output=True)
- if proc.returncode != 0:
- sys.stderr.buffer.write(proc.stderr)
- raise SystemExit(proc.returncode)
- tfiles = glob.glob(os.path.join(tdir, '*', 'xterm-kitty'))
- if not tfiles:
- raise SystemExit('tic failed to output the compiled kitty terminfo file')
- tfile = tfiles[0]
- directory, xterm_kitty = os.path.split(tfile)
- _, directory = os.path.split(directory)
- odir = os.path.join(base, directory)
- os.makedirs(odir, exist_ok=True)
- ofile = os.path.join(odir, xterm_kitty)
- shutil.move(tfile, ofile)
- return ofile
- def generate_terminfo():
- base = os.path.dirname(os.path.abspath(__file__))
- os.chdir(base)
- sys.path.insert(0, base)
- from kitty.terminfo import generate_terminfo
- with open('terminfo/kitty.terminfo', 'w') as f:
- f.write(generate_terminfo())
- proc = subprocess.run(['tic', '-CrT0', 'terminfo/kitty.terminfo'], capture_output=True)
- if proc.returncode != 0:
- sys.stderr.buffer.write(proc.stderr)
- raise SystemExit(proc.returncode)
- tcap = proc.stdout.decode('utf-8').splitlines()[-1]
- with open('terminfo/kitty.termcap', 'w') as f:
- f.write(tcap)
- dbfile = compile_terminfo(os.path.join(base, 'terminfo'))
- with open(dbfile, 'rb') as f:
- data = f.read()
- with open('kitty/terminfo.h', 'w') as f:
- print(f'static const uint8_t terminfo_data[{len(data)}] = ''{', file=f)
- for b in data:
- print(b, end=', ', file=f)
- print('};', file=f)
- if __name__ == '__main__':
- generate_terminfo()
|