]> granicus.if.org Git - vim/commitdiff
patch 8.2.2830: terminal colors are not updated when 'background' is set v8.2.2830
authorBram Moolenaar <Bram@vim.org>
Mon, 3 May 2021 18:40:38 +0000 (20:40 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 3 May 2021 18:40:38 +0000 (20:40 +0200)
Problem:    Terminal colors are not updated when 'background' is set.
Solution:   Call term_update_colors() for all terminals. (Marcin Szamotulski,
            closes #8171, closes #8150)

src/optionstr.c
src/proto/terminal.pro
src/terminal.c
src/version.c

index 91d0a69d18bbc0324c722a078367eea611a1cc0c..1ec8d05d6c1003805ed5e2754fbf5138fd0b4101 100644 (file)
@@ -907,6 +907,9 @@ ambw_end:
                check_string_option(&p_bg);
                init_highlight(FALSE, FALSE);
            }
+#endif
+#ifdef FEAT_TERMINAL
+           term_update_colors_all();
 #endif
        }
        else
@@ -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'
index f3bd5a31c7b237b032aec9de90481c9a3658255d..d2e5992562d0f3eb137d58843f2c71112db78ba4 100644 (file)
@@ -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);
index ce9f64be19c648a0aad0cab71c29307a59a0afb4..7fbff46171cb553e5f97914c0d89122571bed012 100644 (file)
@@ -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;
index b2566209459f1644453ce65a69ee4ac4aa950e32..63ede845ca3892a19a25289dc063a0d947a88bce 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2830,
 /**/
     2829,
 /**/