To: vim_dev@googlegroups.com Subject: Patch 8.0.1362 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.1362 Problem: Terminal window colors wrong when using Terminal highlighting. Solution: Set ansi_index when setting the default color. Also cache the color index for Terminal. (Ozaki Kiichi, closes #2393) Files: src/libvterm/src/pen.c, src/proto/terminal.pro, src/syntax.c, src/terminal.c *** ../vim-8.0.1361/src/libvterm/src/pen.c 2017-11-29 22:33:31.051416026 +0100 --- src/libvterm/src/pen.c 2017-12-01 20:58:25.116033574 +0100 *************** *** 213,221 **** void vterm_state_set_default_colors(VTermState *state, const VTermColor *default_fg, const VTermColor *default_bg) { state->default_fg = *default_fg; - state->default_fg.ansi_index = VTERM_ANSI_INDEX_DEFAULT; state->default_bg = *default_bg; - state->default_bg.ansi_index = VTERM_ANSI_INDEX_DEFAULT; } void vterm_state_set_palette_color(VTermState *state, int index, const VTermColor *col) --- 213,219 ---- *** ../vim-8.0.1361/src/proto/terminal.pro 2017-09-14 20:37:49.963213752 +0200 --- src/proto/terminal.pro 2017-12-01 20:58:25.116033574 +0100 *************** *** 20,25 **** --- 20,26 ---- int term_get_attr(buf_T *buf, linenr_T lnum, int col); 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_getaltscreen(typval_T *argvars, typval_T *rettv); void f_term_getattr(typval_T *argvars, typval_T *rettv); void f_term_getcursor(typval_T *argvars, typval_T *rettv); *** ../vim-8.0.1361/src/syntax.c 2017-11-18 22:13:04.749908702 +0100 --- src/syntax.c 2017-12-01 20:58:25.120033551 +0100 *************** *** 7391,7396 **** --- 7391,7399 ---- int error = FALSE; int color; int is_normal_group = FALSE; /* "Normal" group */ + #ifdef FEAT_TERMINAL + int is_terminal_group = FALSE; /* "Terminal" group */ + #endif #ifdef FEAT_GUI_X11 int is_menu_group = FALSE; /* "Menu" group */ int is_scrollbar_group = FALSE; /* "Scrollbar" group */ *************** *** 7616,7621 **** --- 7619,7628 ---- if (STRCMP(HL_TABLE()[idx].sg_name_u, "NORMAL") == 0) is_normal_group = TRUE; + #ifdef FEAT_TERMINAL + else if (STRCMP(HL_TABLE()[idx].sg_name_u, "TERMINAL") == 0) + is_terminal_group = TRUE; + #endif #ifdef FEAT_GUI_X11 else if (STRCMP(HL_TABLE()[idx].sg_name_u, "MENU") == 0) is_menu_group = TRUE; *************** *** 8239,8244 **** --- 8246,8256 ---- } #endif } + #ifdef FEAT_TERMINAL + else if (is_terminal_group) + set_terminal_default_colors( + HL_TABLE()[idx].sg_cterm_fg, HL_TABLE()[idx].sg_cterm_bg); + #endif #ifdef FEAT_GUI_X11 # ifdef FEAT_MENU else if (is_menu_group) *** ../vim-8.0.1361/src/terminal.c 2017-11-30 22:07:03.896029952 +0100 --- src/terminal.c 2017-12-01 20:58:25.120033551 +0100 *************** *** 188,193 **** --- 188,196 ---- * backspace key. */ static int term_backspace_char = BS; + /* "Terminal" highlight group colors. */ + static int term_default_cterm_fg = -1; + static int term_default_cterm_bg = -1; /************************************** * 1. Generic code for all systems. *************** *** 1834,1853 **** int bg = color2index(&cellbg, FALSE, &bold); /* Use the "Terminal" highlighting for the default colors. */ ! if (fg == 0 || bg == 0) { ! int id = syn_name2id((char_u *)"Terminal"); ! ! if (id != 0 && t_colors >= 16) ! { ! int cterm_fg, cterm_bg; ! ! syn_id2cterm_bg(id, &cterm_fg, &cterm_bg); ! if (cterm_fg >= 0) ! fg = cterm_fg + 1; ! if (cterm_bg >= 0) ! bg = cterm_bg + 1; ! } } /* with 8 colors set the bold attribute to get a bright foreground */ --- 1837,1848 ---- int bg = color2index(&cellbg, FALSE, &bold); /* Use the "Terminal" highlighting for the default colors. */ ! if ((fg == 0 || bg == 0) && t_colors >= 16) { ! if (fg == 0 && term_default_cterm_fg >= 0) ! fg = term_default_cterm_fg + 1; ! if (bg == 0 && term_default_cterm_bg >= 0) ! bg = term_default_cterm_bg + 1; } /* with 8 colors set the bold attribute to get a bright foreground */ *************** *** 2470,2475 **** --- 2465,2471 ---- rgb->blue = cube_value[idx % 6]; rgb->green = cube_value[idx / 6 % 6]; rgb->red = cube_value[idx / 36 % 6]; + rgb->ansi_index = VTERM_ANSI_INDEX_NONE; } else if (nr < 256) { *************** *** 2478,2483 **** --- 2474,2480 ---- rgb->blue = grey_ramp[idx]; rgb->green = grey_ramp[idx]; rgb->red = grey_ramp[idx]; + rgb->ansi_index = VTERM_ANSI_INDEX_NONE; } } *************** *** 2520,2525 **** --- 2517,2523 ---- } fg->red = fg->green = fg->blue = fgval; bg->red = bg->green = bg->blue = bgval; + fg->ansi_index = bg->ansi_index = VTERM_ANSI_INDEX_DEFAULT; /* The "Terminal" highlight group overrules the defaults. */ id = syn_name2id((char_u *)"Terminal"); *************** *** 2582,2594 **** #endif if (id != 0 && t_colors >= 16) { ! int cterm_fg, cterm_bg; ! ! syn_id2cterm_bg(id, &cterm_fg, &cterm_bg); ! if (cterm_fg >= 0) ! cterm_color2rgb(cterm_fg, fg); ! if (cterm_bg >= 0) ! cterm_color2rgb(cterm_bg, bg); } else { --- 2580,2589 ---- #endif if (id != 0 && t_colors >= 16) { ! if (term_default_cterm_fg >= 0) ! cterm_color2rgb(term_default_cterm_fg, fg); ! if (term_default_cterm_bg >= 0) ! cterm_color2rgb(term_default_cterm_bg, bg); } else { *************** *** 2705,2710 **** --- 2700,2715 ---- } /* + * Cache "Terminal" highlight group colors. + */ + void + set_terminal_default_colors(int cterm_fg, int cterm_bg) + { + term_default_cterm_fg = cterm_fg - 1; + term_default_cterm_bg = cterm_bg - 1; + } + + /* * Get the buffer from the first argument in "argvars". * Returns NULL when the buffer is not for a terminal window. */ *** ../vim-8.0.1361/src/version.c 2017-12-01 20:35:54.868077089 +0100 --- src/version.c 2017-12-01 21:00:50.623190972 +0100 *************** *** 773,774 **** --- 773,776 ---- { /* Add new patch number below this line */ + /**/ + 1362, /**/ -- I'm trying to be an optimist, but I don't think it'll work. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///