Mercurial > vim
annotate src/proto/fold.pro @ 34686:83875247fbc0 v9.1.0224
patch 9.1.0224: cursor may move too many lines over "right" & "below" virt text
Commit: https://github.com/vim/vim/commit/515f734e687f28f7199b2a8042197624d9f3ec15
Author: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Date: Thu Mar 28 12:01:14 2024 +0100
patch 9.1.0224: cursor may move too many lines over "right" & "below" virt text
Problem: If a line has "right" & "below" virtual text properties,
where the "below" property may be stored first due to lack of
ordering between them, then the line height is calculated to
be 1 more and causes the cursor to far over the line.
Solution: Remove some unnecessary setting of a
`next_right_goes_below = TRUE` flag for "below" and "above"
text properties. (Dylan Thacker-Smith)
I modified a regression test I recently added to cover this case,
leveraging the fact that "after", "right" & "below" text properties are
being stored in the reverse of the order they are added in. The
previous version of this regression test was crafted to workaround this
issue so it can be addressed by this separate patch.
closes: #14317
Signed-off-by: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 28 Mar 2024 12:15:03 +0100 |
parents | 34639bba19b0 |
children |
rev | line source |
---|---|
7 | 1 /* fold.c */ |
7668
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
2 void copyFoldingState(win_T *wp_from, win_T *wp_to); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
3 int hasAnyFolding(win_T *win); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
4 int hasFolding(linenr_T lnum, linenr_T *firstp, linenr_T *lastp); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
5 int hasFoldingWin(win_T *win, linenr_T lnum, linenr_T *firstp, linenr_T *lastp, int cache, foldinfo_T *infop); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
6 int lineFolded(win_T *win, linenr_T lnum); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
7 long foldedCount(win_T *win, linenr_T lnum, foldinfo_T *infop); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
8 int foldmethodIsManual(win_T *wp); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
9 int foldmethodIsIndent(win_T *wp); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
10 int foldmethodIsExpr(win_T *wp); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
11 int foldmethodIsMarker(win_T *wp); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
12 int foldmethodIsSyntax(win_T *wp); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
13 int foldmethodIsDiff(win_T *wp); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
14 void closeFold(linenr_T lnum, long count); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
15 void closeFoldRecurse(linenr_T lnum); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
16 void opFoldRange(linenr_T first, linenr_T last, int opening, int recurse, int had_visual); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
17 void openFold(linenr_T lnum, long count); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
18 void openFoldRecurse(linenr_T lnum); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
19 void foldOpenCursor(void); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
20 void newFoldLevel(void); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
21 void foldCheckClose(void); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
22 int foldManualAllowed(int create); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
23 void foldCreate(linenr_T start, linenr_T end); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
24 void deleteFold(linenr_T start, linenr_T end, int recursive, int had_visual); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
25 void clearFolding(win_T *win); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
26 void foldUpdate(win_T *wp, linenr_T top, linenr_T bot); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
27 void foldUpdateAll(win_T *win); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
28 int foldMoveTo(int updown, int dir, long count); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
29 void foldInitWin(win_T *new_win); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
30 int find_wl_entry(win_T *win, linenr_T lnum); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
31 void foldAdjustVisual(void); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
32 void foldAdjustCursor(void); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
33 void cloneFoldGrowArray(garray_T *from, garray_T *to); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
34 void deleteFoldRecurse(garray_T *gap); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
35 void foldMarkAdjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
36 int getDeepestNesting(void); |
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
37 char_u *get_foldtext(win_T *wp, linenr_T lnum, linenr_T lnume, foldinfo_T *foldinfo, char_u *buf); |
13963 | 38 void foldMoveRange(garray_T *gap, linenr_T line1, linenr_T line2, linenr_T dest); |
7668
21b0a39d13ed
commit https://github.com/vim/vim/commit/ef26954a35207c3f17d6ed35d9a40c918d974892
Christian Brabandt <cb@256bit.org>
parents:
3929
diff
changeset
|
39 int put_folds(FILE *fd, win_T *wp); |
17928
34639bba19b0
patch 8.1.1960: fold code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
13963
diff
changeset
|
40 void f_foldclosed(typval_T *argvars, typval_T *rettv); |
34639bba19b0
patch 8.1.1960: fold code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
13963
diff
changeset
|
41 void f_foldclosedend(typval_T *argvars, typval_T *rettv); |
34639bba19b0
patch 8.1.1960: fold code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
13963
diff
changeset
|
42 void f_foldlevel(typval_T *argvars, typval_T *rettv); |
34639bba19b0
patch 8.1.1960: fold code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
13963
diff
changeset
|
43 void f_foldtext(typval_T *argvars, typval_T *rettv); |
34639bba19b0
patch 8.1.1960: fold code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
13963
diff
changeset
|
44 void f_foldtextresult(typval_T *argvars, typval_T *rettv); |
7 | 45 /* vim: set ft=c : */ |