To: vim_dev@googlegroups.com Subject: Patch 8.0.0831 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.0831 (after 8.0.0791) Problem: With 8 colors the bold attribute is not set properly. Solution: Move setting HL_TABLE() out of lookup_color. (closes #1901) Files: src/syntax.c, src/proto/syntax.pro, src/terminal.c *** ../vim-8.0.0830/src/syntax.c 2017-07-31 22:29:29.800202678 +0200 --- src/syntax.c 2017-08-01 17:57:25.717546848 +0200 *************** *** 7276,7284 **** /* * Lookup the "cterm" value to be used for color with index "idx" in * color_names[]. */ int ! lookup_color(int idx, int foreground) { int color = color_numbers_16[idx]; char_u *p; --- 7276,7286 ---- /* * Lookup the "cterm" value to be used for color with index "idx" in * color_names[]. + * "boldp" will be set to TRUE or FALSE for a foreground color when using 8 + * colors, otherwise it will be unchanged. */ int ! lookup_color(int idx, int foreground, int *boldp) { int color = color_numbers_16[idx]; char_u *p; *************** *** 7300,7311 **** /* set/reset bold attribute to get light foreground * colors (on some terminals, e.g. "linux") */ if (color & 8) ! { ! HL_TABLE()[idx].sg_cterm |= HL_BOLD; ! HL_TABLE()[idx].sg_cterm_bold = TRUE; ! } else ! HL_TABLE()[idx].sg_cterm &= ~HL_BOLD; } color &= 7; /* truncate to 8 colors */ } --- 7302,7310 ---- /* set/reset bold attribute to get light foreground * colors (on some terminals, e.g. "linux") */ if (color & 8) ! *boldp = TRUE; else ! *boldp = FALSE; } color &= 7; /* truncate to 8 colors */ } *************** *** 7837,7842 **** --- 7836,7843 ---- } else { + int bold = MAYBE; + #if defined(__QNXNTO__) static int *color_numbers_8_qansi = color_numbers_8; /* On qnx, the 8 & 16 color arrays are the same */ *************** *** 7857,7863 **** break; } ! color = lookup_color(i, key[5] == 'F'); } /* Add one to the argument, to avoid zero. Zero is used for --- 7858,7874 ---- break; } ! color = lookup_color(i, key[5] == 'F', &bold); ! ! /* set/reset bold attribute to get light foreground ! * colors (on some terminals, e.g. "linux") */ ! if (bold == TRUE) ! { ! HL_TABLE()[idx].sg_cterm |= HL_BOLD; ! HL_TABLE()[idx].sg_cterm_bold = TRUE; ! } ! else if (bold == FALSE) ! HL_TABLE()[idx].sg_cterm &= ~HL_BOLD; } /* Add one to the argument, to avoid zero. Zero is used for *** ../vim-8.0.0830/src/proto/syntax.pro 2017-07-28 15:11:34.267537205 +0200 --- src/proto/syntax.pro 2017-08-01 17:57:13.645634248 +0200 *************** *** 23,29 **** char_u *get_syntime_arg(expand_T *xp, int idx); void init_highlight(int both, int reset); int load_colors(char_u *name); ! int lookup_color(int idx, int foreground); void do_highlight(char_u *line, int forceit, int init); void free_highlight(void); void restore_cterm_colors(void); --- 23,29 ---- char_u *get_syntime_arg(expand_T *xp, int idx); void init_highlight(int both, int reset); int load_colors(char_u *name); ! int lookup_color(int idx, int foreground, int *boldp); void do_highlight(char_u *line, int forceit, int init); void free_highlight(void); void restore_cterm_colors(void); *** ../vim-8.0.0830/src/terminal.c 2017-07-31 21:18:54.830417800 +0200 --- src/terminal.c 2017-08-01 17:57:02.021718405 +0200 *************** *** 36,42 **** * that buffer, attributes come from the scrollback buffer tl_scrollback. * * TODO: ! * - Use "." for current line instead of optional. * - make row and cols one-based instead of zero-based in term_ functions. * - Add StatusLineTerm highlighting * - in bash mouse clicks are inserting characters. --- 36,42 ---- * that buffer, attributes come from the scrollback buffer tl_scrollback. * * TODO: ! * - Use "." for current line instead of optional argument. * - make row and cols one-based instead of zero-based in term_ functions. * - Add StatusLineTerm highlighting * - in bash mouse clicks are inserting characters. *************** *** 56,61 **** --- 56,63 ---- * - do not store terminal window in viminfo. Or prefix term:// ? * - add a character in :ls output * - add 't' to mode() + * - When making a change after the job has ended, make the buffer a normal + * buffer; needs to be written. * - when closing window and job has not ended, make terminal hidden? * - when closing window and job has ended, make buffer hidden? * - don't allow exiting Vim when a terminal is still running a job *************** *** 71,76 **** --- 73,80 ---- * conversions. * - update ":help function-list" for terminal functions. * - In the GUI use a terminal emulator for :!cmd. + * - Copy text in the vterm to the Vim buffer once in a while, so that + * completion works. */ #include "vim.h" *************** *** 1253,1259 **** * First color is 1. Return 0 if no match found. */ static int ! color2index(VTermColor *color, int foreground) { int red = color->red; int blue = color->blue; --- 1257,1263 ---- * First color is 1. Return 0 if no match found. */ static int ! color2index(VTermColor *color, int fg, int *boldp) { int red = color->red; int blue = color->blue; *************** *** 1265,1280 **** if (green == 0) { if (blue == 0) ! return lookup_color(0, foreground) + 1; /* black */ if (blue == 224) ! return lookup_color(1, foreground) + 1; /* dark blue */ } else if (green == 224) { if (blue == 0) ! return lookup_color(2, foreground) + 1; /* dark green */ if (blue == 224) ! return lookup_color(3, foreground) + 1; /* dark cyan */ } } else if (red == 224) --- 1269,1284 ---- if (green == 0) { if (blue == 0) ! return lookup_color(0, fg, boldp) + 1; /* black */ if (blue == 224) ! return lookup_color(1, fg, boldp) + 1; /* dark blue */ } else if (green == 224) { if (blue == 0) ! return lookup_color(2, fg, boldp) + 1; /* dark green */ if (blue == 224) ! return lookup_color(3, fg, boldp) + 1; /* dark cyan */ } } else if (red == 224) *************** *** 1282,1319 **** if (green == 0) { if (blue == 0) ! return lookup_color(4, foreground) + 1; /* dark red */ if (blue == 224) ! return lookup_color(5, foreground) + 1; /* dark magenta */ } else if (green == 224) { if (blue == 0) ! return lookup_color(6, foreground) + 1; /* dark yellow / brown */ if (blue == 224) ! return lookup_color(8, foreground) + 1; /* white / light grey */ } } else if (red == 128) { if (green == 128 && blue == 128) ! return lookup_color(12, foreground) + 1; /* high intensity black / dark grey */ } else if (red == 255) { if (green == 64) { if (blue == 64) ! return lookup_color(20, foreground) + 1; /* light red */ if (blue == 255) ! return lookup_color(22, foreground) + 1; /* light magenta */ } else if (green == 255) { if (blue == 64) ! return lookup_color(24, foreground) + 1; /* yellow */ if (blue == 255) ! return lookup_color(26, foreground) + 1; /* white */ } } else if (red == 64) --- 1286,1323 ---- if (green == 0) { if (blue == 0) ! return lookup_color(4, fg, boldp) + 1; /* dark red */ if (blue == 224) ! return lookup_color(5, fg, boldp) + 1; /* dark magenta */ } else if (green == 224) { if (blue == 0) ! return lookup_color(6, fg, boldp) + 1; /* dark yellow / brown */ if (blue == 224) ! return lookup_color(8, fg, boldp) + 1; /* white / light grey */ } } else if (red == 128) { if (green == 128 && blue == 128) ! return lookup_color(12, fg, boldp) + 1; /* high intensity black / dark grey */ } else if (red == 255) { if (green == 64) { if (blue == 64) ! return lookup_color(20, fg, boldp) + 1; /* light red */ if (blue == 255) ! return lookup_color(22, fg, boldp) + 1; /* light magenta */ } else if (green == 255) { if (blue == 64) ! return lookup_color(24, fg, boldp) + 1; /* yellow */ if (blue == 255) ! return lookup_color(26, fg, boldp) + 1; /* white */ } } else if (red == 64) *************** *** 1321,1334 **** if (green == 64) { if (blue == 255) ! return lookup_color(14, foreground) + 1; /* light blue */ } else if (green == 255) { if (blue == 64) ! return lookup_color(16, foreground) + 1; /* light green */ if (blue == 255) ! return lookup_color(18, foreground) + 1; /* light cyan */ } } if (t_colors >= 256) --- 1325,1338 ---- if (green == 64) { if (blue == 255) ! return lookup_color(14, fg, boldp) + 1; /* light blue */ } else if (green == 255) { if (blue == 64) ! return lookup_color(16, fg, boldp) + 1; /* light green */ if (blue == 255) ! return lookup_color(18, fg, boldp) + 1; /* light cyan */ } } if (t_colors >= 256) *************** *** 1399,1406 **** else #endif { ! return get_cterm_attr_idx(attr, color2index(&cell->fg, TRUE), ! color2index(&cell->bg, FALSE)); } return 0; } --- 1403,1416 ---- else #endif { ! int bold = MAYBE; ! int fg = color2index(&cell->fg, TRUE, &bold); ! int bg = color2index(&cell->bg, FALSE, &bold); ! ! /* with 8 colors set the bold attribute to get a bright foreground */ ! if (bold == TRUE) ! attr |= HL_BOLD; ! return get_cterm_attr_idx(attr, fg, bg); } return 0; } *** ../vim-8.0.0830/src/version.c 2017-08-01 17:40:16.224985961 +0200 --- src/version.c 2017-08-01 17:51:37.700067352 +0200 *************** *** 771,772 **** --- 771,774 ---- { /* Add new patch number below this line */ + /**/ + 831, /**/ -- "A mouse can be just as dangerous as a bullet or a bomb." (US Representative Lamar Smith, R-Texas) /// 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 ///