# HG changeset patch # User Christian Brabandt # Date 1712608203 -7200 # Node ID a6e19365c34d37aa109df1e8dcfd0c0dd3d495e4 # Parent 83de868083f247126343c1cef93cfa8ff7457afe patch 9.1.0277: Cannot highlight the Command-line Commit: https://github.com/vim/vim/commit/be2b03c6eecea3eae5d460e3c19ee43b73b29928 Author: Shougo Matsushita Date: Mon Apr 8 22:11:50 2024 +0200 patch 9.1.0277: Cannot highlight the Command-line Problem: Cannot highlight the Command-line Solution: Add the MsgArea highlighting group (Shougo Matsushita) closes: #14327 Signed-off-by: Shougo Matsushita Signed-off-by: Christian Brabandt diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -2485,7 +2485,7 @@ To specify elements that should not be c This is a list of the rules wich can be used here: - - titleblock + - titleblock - image - block - subscript @@ -5585,6 +5585,9 @@ MessageWindow Messages popup window used |hl-WarningMsg| is used. *hl-ModeMsg* ModeMsg 'showmode' message (e.g., "-- INSERT --"). + *hl-MsgArea* +MsgArea Command-line area, also used for outputting messages, see also + 'cmdheight' *hl-MoreMsg* MoreMsg |more-prompt| *hl-NonText* diff --git a/runtime/doc/tags b/runtime/doc/tags --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -8050,6 +8050,7 @@ hl-Menu syntax.txt /*hl-Menu* hl-MessageWindow syntax.txt /*hl-MessageWindow* hl-ModeMsg syntax.txt /*hl-ModeMsg* hl-MoreMsg syntax.txt /*hl-MoreMsg* +hl-MsgArea syntax.txt /*hl-MsgArea* hl-NonText syntax.txt /*hl-NonText* hl-Normal syntax.txt /*hl-Normal* hl-Pmenu syntax.txt /*hl-Pmenu* diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2024 Mar 28 +*version9.txt* For Vim version 9.1. Last change: 2024 Apr 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41581,6 +41581,10 @@ Autocommands: ~ |WinNewPre| before creating a new window +Highlighting: ~ + +|hl-MsgArea| highlighting of the Command-line and messages area. + Commands: ~ diff --git a/src/message.c b/src/message.c --- a/src/message.c +++ b/src/message.c @@ -1637,6 +1637,9 @@ msg_outtrans_len_attr(char_u *msgstr, in // Only quit when got_int was set in here. got_int = FALSE; + if (attr == 0) + attr = HL_ATTR(HLF_MSG); + // if MSG_HIST flag set, add message to history if (attr & MSG_HIST) { @@ -2230,6 +2233,9 @@ msg_puts_attr_len(char *str, int maxlen, if (msg_silent != 0) return; + if (attr == 0) + attr = HL_ATTR(HLF_MSG); + // if MSG_HIST flag set, add message to history if ((attr & MSG_HIST) && maxlen < 0) { @@ -2678,13 +2684,15 @@ msg_scroll_up(void) // Scrolling up doesn't result in the right background. Set the // background here. It's not efficient, but avoids that we have to do // it all over the code. - screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0); + screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, + ' ', ' ', HL_ATTR(HLF_MSG)); // Also clear the last char of the last but one line if it was not // cleared before to avoid a scroll-up. if (ScreenAttrs[LineOffset[Rows - 2] + Columns - 1] == (sattr_T)-1) screen_fill((int)Rows - 2, (int)Rows - 1, - (int)Columns - 1, (int)Columns, ' ', ' ', 0); + (int)Columns - 1, (int)Columns, + ' ', ' ', HL_ATTR(HLF_MSG)); } } @@ -2963,7 +2971,8 @@ disp_sb_line(int row, msgchunk_T *smp, i // If clearing the screen did not work (e.g. because of a background // color and t_ut isn't set) clear until the last column here. if (clear_to_eol) - screen_fill(row, row + 1, msg_col, (int)Columns, ' ', ' ', 0); + screen_fill(row, row + 1, msg_col, (int)Columns, + ' ', ' ', HL_ATTR(HLF_MSG)); if (mp->sb_eol || mp->sb_next == NULL) break; @@ -3131,6 +3140,9 @@ do_more_prompt(int typed_char) msgchunk_T *mp_last = NULL; msgchunk_T *mp; int i; + int msg_attr; + + msg_attr = HL_ATTR(HLF_MSG); // We get called recursively when a timer callback outputs a message. In // that case don't show another prompt. Also when at the hit-Enter prompt @@ -3340,8 +3352,8 @@ do_more_prompt(int typed_char) // scroll up, display line at bottom msg_scroll_up(); inc_msg_scrolled(); - screen_fill((int)Rows - 2, (int)Rows - 1, 0, - (int)Columns, ' ', ' ', 0); + screen_fill((int)Rows - 2, (int)Rows - 1, 0, (int)Columns, + ' ', ' ', msg_attr); mp_last = disp_sb_line((int)Rows - 2, mp_last, FALSE); --toscroll; } @@ -3350,8 +3362,8 @@ do_more_prompt(int typed_char) if (toscroll <= 0) { // displayed the requested text, more prompt again - screen_fill((int)Rows - 1, (int)Rows, 0, - (int)Columns, ' ', ' ', 0); + screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, + ' ', ' ', msg_attr); msg_moremsg(FALSE); continue; } @@ -3364,7 +3376,7 @@ do_more_prompt(int typed_char) } // clear the --more-- message - screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0); + screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, ' ', ' ', msg_attr); State = oldState; setmouse(); if (quit_more) @@ -3710,18 +3722,25 @@ msg_clr_eos_force(void) } else { + int msg_attr; + + msg_attr = HL_ATTR(HLF_MSG); + #ifdef FEAT_RIGHTLEFT if (cmdmsg_rl) { - screen_fill(msg_row, msg_row + 1, 0, msg_col + 1, ' ', ' ', 0); - screen_fill(msg_row + 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0); + screen_fill(msg_row, msg_row + 1, 0, msg_col + 1, + ' ', ' ', msg_attr); + screen_fill(msg_row + 1, (int)Rows, 0, (int)Columns, + ' ', ' ', msg_attr); } else #endif { screen_fill(msg_row, msg_row + 1, msg_col, (int)Columns, - ' ', ' ', 0); - screen_fill(msg_row + 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0); + ' ', ' ', msg_attr); + screen_fill(msg_row + 1, (int)Rows, 0, (int)Columns, + ' ', ' ', msg_attr); } } } diff --git a/src/optiondefs.h b/src/optiondefs.h --- a/src/optiondefs.h +++ b/src/optiondefs.h @@ -300,7 +300,7 @@ struct vimoption # define ISP_LATIN1 (char_u *)"@,161-255" #endif -# define HIGHLIGHT_INIT "8:SpecialKey,~:EndOfBuffer,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,y:CurSearch,m:MoreMsg,M:ModeMsg,n:LineNr,a:LineNrAbove,b:LineNrBelow,N:CursorLineNr,G:CursorLineSign,O:CursorLineFold,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,[:PmenuKind,]:PmenuKindSel,{:PmenuExtra,}:PmenuExtraSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn,q:QuickFixLine,z:StatusLineTerm,Z:StatusLineTermNC" +# define HIGHLIGHT_INIT "8:SpecialKey,~:EndOfBuffer,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,y:CurSearch,m:MoreMsg,M:ModeMsg,n:LineNr,a:LineNrAbove,b:LineNrBelow,N:CursorLineNr,G:CursorLineSign,O:CursorLineFold,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,[:PmenuKind,]:PmenuKindSel,{:PmenuExtra,}:PmenuExtraSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn,q:QuickFixLine,z:StatusLineTerm,Z:StatusLineTermNC,g:MsgArea" // Default python version for pyx* commands #if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3) diff --git a/src/testdir/test_highlight.vim b/src/testdir/test_highlight.vim --- a/src/testdir/test_highlight.vim +++ b/src/testdir/test_highlight.vim @@ -856,6 +856,15 @@ func Test_highlight_User() hi clear endfunc +" Test for MsgArea highlighting +func Test_highlight_MsgArea() + CheckNotGui + hi MsgArea ctermfg=20 + redraw! + call assert_equal('20', synIDattr(synIDtrans(hlID('MsgArea')), 'fg')) + hi clear +endfunc + " Test for using RGB color values in a highlight group func Test_xxlast_highlight_RGB_color() CheckCanRunGui diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 277, +/**/ 276, /**/ 275, diff --git a/src/vim.h b/src/vim.h --- a/src/vim.h +++ b/src/vim.h @@ -1515,6 +1515,7 @@ typedef enum , HLF_QFL // quickfix window line currently selected , HLF_ST // status lines of terminal windows , HLF_STNC // status lines of not-current terminal windows + , HLF_MSG // message area , HLF_COUNT // MUST be the last one } hlf_T; @@ -1526,7 +1527,7 @@ typedef enum 'B', 'P', 'R', 'L', \ '+', '=', '[', ']', '{', '}', 'x', 'X', \ '*', '#', '_', '!', '.', 'o', 'q', \ - 'z', 'Z'} + 'z', 'Z', 'g'} /* * Boolean constants