summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-05-03 20:40:38 +0200
committerBram Moolenaar <Bram@vim.org>2021-05-03 20:40:38 +0200
commitad431995721b2a886f789e2ea7db4c84b732eb18 (patch)
treecf5e87b996a15e384095f2163f1d32ce04bc682b
parentdf36514a6455342e178af693553ef9df9fcf8c83 (diff)
downloadvim-git-ad431995721b2a886f789e2ea7db4c84b732eb18.tar.gz
patch 8.2.2830: terminal colors are not updated when 'background' is setv8.2.2830
Problem: Terminal colors are not updated when 'background' is set. Solution: Call term_update_colors() for all terminals. (Marcin Szamotulski, closes #8171, closes #8150)
-rw-r--r--src/optionstr.c5
-rw-r--r--src/proto/terminal.pro5
-rw-r--r--src/terminal.c22
-rw-r--r--src/version.c2
4 files changed, 27 insertions, 7 deletions
diff --git a/src/optionstr.c b/src/optionstr.c
index 91d0a69d1..1ec8d05d6 100644
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -908,6 +908,9 @@ ambw_end:
init_highlight(FALSE, FALSE);
}
#endif
+#ifdef FEAT_TERMINAL
+ term_update_colors_all();
+#endif
}
else
errmsg = e_invarg;
@@ -2176,7 +2179,7 @@ ambw_end:
else if (varp == &curwin->w_p_wcr)
{
if (curwin->w_buffer->b_term != NULL)
- term_update_colors();
+ term_update_colors(curwin->w_buffer->b_term);
}
# if defined(MSWIN)
// 'termwintype'
diff --git a/src/proto/terminal.pro b/src/proto/terminal.pro
index f3bd5a31c..d2e599256 100644
--- a/src/proto/terminal.pro
+++ b/src/proto/terminal.pro
@@ -19,6 +19,7 @@ cursorentry_T *term_get_cursor_shape(guicolor_T *fg, guicolor_T *bg);
int term_use_loop(void);
void term_win_entered(void);
int terminal_loop(int blocking);
+void set_terminal_default_colors(int cterm_fg, int cterm_bg);
int may_close_term_popup(void);
void term_channel_closed(channel_T *ch);
void term_check_channel_closed_recently(void);
@@ -28,10 +29,10 @@ int term_is_finished(buf_T *buf);
int term_show_buffer(buf_T *buf);
void term_change_in_curbuf(void);
int term_get_attr(win_T *wp, linenr_T lnum, int col);
-void term_update_colors(void);
+void term_update_colors(term_T *term);
+void term_update_colors_all(void);
char_u *term_get_status_text(term_T *term);
int set_ref_in_term(int copyID);
-void set_terminal_default_colors(int cterm_fg, int cterm_bg);
void f_term_dumpwrite(typval_T *argvars, typval_T *rettv);
int term_swap_diff(void);
void f_term_dumpdiff(typval_T *argvars, typval_T *rettv);
diff --git a/src/terminal.c b/src/terminal.c
index ce9f64be1..7fbff4617 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -4590,9 +4590,9 @@ create_vterm(term_T *term, int rows, int cols)
* Called when 'wincolor' was set.
*/
void
-term_update_colors(void)
+term_update_colors(term_T *term)
{
- term_T *term = curwin->w_buffer->b_term;
+ win_T *wp;
if (term->tl_vterm == NULL)
return;
@@ -4602,7 +4602,21 @@ term_update_colors(void)
&term->tl_default_color.fg,
&term->tl_default_color.bg);
- redraw_later(NOT_VALID);
+ FOR_ALL_WINDOWS(wp)
+ if (wp->w_buffer == term->tl_buffer)
+ redraw_win_later(wp, NOT_VALID);
+}
+
+/*
+ * Called when 'background' was set.
+ */
+ void
+term_update_colors_all(void)
+{
+ term_T *tp;
+
+ FOR_ALL_TERMS(tp)
+ term_update_colors(tp);
}
/*
@@ -5939,7 +5953,7 @@ f_term_list(typval_T *argvars UNUSED, typval_T *rettv)
l = rettv->vval.v_list;
FOR_ALL_TERMS(tp)
- if (tp != NULL && tp->tl_buffer != NULL)
+ if (tp->tl_buffer != NULL)
if (list_append_number(l,
(varnumber_T)tp->tl_buffer->b_fnum) == FAIL)
return;
diff --git a/src/version.c b/src/version.c
index b25662094..63ede845c 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2830,
+/**/
2829,
/**/
2828,