diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/highlight_defs.h | 6 | ||||
-rw-r--r-- | src/nvim/option.c | 16 | ||||
-rw-r--r-- | src/nvim/screen.c | 9 | ||||
-rw-r--r-- | src/nvim/syntax.c | 2 | ||||
-rw-r--r-- | src/nvim/testdir/test_number.vim | 33 |
5 files changed, 56 insertions, 10 deletions
diff --git a/src/nvim/highlight_defs.h b/src/nvim/highlight_defs.h index ed4aefb577..a0e8bad11f 100644 --- a/src/nvim/highlight_defs.h +++ b/src/nvim/highlight_defs.h @@ -63,7 +63,9 @@ typedef enum { , HLF_M // "--More--" message , HLF_CM // Mode (e.g., "-- INSERT --") , HLF_N // line number for ":number" and ":#" commands - , HLF_CLN // current line number + , HLF_LNA // LineNrAbove + , HLF_LNB // LineNrBelow + , HLF_CLN // current line number when 'cursorline' is set , HLF_R // return to continue message and yes/no questions , HLF_S // status lines , HLF_SNC // status lines of not-current windows @@ -118,6 +120,8 @@ EXTERN const char *hlf_names[] INIT(= { [HLF_M] = "MoreMsg", [HLF_CM] = "ModeMsg", [HLF_N] = "LineNr", + [HLF_LNA] = "LineNrAbove", + [HLF_LNB] = "LineNrBelow", [HLF_CLN] = "CursorLineNr", [HLF_R] = "Question", [HLF_S] = "StatusLine", diff --git a/src/nvim/option.c b/src/nvim/option.c index 0595776f79..f7635fe5ec 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -260,15 +260,13 @@ typedef struct vimoption { #define P_MLE 0x80000000U ///< under control of 'modelineexpr' #define HIGHLIGHT_INIT \ - "8:SpecialKey,~:EndOfBuffer,z:TermCursor,Z:TermCursorNC,@:NonText," \ - "d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr," \ - "N:CursorLineNr,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," \ - "x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill," \ - "!:CursorColumn,.:CursorLine,o:ColorColumn,q:QuickFixLine," \ - "0:Whitespace,I:NormalNC" + "8:SpecialKey,~:EndOfBuffer,z:TermCursor,Z:TermCursorNC,@:NonText,d:Directory,e:ErrorMsg," \ + "i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,a:LineNrAbove,b:LineNrBelow,N:CursorLineNr," \ + "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,x:PmenuSbar," \ + "X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn," \ + "q:QuickFixLine,0:Whitespace,I:NormalNC" /* * options[] is initialized here. diff --git a/src/nvim/screen.c b/src/nvim/screen.c index 208ae3488f..580f591b11 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -2812,6 +2812,15 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, n_extra = number_width(wp) + 1; char_attr = win_hl_attr(wp, HLF_N); + if (wp->w_p_rnu && lnum < wp->w_cursor.lnum) { + // Use LineNrAbove + char_attr = win_hl_attr(wp, HLF_LNA); + } + if (wp->w_p_rnu && lnum > wp->w_cursor.lnum) { + // Use LineNrBelow + char_attr = win_hl_attr(wp, HLF_LNB); + } + sign_attrs_T *num_sattr = sign_get_attr(SIGN_NUMHL, sattrs, 0, 1); if (num_sattr != NULL) { // :sign defined with "numhl" highlight. diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c index bdbbc4aacf..e5d4752760 100644 --- a/src/nvim/syntax.c +++ b/src/nvim/syntax.c @@ -6028,6 +6028,8 @@ static const char *highlight_init_both[] = { "VertSplit cterm=reverse gui=reverse", "WildMenu ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black", "default link EndOfBuffer NonText", + "default link LineNrAbove LineNr", + "default link LineNrBelow LineNr", "default link QuickFixLine Search", "default link Substitute Search", "default link Whitespace NonText", diff --git a/src/nvim/testdir/test_number.vim b/src/nvim/testdir/test_number.vim index eaabe3f67e..92a1bf3c9a 100644 --- a/src/nvim/testdir/test_number.vim +++ b/src/nvim/testdir/test_number.vim @@ -3,6 +3,8 @@ source check.vim source view_util.vim +source screendump.vim + func s:screen_lines(start, end) abort return ScreenLines([a:start, a:end], 8) endfunc @@ -265,6 +267,37 @@ func Test_relativenumber_uninitialised() bwipe! endfunc +func Test_relativenumber_colors() + CheckScreendump + + let lines =<< trim [CODE] + call setline(1, range(200)) + 111 + set number relativenumber + hi LineNr ctermfg=red + [CODE] + call writefile(lines, 'XTest_relnr') + + " Check that the balloon shows up after a mouse move + let buf = RunVimInTerminal('-S XTest_relnr', {'rows': 10, 'cols': 50}) + call term_wait(buf, 100) + " Default colors + call VerifyScreenDump(buf, 'Test_relnr_colors_1', {}) + + call term_sendkeys(buf, ":hi LineNrAbove ctermfg=blue\<CR>") + call VerifyScreenDump(buf, 'Test_relnr_colors_2', {}) + + call term_sendkeys(buf, ":hi LineNrBelow ctermfg=green\<CR>") + call VerifyScreenDump(buf, 'Test_relnr_colors_3', {}) + + call term_sendkeys(buf, ":hi clear LineNrAbove\<CR>") + call VerifyScreenDump(buf, 'Test_relnr_colors_4', {}) + + " clean up + call StopVimInTerminal(buf) + call delete('XTest_relnr') +endfunc + " Test for displaying line numbers with 'rightleft' func Test_number_rightleft() CheckFeature rightleft |