diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/screen.c | 39 | ||||
-rw-r--r-- | src/nvim/testdir/test_highlight.vim | 46 |
2 files changed, 63 insertions, 22 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index 32371b8aba..138736f31b 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -2377,27 +2377,30 @@ win_line ( filler_lines = wp->w_topfill; filler_todo = filler_lines; - // Cursor line highlighting for 'cursorline' in the current window. Not - // when Visual mode is active, because it's not clear what is selected - // then. - if (wp->w_p_cul && lnum == wp->w_cursor.lnum - && !(wp == curwin && VIsual_active)) { - int cul_attr = win_hl_attr(wp, HLF_CUL); - HlAttrs ae = syn_attr2entry(cul_attr); - - // We make a compromise here (#7383): - // * low-priority CursorLine if fg is not set - // * high-priority ("same as Vim" priority) CursorLine if fg is set - if (ae.rgb_fg_color == -1 && ae.cterm_fg_color == 0) { - line_attr_lowprio = cul_attr; - } else { - if (!(State & INSERT) && bt_quickfix(wp->w_buffer) - && qf_current_entry(wp) == lnum) { - line_attr = hl_combine_attr(cul_attr, line_attr); + // Cursor line highlighting for 'cursorline' in the current window. + if (wp->w_p_cul && lnum == wp->w_cursor.lnum) { + // Do not show the cursor line when Visual mode is active, because it's + // not clear what is selected then. + if (!(wp == curwin && VIsual_active)) { + int cul_attr = win_hl_attr(wp, HLF_CUL); + HlAttrs ae = syn_attr2entry(cul_attr); + + // We make a compromise here (#7383): + // * low-priority CursorLine if fg is not set + // * high-priority ("same as Vim" priority) CursorLine if fg is set + if (ae.rgb_fg_color == -1 && ae.cterm_fg_color == 0) { + line_attr_lowprio = cul_attr; } else { - line_attr = cul_attr; + if (!(State & INSERT) && bt_quickfix(wp->w_buffer) + && qf_current_entry(wp) == lnum) { + line_attr = hl_combine_attr(cul_attr, line_attr); + } else { + line_attr = cul_attr; + } } } + // Update w_last_cursorline even if Visual mode is active. + wp->w_last_cursorline = wp->w_cursor.lnum; } // If this line has a sign with line highlighting set line_attr. diff --git a/src/nvim/testdir/test_highlight.vim b/src/nvim/testdir/test_highlight.vim index 33df79581c..e751fb5d16 100644 --- a/src/nvim/testdir/test_highlight.vim +++ b/src/nvim/testdir/test_highlight.vim @@ -129,10 +129,6 @@ func Test_highlight_eol_with_cursorline() endfunc func Test_highlight_eol_with_cursorline_vertsplit() - if !has('vertsplit') - return - endif - let [hiCursorLine, hi_ul, hi_bg] = HiCursorLine() call NewWindow('topleft 5', 5) @@ -533,3 +529,45 @@ func Test_termguicolors() set t_Co=0 redraw endfunc + +func Test_cursorline_after_yank() + if !CanRunVimInTerminal() + return + endif + + call writefile([ + \ 'set cul rnu', + \ 'call setline(1, ["","1","2","3",""])', + \ ], 'Xtest_cursorline_yank') + let buf = RunVimInTerminal('-S Xtest_cursorline_yank', {'rows': 8}) + call term_wait(buf) + call term_sendkeys(buf, "Gy3k") + call term_wait(buf) + call term_sendkeys(buf, "jj") + + call VerifyScreenDump(buf, 'Test_cursorline_yank_01', {}) + + " clean up + call StopVimInTerminal(buf) + call delete('Xtest_cursorline_yank') +endfunc + +func Test_cursorline_with_visualmode() + if !CanRunVimInTerminal() + return + endif + + call writefile([ + \ 'set cul', + \ 'call setline(1, repeat(["abc"], 50))', + \ ], 'Xtest_cursorline_with_visualmode') + let buf = RunVimInTerminal('-S Xtest_cursorline_with_visualmode', {'rows': 12}) + call term_wait(buf) + call term_sendkeys(buf, "V\<C-f>kkkjk") + + call VerifyScreenDump(buf, 'Test_cursorline_with_visualmode_01', {}) + + " clean up + call StopVimInTerminal(buf) + call delete('Xtest_cursorline_with_visualmode') +endfunc |