tui: Improve the setrgbf/setrgbb fallback logic.

The libvte test was too agressive, and is reduced to only triggering
when it is libvte 0.36 AND a gnome or xterm terminal type is used.

Contrastingly, tmux was not on the list at all and now is.
This commit is contained in:
Jonathan de Boyne Pollard
2017-07-09 18:48:32 +01:00
parent 5bdad50307
commit 68d2fb7570
2 changed files with 15 additions and 6 deletions

View File

@@ -161,11 +161,12 @@ constructed "setrgbf" and "setrgbb" capabilities as if they had been in the
terminfo definition.
If your terminal's terminfo definition does not (yet) have this flag, Nvim
will fall back to looking at the TERM and other environment variables. For
the "rxvt", "linux", "st", and "iterm" terminal types, or when Konsole,
genuine Xterm, or a terminal emulator that sets the COLORTERM environment
variable to "truecolor" is detected, it will also add constructed "setrgbf"
and "setrgbb" capabilities.
will fall back to looking at the TERM and other environment variables. It
will add constructed "setrgbf" and "setrgbb" capabilities in the case of the
the "rxvt", "linux", "st", "tmux", and "iterm" terminal types, or when
Konsole, genuine Xterm, a libvte terminal emulator version 0.36 or later, or a
terminal emulator that sets the COLORTERM environment variable to "truecolor"
is detected.
*xterm-resize*
Nvim can resize the terminal display on some terminals that implement an

View File

@@ -1544,7 +1544,10 @@ static void augment_terminfo(TUIData *data, const char *term,
bool teraterm = terminfo_is_term_family(term, "teraterm");
bool putty = terminfo_is_term_family(term, "putty");
bool screen = terminfo_is_term_family(term, "screen");
bool tmux = terminfo_is_term_family(term, "tmux");
bool st = terminfo_is_term_family(term, "st");
bool gnome = terminfo_is_term_family(term, "gnome")
|| terminfo_is_term_family(term, "vte");
bool iterm = terminfo_is_term_family(term, "iterm")
|| terminfo_is_term_family(term, "iTerm.app");
// None of the following work over SSH; see :help TERM .
@@ -1575,8 +1578,11 @@ static void augment_terminfo(TUIData *data, const char *term,
// fixup. See https://gist.github.com/XVilka/8346728 for more about this.
int Tc = unibi_find_ext_bool(ut, "Tc");
// "standard" means using colons like ISO 8613-6:1994/ITU T.416:1993 says.
bool has_standard_rgb = vte_version >= 3600 // per GNOME bug #685759
bool has_standard_rgb = false
// per GNOME bug #685759 and bug #704449
|| ((gnome || xterm) && (vte_version >= 3600))
|| iterm || iterm_pretending_xterm // per analysis of VT100Terminal.m
// per http://invisible-island.net/xterm/xterm.log.html#xterm_282
|| true_xterm;
bool has_non_standard_rgb = -1 != Tc
// terminfo is definitive if it says something.
@@ -1585,6 +1591,8 @@ static void augment_terminfo(TUIData *data, const char *term,
|| konsole // per commentary in VT102Emulation.cpp
// per http://lists.schmorp.de/pipermail/rxvt-unicode/2016q2/002261.html
|| rxvt
|| iterm // per https://gitlab.com/gnachman/iterm2/issues/218
|| tmux // per experimentation
|| st // per experimentation
|| old_truecolor_env;
data->unibi_ext.set_rgb_foreground = unibi_find_ext_str(ut, "setrgbf");