mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 11:15:14 -07:00
Merge #4744 'highlight listchar in cursorline'
This commit is contained in:
commit
66adc2daee
@ -3385,11 +3385,9 @@ win_line (
|
||||
&& lcs_nbsp)
|
||||
|| (c == ' ' && lcs_space && ptr - line <= trailcol))) {
|
||||
c = (c == ' ') ? lcs_space : lcs_nbsp;
|
||||
if (area_attr == 0 && search_attr == 0) {
|
||||
n_attr = 1;
|
||||
extra_attr = hl_attr(HLF_8);
|
||||
saved_attr2 = char_attr; // save current attr
|
||||
}
|
||||
n_attr = 1;
|
||||
extra_attr = hl_attr(HLF_8);
|
||||
saved_attr2 = char_attr; // save current attr
|
||||
mb_c = c;
|
||||
if (enc_utf8 && (*mb_char2len)(c) > 1) {
|
||||
mb_utf8 = true;
|
||||
@ -3402,11 +3400,9 @@ win_line (
|
||||
|
||||
if (trailcol != MAXCOL && ptr > line + trailcol && c == ' ') {
|
||||
c = lcs_trail;
|
||||
if (!attr_pri) {
|
||||
n_attr = 1;
|
||||
extra_attr = hl_attr(HLF_8);
|
||||
saved_attr2 = char_attr; /* save current attr */
|
||||
}
|
||||
n_attr = 1;
|
||||
extra_attr = hl_attr(HLF_8);
|
||||
saved_attr2 = char_attr; // save current attr
|
||||
mb_c = c;
|
||||
if (enc_utf8 && (*mb_char2len)(c) > 1) {
|
||||
mb_utf8 = TRUE;
|
||||
@ -3554,11 +3550,9 @@ win_line (
|
||||
c = ' ';
|
||||
}
|
||||
lcs_eol_one = -1;
|
||||
--ptr; /* put it back at the NUL */
|
||||
if (!attr_pri) {
|
||||
extra_attr = hl_attr(HLF_AT);
|
||||
n_attr = 1;
|
||||
}
|
||||
ptr--; // put it back at the NUL
|
||||
extra_attr = hl_attr(HLF_AT);
|
||||
n_attr = 1;
|
||||
mb_c = c;
|
||||
if (enc_utf8 && (*mb_char2len)(c) > 1) {
|
||||
mb_utf8 = TRUE;
|
||||
@ -3587,12 +3581,10 @@ win_line (
|
||||
n_extra = byte2cells(c) - 1;
|
||||
c = *p_extra++;
|
||||
}
|
||||
if (!attr_pri) {
|
||||
n_attr = n_extra + 1;
|
||||
extra_attr = hl_attr(HLF_8);
|
||||
saved_attr2 = char_attr; /* save current attr */
|
||||
}
|
||||
mb_utf8 = FALSE; /* don't draw as UTF-8 */
|
||||
n_attr = n_extra + 1;
|
||||
extra_attr = hl_attr(HLF_8);
|
||||
saved_attr2 = char_attr; // save current attr
|
||||
mb_utf8 = false; // don't draw as UTF-8
|
||||
} else if (VIsual_active
|
||||
&& (VIsual_mode == Ctrl_V
|
||||
|| VIsual_mode == 'v')
|
||||
@ -3702,11 +3694,10 @@ win_line (
|
||||
did_wcol = true;
|
||||
}
|
||||
|
||||
/* Don't override visual selection highlighting. */
|
||||
if (n_attr > 0
|
||||
&& draw_state == WL_LINE
|
||||
&& !attr_pri)
|
||||
char_attr = extra_attr;
|
||||
// Don't override visual selection highlighting.
|
||||
if (n_attr > 0 && draw_state == WL_LINE) {
|
||||
char_attr = hl_combine_attr(char_attr, extra_attr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle the case where we are in column 0 but not on the first
|
||||
@ -3734,13 +3725,12 @@ win_line (
|
||||
mb_utf8 = TRUE;
|
||||
u8cc[0] = 0;
|
||||
c = 0xc0;
|
||||
} else
|
||||
mb_utf8 = FALSE; /* don't draw as UTF-8 */
|
||||
if (!attr_pri) {
|
||||
saved_attr3 = char_attr; /* save current attr */
|
||||
char_attr = hl_attr(HLF_AT); /* later copied to char_attr */
|
||||
n_attr3 = 1;
|
||||
} else {
|
||||
mb_utf8 = false; // don't draw as UTF-8
|
||||
}
|
||||
saved_attr3 = char_attr; // save current attr
|
||||
char_attr = hl_attr(HLF_AT); // later copied to char_attr
|
||||
n_attr3 = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -361,3 +361,253 @@ describe('guisp (special/undercurl)', function()
|
||||
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("'cursorline' with 'listchars'", function()
|
||||
local screen
|
||||
|
||||
local hlgroup_colors = {
|
||||
NonText = Screen.colors.Blue,
|
||||
Cursorline = Screen.colors.Grey90,
|
||||
SpecialKey = Screen.colors.Red,
|
||||
Visual = Screen.colors.LightGrey,
|
||||
}
|
||||
|
||||
before_each(function()
|
||||
clear()
|
||||
screen = Screen.new(20,5)
|
||||
screen:attach()
|
||||
end)
|
||||
|
||||
after_each(function()
|
||||
screen:detach()
|
||||
end)
|
||||
|
||||
it("'cursorline' and 'cursorcolumn'", function()
|
||||
screen:set_default_attr_ids({[1] = {background=hlgroup_colors.Cursorline}})
|
||||
screen:set_default_attr_ignore( {{bold=true, foreground=hlgroup_colors.NonText}} )
|
||||
execute('highlight clear ModeMsg')
|
||||
execute('set cursorline')
|
||||
feed('i')
|
||||
screen:expect([[
|
||||
{1:^ }|
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
-- INSERT -- |
|
||||
]])
|
||||
feed('abcdefg<cr>kkasdf')
|
||||
screen:expect([[
|
||||
abcdefg |
|
||||
{1:kkasdf^ }|
|
||||
~ |
|
||||
~ |
|
||||
-- INSERT -- |
|
||||
]])
|
||||
feed('<esc>')
|
||||
screen:expect([[
|
||||
abcdefg |
|
||||
{1:kkasd^f }|
|
||||
~ |
|
||||
~ |
|
||||
|
|
||||
]])
|
||||
execute('set nocursorline')
|
||||
screen:expect([[
|
||||
abcdefg |
|
||||
kkasd^f |
|
||||
~ |
|
||||
~ |
|
||||
:set nocursorline |
|
||||
]])
|
||||
feed('k')
|
||||
screen:expect([[
|
||||
abcde^fg |
|
||||
kkasdf |
|
||||
~ |
|
||||
~ |
|
||||
:set nocursorline |
|
||||
]])
|
||||
feed('jjji<cr><cr><cr><esc>')
|
||||
screen:expect([[
|
||||
kkasd |
|
||||
|
|
||||
|
|
||||
^f |
|
||||
|
|
||||
]])
|
||||
execute('set cursorline')
|
||||
execute('set cursorcolumn')
|
||||
feed('kkiabcdefghijk<esc>hh')
|
||||
screen:expect([[
|
||||
kkasd {1: } |
|
||||
{1:abcdefgh^ijk }|
|
||||
{1: } |
|
||||
f {1: } |
|
||||
|
|
||||
]])
|
||||
feed('khh')
|
||||
screen:expect([[
|
||||
{1:kk^asd }|
|
||||
ab{1:c}defghijk |
|
||||
{1: } |
|
||||
f {1: } |
|
||||
|
|
||||
]])
|
||||
end)
|
||||
|
||||
it("'cursorline' and with 'listchar' option: space, eol, tab, and trail", function()
|
||||
screen:set_default_attr_ids({
|
||||
[1] = {background=hlgroup_colors.Cursorline},
|
||||
[2] = {
|
||||
foreground=hlgroup_colors.SpecialKey,
|
||||
background=hlgroup_colors.Cursorline,
|
||||
},
|
||||
[3] = {
|
||||
background=hlgroup_colors.Cursorline,
|
||||
foreground=hlgroup_colors.NonText,
|
||||
bold=true,
|
||||
},
|
||||
[4] = {
|
||||
foreground=hlgroup_colors.NonText,
|
||||
bold=true,
|
||||
},
|
||||
[5] = {
|
||||
foreground=hlgroup_colors.SpecialKey,
|
||||
},
|
||||
})
|
||||
execute('highlight clear ModeMsg')
|
||||
execute('highlight SpecialKey guifg=#FF0000')
|
||||
execute('set cursorline')
|
||||
execute('set tabstop=8')
|
||||
execute('set listchars=space:.,eol:¬,tab:>-,extends:>,precedes:<,trail:* list')
|
||||
feed('i\t abcd <cr>\t abcd <cr><esc>k')
|
||||
screen:expect([[
|
||||
{5:>-------.}abcd{5:*}{4:¬} |
|
||||
{2:^>-------.}{1:abcd}{2:*}{3:¬}{1: }|
|
||||
{4:¬} |
|
||||
{4:~ }|
|
||||
|
|
||||
]])
|
||||
feed('k')
|
||||
screen:expect([[
|
||||
{2:^>-------.}{1:abcd}{2:*}{3:¬}{1: }|
|
||||
{5:>-------.}abcd{5:*}{4:¬} |
|
||||
{4:¬} |
|
||||
{4:~ }|
|
||||
|
|
||||
]])
|
||||
execute('set nocursorline')
|
||||
screen:expect([[
|
||||
{5:^>-------.}abcd{5:*}{4:¬} |
|
||||
{5:>-------.}abcd{5:*}{4:¬} |
|
||||
{4:¬} |
|
||||
{4:~ }|
|
||||
:set nocursorline |
|
||||
]])
|
||||
execute('set nowrap')
|
||||
feed('ALorem ipsum dolor sit amet<ESC>0')
|
||||
screen:expect([[
|
||||
{5:^>-------.}abcd{5:.}Lorem{4:>}|
|
||||
{5:>-------.}abcd{5:*}{4:¬} |
|
||||
{4:¬} |
|
||||
{4:~ }|
|
||||
|
|
||||
]])
|
||||
execute('set cursorline')
|
||||
screen:expect([[
|
||||
{2:^>-------.}{1:abcd}{2:.}{1:Lorem}{4:>}|
|
||||
{5:>-------.}abcd{5:*}{4:¬} |
|
||||
{4:¬} |
|
||||
{4:~ }|
|
||||
:set cursorline |
|
||||
]])
|
||||
feed('$')
|
||||
screen:expect([[
|
||||
{4:<}{1:r}{2:.}{1:sit}{2:.}{1:ame^t}{3:¬}{1: }|
|
||||
{4:<} |
|
||||
{4:<} |
|
||||
{4:~ }|
|
||||
:set cursorline |
|
||||
]])
|
||||
feed('G')
|
||||
screen:expect([[
|
||||
{5:>-------.}abcd{5:.}Lorem{4:>}|
|
||||
{5:>-------.}abcd{5:*}{4:¬} |
|
||||
{3:^¬}{1: }|
|
||||
{4:~ }|
|
||||
:set cursorline |
|
||||
]])
|
||||
end)
|
||||
|
||||
it("'listchar' in visual mode", function()
|
||||
screen:set_default_attr_ids({
|
||||
[1] = {background=hlgroup_colors.Cursorline},
|
||||
[2] = {
|
||||
foreground=hlgroup_colors.SpecialKey,
|
||||
background=hlgroup_colors.Cursorline,
|
||||
},
|
||||
[3] = {
|
||||
background=hlgroup_colors.Cursorline,
|
||||
foreground=hlgroup_colors.NonText,
|
||||
bold=true,
|
||||
},
|
||||
[4] = {
|
||||
foreground=hlgroup_colors.NonText,
|
||||
bold=true,
|
||||
},
|
||||
[5] = {
|
||||
foreground=hlgroup_colors.SpecialKey,
|
||||
},
|
||||
[6] = {
|
||||
background=hlgroup_colors.Visual,
|
||||
},
|
||||
[7] = {
|
||||
background=hlgroup_colors.Visual,
|
||||
foreground=hlgroup_colors.SpecialKey,
|
||||
},
|
||||
[8] = {
|
||||
background=hlgroup_colors.Visual,
|
||||
foreground=hlgroup_colors.NonText,
|
||||
bold=true,
|
||||
},
|
||||
})
|
||||
execute('highlight clear ModeMsg')
|
||||
execute('highlight SpecialKey guifg=#FF0000')
|
||||
execute('set cursorline')
|
||||
execute('set tabstop=8')
|
||||
execute('set nowrap')
|
||||
execute('set listchars=space:.,eol:¬,tab:>-,extends:>,precedes:<,trail:* list')
|
||||
feed('i\t abcd <cr>\t abcd Lorem ipsum dolor sit amet<cr><esc>kkk0')
|
||||
screen:expect([[
|
||||
{2:^>-------.}{1:abcd}{2:*}{3:¬}{1: }|
|
||||
{5:>-------.}abcd{5:.}Lorem{4:>}|
|
||||
{4:¬} |
|
||||
{4:~ }|
|
||||
|
|
||||
]])
|
||||
feed('lllvj')
|
||||
screen:expect([[
|
||||
{5:>-------.}a{6:bcd}{7:*}{8:¬} |
|
||||
{7:>-------.}{6:a}^bcd{5:.}Lorem{4:>}|
|
||||
{4:¬} |
|
||||
{4:~ }|
|
||||
-- VISUAL -- |
|
||||
]])
|
||||
feed('<esc>V')
|
||||
screen:expect([[
|
||||
{5:>-------.}abcd{5:*}{4:¬} |
|
||||
{7:>-------.}{6:a}^b{6:cd}{7:.}{6:Lorem}{4:>}|
|
||||
{4:¬} |
|
||||
{4:~ }|
|
||||
-- VISUAL LINE -- |
|
||||
]])
|
||||
feed('<esc>$')
|
||||
screen:expect([[
|
||||
{4:<} |
|
||||
{4:<}{1:r}{2:.}{1:sit}{2:.}{1:ame^t}{3:¬}{1: }|
|
||||
{4:<} |
|
||||
{4:~ }|
|
||||
|
|
||||
]])
|
||||
end)
|
||||
end)
|
||||
|
@ -23,7 +23,12 @@ describe('Mouse input', function()
|
||||
screen:attach()
|
||||
screen:set_default_attr_ids({
|
||||
[1] = {background = hlgroup_colors.Visual},
|
||||
[2] = {bold = true}
|
||||
[2] = {bold = true},
|
||||
[3] = {
|
||||
foreground = hlgroup_colors.NonText,
|
||||
background = hlgroup_colors.Visual,
|
||||
bold = true,
|
||||
},
|
||||
})
|
||||
screen:set_default_attr_ignore( {{bold=true, foreground=hlgroup_colors.NonText}} )
|
||||
feed('itesting<cr>mouse<cr>support and selection<esc>')
|
||||
@ -225,14 +230,14 @@ describe('Mouse input', function()
|
||||
feed('<LeftDrag><2,2>')
|
||||
screen:expect([[
|
||||
testing |
|
||||
mo{1:use } |
|
||||
mo{1:use}{3: } |
|
||||
{1:su}^pport and selection |
|
||||
~ |
|
||||
{2:-- VISUAL --} |
|
||||
]])
|
||||
feed('<LeftDrag><0,0>')
|
||||
screen:expect([[
|
||||
^t{1:esting } |
|
||||
^t{1:esting}{3: } |
|
||||
{1:mou}se |
|
||||
support and selection |
|
||||
~ |
|
||||
@ -293,7 +298,7 @@ describe('Mouse input', function()
|
||||
screen:expect([[
|
||||
testing |
|
||||
mouse |
|
||||
{1:su}^p{1:port and selection } |
|
||||
{1:su}^p{1:port and selection}{3: } |
|
||||
~ |
|
||||
{2:-- VISUAL LINE --} |
|
||||
]])
|
||||
@ -321,8 +326,8 @@ describe('Mouse input', function()
|
||||
]])
|
||||
feed('<RightMouse><2,2>')
|
||||
screen:expect([[
|
||||
{1:testing } |
|
||||
{1:mouse } |
|
||||
{1:testing}{3: } |
|
||||
{1:mouse}{3: } |
|
||||
{1:su}^pport and selection |
|
||||
~ |
|
||||
{2:-- VISUAL --} |
|
||||
|
Loading…
Reference in New Issue
Block a user