# HG changeset patch # User Bram Moolenaar # Date 1620067504 -7200 # Node ID 1a658c5eb326e7e49a1042c685a11712cbda5293 # Parent 4cb7be47fa3df78650a1349b265e0fcc94956391 patch 8.2.2830: terminal colors are not updated when 'background' is set Commit: https://github.com/vim/vim/commit/ad431995721b2a886f789e2ea7db4c84b732eb18 Author: Bram Moolenaar Date: Mon May 3 20:40:38 2021 +0200 patch 8.2.2830: terminal colors are not updated when 'background' is set Problem: Terminal colors are not updated when 'background' is set. Solution: Call term_update_colors() for all terminals. (Marcin Szamotulski, closes #8171, closes #8150) diff --git a/src/optionstr.c b/src/optionstr.c --- 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 --- a/src/proto/terminal.pro +++ b/src/proto/terminal.pro @@ -19,6 +19,7 @@ cursorentry_T *term_get_cursor_shape(gui 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 --- a/src/terminal.c +++ b/src/terminal.c @@ -4590,9 +4590,9 @@ create_vterm(term_T *term, int rows, int * Called when 'wincolor' was set. */ void -term_update_colors(void) -{ - term_T *term = curwin->w_buffer->b_term; +term_update_colors(term_T *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, ty 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 --- 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,