mirror of
https://github.com/kovidgoyal/kitty.git
synced 2024-08-17 02:20:25 +03:00
62 lines
2.0 KiB
Python
Executable File
62 lines
2.0 KiB
Python
Executable File
#!/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()
|