mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
win/TUI: builtin terminfos for cygwin, conemu, et al.
This commit is contained in:
parent
6060301558
commit
6c62f7b715
@ -27,6 +27,9 @@ readonly -A entries=(
|
|||||||
[vte-256color]=vte_256colour_terminfo
|
[vte-256color]=vte_256colour_terminfo
|
||||||
[xterm-256color]=xterm_256colour_terminfo
|
[xterm-256color]=xterm_256colour_terminfo
|
||||||
[cygwin]=cygwin_terminfo
|
[cygwin]=cygwin_terminfo
|
||||||
|
[win32con]=win32con_terminfo
|
||||||
|
[conemu]=conemu_terminfo
|
||||||
|
[vtpcon]=vtpcon_terminfo
|
||||||
)
|
)
|
||||||
|
|
||||||
db="$(mktemp -du)"
|
db="$(mktemp -du)"
|
||||||
@ -48,7 +51,7 @@ gunzip -f terminfo.src.gz
|
|||||||
# Build terminfo database
|
# Build terminfo database
|
||||||
#
|
#
|
||||||
print_bold '[*] Build terminfo database\n'
|
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
|
rm -f terminfo.src
|
||||||
|
|
||||||
#
|
#
|
||||||
|
71
scripts/windows.ti
Normal file
71
scripts/windows.ti
Normal 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,
|
@ -90,6 +90,18 @@ static unibi_term *terminfo_builtin(const char *term, char **termname)
|
|||||||
*termname = xstrdup("builtin_cygwin");
|
*termname = xstrdup("builtin_cygwin");
|
||||||
return unibi_from_mem((const char *)cygwin_terminfo,
|
return unibi_from_mem((const char *)cygwin_terminfo,
|
||||||
sizeof 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 {
|
} else {
|
||||||
*termname = xstrdup("builtin_ansi");
|
*termname = xstrdup("builtin_ansi");
|
||||||
return unibi_from_mem((const char *)ansi_terminfo,
|
return unibi_from_mem((const char *)ansi_terminfo,
|
||||||
|
File diff suppressed because one or more lines are too long
@ -242,15 +242,17 @@ static void terminfo_start(UI *ui)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// If it is running under winpty ignore the TERM environment variable and
|
// If it is running under winpty ignore the TERM environment variable and
|
||||||
// force it to be cygwin.
|
// force it to be win32con.
|
||||||
term = "cygwin";
|
term = "win32con";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (term == NULL) {
|
if (term == NULL) {
|
||||||
if (vtp || conemu_ansi) {
|
if (vtp) {
|
||||||
term = "xterm-256color";
|
term = "vtpcon";
|
||||||
|
} else if (conemu_ansi) {
|
||||||
|
term = "conemu";
|
||||||
} else {
|
} else {
|
||||||
term = "cygwin";
|
term = "win32con";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,8 +286,7 @@ static void terminfo_start(UI *ui)
|
|||||||
|| os_getenv("KONSOLE_PROFILE_NAME")
|
|| os_getenv("KONSOLE_PROFILE_NAME")
|
||||||
|| os_getenv("KONSOLE_DBUS_SESSION");
|
|| os_getenv("KONSOLE_DBUS_SESSION");
|
||||||
|
|
||||||
patch_terminfo_bugs(data, term, colorterm, vte_version, konsole, iterm_env,
|
patch_terminfo_bugs(data, term, colorterm, vte_version, konsole, iterm_env);
|
||||||
conemu_ansi);
|
|
||||||
augment_terminfo(data, term, colorterm, vte_version, konsole, iterm_env);
|
augment_terminfo(data, term, colorterm, vte_version, konsole, iterm_env);
|
||||||
data->can_change_scroll_region =
|
data->can_change_scroll_region =
|
||||||
!!unibi_get_str(data->ut, unibi_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);
|
&& !!unibi_get_str(data->ut, unibi_set_right_margin_parm);
|
||||||
data->immediate_wrap_after_last_column =
|
data->immediate_wrap_after_last_column =
|
||||||
terminfo_is_term_family(term, "cygwin")
|
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->bce = unibi_get_bool(data->ut, unibi_back_color_erase);
|
||||||
data->normlen = unibi_pre_fmt_str(data, unibi_cursor_normal,
|
data->normlen = unibi_pre_fmt_str(data, unibi_cursor_normal,
|
||||||
data->norm, sizeof data->norm);
|
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.
|
/// and several terminal emulators falsely announce incorrect terminal types.
|
||||||
static void patch_terminfo_bugs(TUIData *data, const char *term,
|
static void patch_terminfo_bugs(TUIData *data, const char *term,
|
||||||
const char *colorterm, long vte_version,
|
const char *colorterm, long vte_version,
|
||||||
bool konsole, bool iterm_env, bool conemu_ansi)
|
bool konsole, bool iterm_env)
|
||||||
{
|
{
|
||||||
unibi_term *ut = data->ut;
|
unibi_term *ut = data->ut;
|
||||||
const char * xterm_version = os_getenv("XTERM_VERSION");
|
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");
|
&& strstr(colorterm, "mate-terminal");
|
||||||
bool true_xterm = xterm && !!xterm_version;
|
bool true_xterm = xterm && !!xterm_version;
|
||||||
bool cygwin = terminfo_is_term_family(term, "cygwin");
|
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);
|
char *fix_normal = (char *)unibi_get_str(ut, unibi_cursor_normal);
|
||||||
if (fix_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);
|
unibi_set_bool(ut, unibi_back_color_erase, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (conemu) {
|
||||||
|
unibi_set_bool(ut, unibi_back_color_erase, true);
|
||||||
|
}
|
||||||
|
|
||||||
if (xterm) {
|
if (xterm) {
|
||||||
// Termit, LXTerminal, GTKTerm2, GNOME Terminal, MATE Terminal, roxterm,
|
// Termit, LXTerminal, GTKTerm2, GNOME Terminal, MATE Terminal, roxterm,
|
||||||
// and EvilVTE falsely claim to be xterm and do not support important xterm
|
// 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_enter_italics_mode, "\x1b[3m");
|
||||||
unibi_set_if_empty(ut, unibi_exit_italics_mode, "\x1b[23m");
|
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) {
|
} else if (rxvt) {
|
||||||
// 2017-04 terminfo.src lacks these. Unicode rxvt has them.
|
// 2017-04 terminfo.src lacks these. Unicode rxvt has them.
|
||||||
unibi_set_if_empty(ut, unibi_enter_italics_mode, "\x1b[3m");
|
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
|
|| teraterm // per TeraTerm "Supported Control Functions" doco
|
||||||
|| alacritty // https://github.com/jwilm/alacritty/pull/608
|
|| alacritty // https://github.com/jwilm/alacritty/pull/608
|
||||||
|| cygwin
|
|| cygwin
|
||||||
|| conemu_ansi
|
|
||||||
// Some linux-type terminals implement the xterm extension.
|
// Some linux-type terminals implement the xterm extension.
|
||||||
// Example: console-terminal-emulator from the nosh toolset.
|
// Example: console-terminal-emulator from the nosh toolset.
|
||||||
|| (linuxvt
|
|| (linuxvt
|
||||||
|
Loading…
Reference in New Issue
Block a user