aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/mouse.c12
-rw-r--r--src/nvim/plines.c3
-rw-r--r--test/functional/ui/fold_spec.lua156
3 files changed, 162 insertions, 9 deletions
diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c
index 8189fde83c..208956e65d 100644
--- a/src/nvim/mouse.c
+++ b/src/nvim/mouse.c
@@ -1310,14 +1310,13 @@ retnomove:
}
first = false;
- if (hasFolding(curwin->w_topline, NULL, &curwin->w_topline)
- && curwin->w_topline == curbuf->b_ml.ml_line_count) {
- break;
- }
-
if (curwin->w_topfill > 0) {
curwin->w_topfill--;
} else {
+ if (hasFolding(curwin->w_topline, NULL, &curwin->w_topline)
+ && curwin->w_topline == curbuf->b_ml.ml_line_count) {
+ break;
+ }
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) {
// Don't include filler lines in "count"
- if (win_may_fill(win)
- && !hasFoldingWin(win, lnum, NULL, NULL, true, NULL)) {
+ if (win_may_fill(win)) {
if (lnum == win->w_topline) {
row -= win->w_topfill;
} else {
diff --git a/src/nvim/plines.c b/src/nvim/plines.c
index 5f28715f53..523b85fd32 100644
--- a/src/nvim/plines.c
+++ b/src/nvim/plines.c
@@ -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.
int plines_win_col(win_T *wp, linenr_T lnum, long column)
{
- // Check for filler lines above this buffer line. When folded the result
- // is one line anyway.
+ // Check for filler lines above this buffer line.
int lines = win_get_fill(wp, lnum);
if (!wp->w_p_wrap) {
diff --git a/test/functional/ui/fold_spec.lua b/test/functional/ui/fold_spec.lua
index 06668c0ba3..68a7c89b32 100644
--- a/test/functional/ui/fold_spec.lua
+++ b/test/functional/ui/fold_spec.lua
@@ -45,6 +45,7 @@ describe("folded lines", function()
[13] = {foreground = Screen.colors.Red, background = Screen.colors.LightGrey},
[14] = {background = Screen.colors.Red},
[15] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.Red},
+ [16] = {background = Screen.colors.LightGrey},
})
end)
@@ -2029,6 +2030,17 @@ describe("folded lines", function()
]])
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", ""}}} })
feed('G<C-E>')
if multigrid then
@@ -2245,6 +2257,150 @@ describe("folded lines", function()
|
]])
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)
it('Folded and Visual highlights are combined #19691', function()