mirror of
https://github.com/neovim/neovim.git
synced 2024-12-24 05:05:00 -07:00
fix(mouse): handle folded lines with virt_lines attached to line above (#23912)
This commit is contained in:
parent
16561dac39
commit
a3fba5cafc
@ -1310,14 +1310,13 @@ retnomove:
|
|||||||
}
|
}
|
||||||
first = false;
|
first = false;
|
||||||
|
|
||||||
|
if (curwin->w_topfill > 0) {
|
||||||
|
curwin->w_topfill--;
|
||||||
|
} else {
|
||||||
if (hasFolding(curwin->w_topline, NULL, &curwin->w_topline)
|
if (hasFolding(curwin->w_topline, NULL, &curwin->w_topline)
|
||||||
&& curwin->w_topline == curbuf->b_ml.ml_line_count) {
|
&& curwin->w_topline == curbuf->b_ml.ml_line_count) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (curwin->w_topfill > 0) {
|
|
||||||
curwin->w_topfill--;
|
|
||||||
} else {
|
|
||||||
curwin->w_topline++;
|
curwin->w_topline++;
|
||||||
curwin->w_topfill = win_get_fill(curwin, curwin->w_topline);
|
curwin->w_topfill = win_get_fill(curwin, curwin->w_topline);
|
||||||
}
|
}
|
||||||
@ -1403,8 +1402,7 @@ bool mouse_comp_pos(win_T *win, int *rowp, int *colp, linenr_T *lnump)
|
|||||||
|
|
||||||
while (row > 0) {
|
while (row > 0) {
|
||||||
// Don't include filler lines in "count"
|
// Don't include filler lines in "count"
|
||||||
if (win_may_fill(win)
|
if (win_may_fill(win)) {
|
||||||
&& !hasFoldingWin(win, lnum, NULL, NULL, true, NULL)) {
|
|
||||||
if (lnum == win->w_topline) {
|
if (lnum == win->w_topline) {
|
||||||
row -= win->w_topfill;
|
row -= win->w_topfill;
|
||||||
} else {
|
} else {
|
||||||
|
@ -136,8 +136,7 @@ int plines_win_nofold(win_T *wp, linenr_T lnum)
|
|||||||
/// used from the start of the line to the given column number.
|
/// used from the start of the line to the given column number.
|
||||||
int plines_win_col(win_T *wp, linenr_T lnum, long column)
|
int plines_win_col(win_T *wp, linenr_T lnum, long column)
|
||||||
{
|
{
|
||||||
// Check for filler lines above this buffer line. When folded the result
|
// Check for filler lines above this buffer line.
|
||||||
// is one line anyway.
|
|
||||||
int lines = win_get_fill(wp, lnum);
|
int lines = win_get_fill(wp, lnum);
|
||||||
|
|
||||||
if (!wp->w_p_wrap) {
|
if (!wp->w_p_wrap) {
|
||||||
|
@ -45,6 +45,7 @@ describe("folded lines", function()
|
|||||||
[13] = {foreground = Screen.colors.Red, background = Screen.colors.LightGrey},
|
[13] = {foreground = Screen.colors.Red, background = Screen.colors.LightGrey},
|
||||||
[14] = {background = Screen.colors.Red},
|
[14] = {background = Screen.colors.Red},
|
||||||
[15] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.Red},
|
[15] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.Red},
|
||||||
|
[16] = {background = Screen.colors.LightGrey},
|
||||||
})
|
})
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@ -2029,6 +2030,17 @@ describe("folded lines", function()
|
|||||||
]])
|
]])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
meths.input_mouse('left', 'press', '', multigrid and 2 or 0, 4, 0)
|
||||||
|
eq({
|
||||||
|
column = 1,
|
||||||
|
line = 3,
|
||||||
|
screencol = 1,
|
||||||
|
screenrow = 5,
|
||||||
|
wincol = 1,
|
||||||
|
winid = 1000,
|
||||||
|
winrow = 5,
|
||||||
|
}, funcs.getmousepos())
|
||||||
|
|
||||||
meths.buf_set_extmark(0, ns, 1, 0, { virt_lines = {{{"more virt_line below line 2", ""}}} })
|
meths.buf_set_extmark(0, ns, 1, 0, { virt_lines = {{{"more virt_line below line 2", ""}}} })
|
||||||
feed('G<C-E>')
|
feed('G<C-E>')
|
||||||
if multigrid then
|
if multigrid then
|
||||||
@ -2245,6 +2257,150 @@ describe("folded lines", function()
|
|||||||
|
|
|
|
||||||
]])
|
]])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
feed('3<C-Y>')
|
||||||
|
if multigrid then
|
||||||
|
screen:expect([[
|
||||||
|
## grid 1
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[3:---------------------------------------------]|
|
||||||
|
## grid 2
|
||||||
|
virt_line below line 2 |
|
||||||
|
more virt_line below line 2 |
|
||||||
|
{5:+-- 2 lines: line 3·························}|
|
||||||
|
^line 5 |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
## grid 3
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
else
|
||||||
|
screen:expect([[
|
||||||
|
virt_line below line 2 |
|
||||||
|
more virt_line below line 2 |
|
||||||
|
{5:+-- 2 lines: line 3·························}|
|
||||||
|
^line 5 |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
end
|
||||||
|
|
||||||
|
meths.input_mouse('left', 'press', '3', multigrid and 2 or 0, 3, 0)
|
||||||
|
if multigrid then
|
||||||
|
screen:expect([[
|
||||||
|
## grid 1
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[3:---------------------------------------------]|
|
||||||
|
## grid 2
|
||||||
|
virt_line below line 2 |
|
||||||
|
more virt_line below line 2 |
|
||||||
|
{5:+-- 2 lines: line 3·························}|
|
||||||
|
^l{16:ine 5} |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
## grid 3
|
||||||
|
{11:-- VISUAL LINE --} |
|
||||||
|
]])
|
||||||
|
else
|
||||||
|
screen:expect([[
|
||||||
|
virt_line below line 2 |
|
||||||
|
more virt_line below line 2 |
|
||||||
|
{5:+-- 2 lines: line 3·························}|
|
||||||
|
^l{16:ine 5} |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{11:-- VISUAL LINE --} |
|
||||||
|
]])
|
||||||
|
end
|
||||||
|
|
||||||
|
meths.input_mouse('left', 'drag', '3', multigrid and 2 or 0, 7, 0)
|
||||||
|
if multigrid then
|
||||||
|
screen:expect([[
|
||||||
|
## grid 1
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[3:---------------------------------------------]|
|
||||||
|
## grid 2
|
||||||
|
more virt_line below line 2 |
|
||||||
|
{5:+-- 2 lines: line 3·························}|
|
||||||
|
^l{16:ine 5} |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
## grid 3
|
||||||
|
{11:-- VISUAL LINE --} |
|
||||||
|
]])
|
||||||
|
else
|
||||||
|
screen:expect([[
|
||||||
|
more virt_line below line 2 |
|
||||||
|
{5:+-- 2 lines: line 3·························}|
|
||||||
|
^l{16:ine 5} |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{11:-- VISUAL LINE --} |
|
||||||
|
]])
|
||||||
|
end
|
||||||
|
|
||||||
|
meths.input_mouse('left', 'drag', '3', multigrid and 2 or 0, 7, 5)
|
||||||
|
if multigrid then
|
||||||
|
screen:expect([[
|
||||||
|
## grid 1
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[2:---------------------------------------------]|
|
||||||
|
[3:---------------------------------------------]|
|
||||||
|
## grid 2
|
||||||
|
{5:+-- 2 lines: line 3·························}|
|
||||||
|
{16:line }^5 |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
## grid 3
|
||||||
|
{11:-- VISUAL LINE --} |
|
||||||
|
]])
|
||||||
|
else
|
||||||
|
screen:expect([[
|
||||||
|
{5:+-- 2 lines: line 3·························}|
|
||||||
|
{16:line }^5 |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{11:-- VISUAL LINE --} |
|
||||||
|
]])
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('Folded and Visual highlights are combined #19691', function()
|
it('Folded and Visual highlights are combined #19691', function()
|
||||||
|
Loading…
Reference in New Issue
Block a user