patch 9.1.1108: 'smoothscroll' gets stuck with 'listchars' "eol"
Problem: 'smoothscroll' gets stuck with 'listchars' "eol".
Solution: Count size of 'listchars' "eol" in line size when scrolling.
(zeertzjq)
related: neovim/neovim#32405
closes: #16627
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/charset.c b/src/charset.c
index b4bc812..9c68d4a 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -821,6 +821,7 @@
/*
* Like linetabsize_str(), but for a given window instead of the current one.
+ * Doesn't count the size of 'listchars' "eol".
*/
int
win_linetabsize(win_T *wp, linenr_T lnum, char_u *line, colnr_T len)
@@ -836,8 +837,9 @@
/*
* Return the number of cells line "lnum" of window "wp" will take on the
* screen, taking into account the size of a tab and text properties.
+ * Doesn't count the size of 'listchars' "eol".
*/
- int
+ int
linetabsize(win_T *wp, linenr_T lnum)
{
return win_linetabsize(wp, lnum,
@@ -845,6 +847,16 @@
}
/*
+ * Like linetabsize(), but counts the size of 'listchars' "eol".
+ */
+ int
+linetabsize_eol(win_T *wp, linenr_T lnum)
+{
+ return linetabsize(wp, lnum)
+ + ((wp->w_p_list && wp->w_lcs_chars.eol != NUL) ? 1 : 0);
+}
+
+/*
* Like linetabsize(), but excludes 'above'/'after'/'right'/'below' aligned
* virtual text, while keeping inline virtual text.
*/