win/TUI: builtin terminfos for cygwin, conemu, et al.

This commit is contained in:
erw7 2018-10-24 19:57:53 +09:00 committed by Justin M. Keyes
parent 6060301558
commit 6c62f7b715
5 changed files with 619 additions and 16 deletions

View File

@ -27,6 +27,9 @@ readonly -A entries=(
[vte-256color]=vte_256colour_terminfo
[xterm-256color]=xterm_256colour_terminfo
[cygwin]=cygwin_terminfo
[win32con]=win32con_terminfo
[conemu]=conemu_terminfo
[vtpcon]=vtpcon_terminfo
)
db="$(mktemp -du)"
@ -48,7 +51,7 @@ gunzip -f terminfo.src.gz
# Build terminfo database
#
print_bold '[*] Build terminfo database\n'
tic -x -o "$db" terminfo.src
cat terminfo.src scripts/windows.ti | tic -x -o "$db" -
rm -f terminfo.src
#

71
scripts/windows.ti Normal file
View File

@ -0,0 +1,71 @@
libuv+basekey|vt100 base function key for libuv,
kb2=\E[G, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D,
kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
libuv+exkey|vt100 extend function key for libuv,
kf21=\E[23$, kf22=\E[24$, kf23=\E[11\^, kf24=\E[12\^,
kf25=\E[13\^, kf26=\E[14\^, kf27=\E[15\^, kf28=\E[17\^,
kf29=\E[18\^, kf30=\E[19\^, kf31=\E[20\^, kf32=\E[21\^,
kf33=\E[23\^, kf34=\E[24\^, kf35=\E[25\^, kf36=\E[26\^,
kf41=\E[32\^, kf42=\E[33\^, kf43=\E[34\^, kf44=\E[23@,
kf37=\E[28\^, kf38=\E[29\^, kf39=\E[31\^, kf45=\E[24@,
kDC=\E[3;2~, kEND=\E[4;2~, kHOM=\E[1;2~, kIC=\E[2;2~,
kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C,
win32con|ANSI emulation for libuv on legacy console,
hs@, fsl@, tsl@, xon@, acsc@, rmacs@, smacs@, dch@, dch1@, dl@, dl1@,
ich@, ich1@, il@, il1@, ind@, invis@, ri@, rmir@, rs1@, rmul@, smir@,
smul@, smpch@, u6@, u7@, u8@, u9@,
sgr=\E[0%?%p1%t;7%;%?%p3%t;7%;%?%p6%t;1%;m, sgr0=\E[0m,
Se=\E[0 q, Ss=\E[%p1%d q,
use=cygwin, use=libuv+exkey,
conemu|ANIS X3.64 and Xterm 256 colors for ConEmu with libuv,
ccc@, mc5i@, xenl@, acsc@, rmacs@, smacs@, blink@, cbt@,
cvvis@, cnorm=\E[?25h, dim@, flash@, hts@, initc@, invis@, is2@,
kf46@, kf47@, kf48@, kf49@, kf50@, kf51@, kf52@, kf53@, kf54@,
kf55@, kf56@, kf57@, kf58@, kf59@, kf60@, kf61@, kf62@, kf63@, kmous@,
mc0@, mc4@, mc5@, meml@, memu@, oc@, rmam@, rmcup=\E[?1049l,
smcup=\E[?1049h, rmir@, rmkx@, rmm@, rs1@, rs2@,
setab=\E[48;5;%p1%dm, setaf=\E[38;5;%p1%dm,
sgr=\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p6%t;1%;m,
sgr0=\E[0m, smam@, smir@, smkx@, smm@, tbc@, u6@, u7@, u8@, u9@,
Cr@, Cs@, Ms@, XM@, kDC3@, kDC4@, kDC5@, kDC6@, kDC7@,
kDN@, kDN3@, kDN4@, kDN5@, kDN6@, kDN7@,
kEND3@, kEND4@, kEND5@, kEND6@, kEND7@,
kHOM3@, kHOM4@, kHOM5@, kHOM6@, kHOM7@,
kIC3@, kIC4@, kIC5@, kIC6@, kIC7@,
kLFT3@, kLFT4@, kLFT5@, kLFT6@, kLFT7@,
kNXT3@, kNXT4@, kNXT5@, kNXT6@, kNXT7@,
kPRV3@, kPRV4@, kPRV5@, kPRV6@, kPRV7@,
kRIT3@, kRIT4@, kRIT5@, kRIT6@, kRIT7@,
kUP3@, kUP4@, kUP5@, kUP6@, kUP7@, rmxx@, smxx@, xm@,
use=libuv+basekey, use=libuv+exkey, use=xterm+256color, use=xterm-new,
vtpcon|ANIS emulation for console virtual terminal sequence with libuv,
ccc@, mc5i@, xenl@, blink@, acsc=jjkkllmmnnqqttuuvvwwxx,
cvvis@, dim@, flash@,
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E,
invis@, is2=\E[!p\E[?3l,
kf46@, kf47@, kf48@, kf49@, kf50@, kf51@, kf52@, kf53@, kf54@,
kf55@, kf56@, kf57@, kf58@, kf59@, kf60@, kf61@, kf62@, kf63@, kmous@,
mc0@, mc4@, mc5@, meml@, memu@, oc@, rmam@, rmcup=\E[?1049l,
smcup=\E[?1049h, rmir@, rmkx@, rmm@, rs1@, rs2@,
sgr=\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p6%t;1%;m,
sgr0=\E[0m, smam@, smir@, smkx@, smm@, tbc@, u6@, u7@, u8@, u9@,
Cr@, Cs@, Ms@, XM@, kDC3@, kDC4@, kDC5@, kDC6@, kDC7@,
kDN@, kDN3@, kDN4@, kDN5@, kDN6@, kDN7@,
kEND3@, kEND4@, kEND5@, kEND6@, kEND7@,
kHOM3@, kHOM4@, kHOM5@, kHOM6@, kHOM7@,
kIC3@, kIC4@, kIC5@, kIC6@, kIC7@,
kLFT3@, kLFT4@, kLFT5@, kLFT6@, kLFT7@,
kNXT3@, kNXT4@, kNXT5@, kNXT6@, kNXT7@,
kPRV3@, kPRV4@, kPRV5@, kPRV6@, kPRV7@,
kRIT3@, kRIT4@, kRIT5@, kRIT6@, kRIT7@,
kUP3@, kUP4@, kUP5@, kUP6@, kUP7@, rmxx@, smxx@, xm@,
use=libuv+basekey, use=libuv+exkey, use=xterm+256color, use=xterm-new,

View File

@ -90,6 +90,18 @@ static unibi_term *terminfo_builtin(const char *term, char **termname)
*termname = xstrdup("builtin_cygwin");
return unibi_from_mem((const char *)cygwin_terminfo,
sizeof cygwin_terminfo);
} else if (terminfo_is_term_family(term, "win32con")) {
*termname = xstrdup("builtin_win32con");
return unibi_from_mem((const char *)win32con_terminfo,
sizeof win32con_terminfo);
} else if (terminfo_is_term_family(term, "conemu")) {
*termname = xstrdup("builtin_conemu");
return unibi_from_mem((const char *)conemu_terminfo,
sizeof conemu_terminfo);
} else if (terminfo_is_term_family(term, "vtpcon")) {
*termname = xstrdup("builtin_vtpcon");
return unibi_from_mem((const char *)vtpcon_terminfo,
sizeof vtpcon_terminfo);
} else {
*termname = xstrdup("builtin_ansi");
return unibi_from_mem((const char *)ansi_terminfo,

File diff suppressed because one or more lines are too long

View File

@ -242,15 +242,17 @@ static void terminfo_start(UI *ui)
}
} else {
// If it is running under winpty ignore the TERM environment variable and
// force it to be cygwin.
term = "cygwin";
// force it to be win32con.
term = "win32con";
}
if (term == NULL) {
if (vtp || conemu_ansi) {
term = "xterm-256color";
if (vtp) {
term = "vtpcon";
} else if (conemu_ansi) {
term = "conemu";
} else {
term = "cygwin";
term = "win32con";
}
}
@ -284,8 +286,7 @@ static void terminfo_start(UI *ui)
|| os_getenv("KONSOLE_PROFILE_NAME")
|| os_getenv("KONSOLE_DBUS_SESSION");
patch_terminfo_bugs(data, term, colorterm, vte_version, konsole, iterm_env,
conemu_ansi);
patch_terminfo_bugs(data, term, colorterm, vte_version, konsole, iterm_env);
augment_terminfo(data, term, colorterm, vte_version, konsole, iterm_env);
data->can_change_scroll_region =
!!unibi_get_str(data->ut, unibi_change_scroll_region);
@ -296,7 +297,8 @@ static void terminfo_start(UI *ui)
&& !!unibi_get_str(data->ut, unibi_set_right_margin_parm);
data->immediate_wrap_after_last_column =
terminfo_is_term_family(term, "cygwin")
|| terminfo_is_term_family(term, "interix");
|| terminfo_is_term_family(term, "win32con")
|| terminfo_is_term_family(term, "interix") || conemu_ansi;
data->bce = unibi_get_bool(data->ut, unibi_back_color_erase);
data->normlen = unibi_pre_fmt_str(data, unibi_cursor_normal,
data->norm, sizeof data->norm);
@ -1504,7 +1506,7 @@ static int unibi_find_ext_bool(unibi_term *ut, const char *name)
/// and several terminal emulators falsely announce incorrect terminal types.
static void patch_terminfo_bugs(TUIData *data, const char *term,
const char *colorterm, long vte_version,
bool konsole, bool iterm_env, bool conemu_ansi)
bool konsole, bool iterm_env)
{
unibi_term *ut = data->ut;
const char * xterm_version = os_getenv("XTERM_VERSION");
@ -1536,6 +1538,7 @@ static void patch_terminfo_bugs(TUIData *data, const char *term,
&& strstr(colorterm, "mate-terminal");
bool true_xterm = xterm && !!xterm_version;
bool cygwin = terminfo_is_term_family(term, "cygwin");
bool conemu = terminfo_is_term_family(term, "conemu");
char *fix_normal = (char *)unibi_get_str(ut, unibi_cursor_normal);
if (fix_normal) {
@ -1575,6 +1578,10 @@ static void patch_terminfo_bugs(TUIData *data, const char *term,
unibi_set_bool(ut, unibi_back_color_erase, false);
}
if (conemu) {
unibi_set_bool(ut, unibi_back_color_erase, true);
}
if (xterm) {
// Termit, LXTerminal, GTKTerm2, GNOME Terminal, MATE Terminal, roxterm,
// and EvilVTE falsely claim to be xterm and do not support important xterm
@ -1604,11 +1611,6 @@ static void patch_terminfo_bugs(TUIData *data, const char *term,
unibi_set_if_empty(ut, unibi_enter_italics_mode, "\x1b[3m");
unibi_set_if_empty(ut, unibi_exit_italics_mode, "\x1b[23m");
}
if (conemu_ansi) {
unibi_set_num(ut, unibi_max_colors, 256);
unibi_set_str(ut, unibi_set_a_foreground, "\x1b[38;5;%p1%dm");
unibi_set_str(ut, unibi_set_a_background, "\x1b[48;5;%p1%dm");
}
} else if (rxvt) {
// 2017-04 terminfo.src lacks these. Unicode rxvt has them.
unibi_set_if_empty(ut, unibi_enter_italics_mode, "\x1b[3m");
@ -1728,7 +1730,6 @@ static void patch_terminfo_bugs(TUIData *data, const char *term,
|| teraterm // per TeraTerm "Supported Control Functions" doco
|| alacritty // https://github.com/jwilm/alacritty/pull/608
|| cygwin
|| conemu_ansi
// Some linux-type terminals implement the xterm extension.
// Example: console-terminal-emulator from the nosh toolset.
|| (linuxvt