To: vim_dev@googlegroups.com Subject: Patch 8.0.1096 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.1096 Problem: Terminal window in Normal mode has wrong background. Solution: Store the default background and use it for clearning until the end of the line. Not for below the last line, since there is no text there. Files: src/screen.c, src/terminal.c *** ../vim-8.0.1095/src/screen.c 2017-09-02 20:30:31.167315016 +0200 --- src/screen.c 2017-09-11 21:55:11.318397038 +0200 *************** *** 3139,3144 **** --- 3139,3145 ---- #endif #ifdef FEAT_TERMINAL int get_term_attr = FALSE; + int term_attr = 0; /* background for terminal window */ #endif /* draw_state: items that are drawn in sequence: */ *************** *** 3256,3261 **** --- 3257,3263 ---- { extra_check = TRUE; get_term_attr = TRUE; + term_attr = term_get_attr(wp->w_buffer, 0, 0); } #endif *************** *** 5057,5062 **** --- 5059,5067 ---- # ifdef FEAT_DIFF diff_hlf != (hlf_T)0 || # endif + # ifdef FEAT_TERMINAL + term_attr != 0 || + # endif line_attr != 0 ) && ( # ifdef FEAT_RIGHTLEFT *************** *** 5091,5096 **** --- 5096,5110 ---- } } # endif + # ifdef FEAT_TERMINAL + if (term_attr != 0) + { + char_attr = term_attr; + if (wp->w_p_cul && lnum == wp->w_cursor.lnum) + char_attr = hl_combine_attr(char_attr, + HL_ATTR(HLF_CUL)); + } + # endif } #endif } *** ../vim-8.0.1095/src/terminal.c 2017-09-10 14:25:41.737419026 +0200 --- src/terminal.c 2017-09-11 21:59:25.444883481 +0200 *************** *** 39,47 **** * * TODO: * - patch to use GUI or cterm colors for vterm. Yasuhiro, #2067 - * - when Normal background is not white or black, going to Terminal-Normal - * mode does not clear correctly. Use the terminal background color to erase - * the background. * - patch to add tmap, jakalope (Jacob Askeland) #2073 * - Redirecting output does not work on MS-Windows. * - implement term_setsize() --- 39,44 ---- *************** *** 130,135 **** --- 127,133 ---- garray_T tl_scrollback; int tl_scrollback_scrolled; + cellattr_T tl_default_color; VTermPos tl_cursor_pos; int tl_cursor_visible; *************** *** 2321,2326 **** --- 2319,2325 ---- /* * Get the screen attribute for a position in the buffer. + * Use a zero "lnum" to get the default background color. */ int term_get_attr(buf_T *buf, linenr_T lnum, int col) *************** *** 2329,2340 **** sb_line_T *line; cellattr_T *cellattr; ! if (lnum > term->tl_scrollback.ga_len) ! return 0; ! line = (sb_line_T *)term->tl_scrollback.ga_data + lnum - 1; ! if (col >= line->sb_cols) ! return 0; ! cellattr = line->sb_cells + col; return cell2attr(cellattr->attrs, cellattr->fg, cellattr->bg); } --- 2328,2343 ---- sb_line_T *line; cellattr_T *cellattr; ! if (lnum == 0 || lnum > term->tl_scrollback.ga_len) ! cellattr = &term->tl_default_color; ! else ! { ! line = (sb_line_T *)term->tl_scrollback.ga_data + lnum - 1; ! if (col >= line->sb_cols) ! cellattr = &term->tl_default_color; ! else ! cellattr = line->sb_cells + col; ! } return cell2attr(cellattr->attrs, cellattr->fg, cellattr->bg); } *************** *** 2347,2352 **** --- 2350,2357 ---- VTerm *vterm; VTermScreen *screen; VTermValue value; + VTermColor *fg, *bg; + int fgval, bgval; vterm = vterm_new(rows, cols); term->tl_vterm = vterm; *************** *** 2357,2370 **** /* Vterm uses a default black background. Set it to white when * 'background' is "light". */ if (*p_bg == 'l') { ! VTermColor fg, bg; ! ! fg.red = fg.green = fg.blue = 0; ! bg.red = bg.green = bg.blue = 255; ! vterm_state_set_default_colors(vterm_obtain_state(vterm), &fg, &bg); } /* Required to initialize most things. */ vterm_screen_reset(screen, 1 /* hard */); --- 2362,2384 ---- /* Vterm uses a default black background. Set it to white when * 'background' is "light". */ + vim_memset(&term->tl_default_color.attrs, 0, sizeof(VTermScreenCellAttrs)); + term->tl_default_color.width = 1; + fg = &term->tl_default_color.fg; + bg = &term->tl_default_color.bg; if (*p_bg == 'l') { ! fgval = 0; ! bgval = 255; ! } ! else ! { ! fgval = 255; ! bgval = 0; } + fg->red = fg->green = fg->blue = fgval; + bg->red = bg->green = bg->blue = bgval; + vterm_state_set_default_colors(vterm_obtain_state(vterm), fg, bg); /* Required to initialize most things. */ vterm_screen_reset(screen, 1 /* hard */); *** ../vim-8.0.1095/src/version.c 2017-09-11 20:45:19.795234470 +0200 --- src/version.c 2017-09-11 21:59:07.112991938 +0200 *************** *** 771,772 **** --- 771,774 ---- { /* Add new patch number below this line */ + /**/ + 1096, /**/ -- hundred-and-one symptoms of being an internet addict: 102. When filling out your driver's license application, you give your IP address. /// 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 ///