mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 8.2.3204: display garbled when 'cursorline' is set and lines wrap
Problem: Display garbled when 'cursorline' is set and lines wrap. (Gabriel Dupras) Solution: Avoid inserting lines twice.
This commit is contained in:
@@ -2249,9 +2249,11 @@ win_update(win_T *wp)
|
|||||||
// up or down to minimize redrawing.
|
// up or down to minimize redrawing.
|
||||||
// Don't do this when the change continues until the end.
|
// Don't do this when the change continues until the end.
|
||||||
// Don't scroll when dollar_vcol >= 0, keep the "$".
|
// Don't scroll when dollar_vcol >= 0, keep the "$".
|
||||||
|
// Don't scroll when redrawing the top, scrolled already above.
|
||||||
if (lnum == mod_top
|
if (lnum == mod_top
|
||||||
&& mod_bot != MAXLNUM
|
&& mod_bot != MAXLNUM
|
||||||
&& !(dollar_vcol >= 0 && mod_bot == mod_top + 1))
|
&& !(dollar_vcol >= 0 && mod_bot == mod_top + 1)
|
||||||
|
&& row >= top_end)
|
||||||
{
|
{
|
||||||
int old_rows = 0;
|
int old_rows = 0;
|
||||||
int new_rows = 0;
|
int new_rows = 0;
|
||||||
|
20
src/testdir/dumps/Test_cursorline_redraw_1.dump
Normal file
20
src/testdir/dumps/Test_cursorline_redraw_1.dump
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
| +0&#ffffff0@23|o|n|e| |b|y| |o|n|e| |t|o| |a|v
|
||||||
|
|o|i|d| |p|r|o|b|l|e|m|s|.| @26
|
||||||
|
@24|A|l|s|o| |s|e@1| |||:|s|e|t|-|a
|
||||||
|
|r|g|s||| |a|b|o|v|e|.| @28
|
||||||
|
@40
|
||||||
|
|T|h|e| |{|o|p|t|i|o|n|}| |a|r|g|u|m|e|n|t|s| |t|o| |"|:|s|e|t|"| |m|a|y| |b|e|
|
||||||
|
|r|e|p|e|a|t|e|d|.| @1|F|o|r| |e|x|a|m|p|l|e|:| |>| @14
|
||||||
|
@8|:|s|e|t| |a|i| |n|o|s|i| |s|w|=|3| |t|s|=|3| @9
|
||||||
|
|I|f| |y|o|u| |m|a|k|e| |a|n| |e|r@1|o|r| |i|n| |o|n|e| |o|f| |t|h|e| |a|r|g|u|m
|
||||||
|
|e|n|t|s|,| |a|n| |e|r@1|o|r| |m|e|s@1|a|g|e| |w|i|l@1| |b|e| |g|i|v|e|n| @3
|
||||||
|
|a|n|d| |t|h|e| |f|o|l@1|o|w|i|n|g| |a|r|g|u|m|e|n|t|s| |w|i|l@1| |b|e| |i|g|n|o
|
||||||
|
|r|e|d|.| @35
|
||||||
|
@40
|
||||||
|
@40
|
||||||
|
@16|*|:|s|e|t|-|v|e|r|b|o|s|e|*| @9
|
||||||
|
>W+8&&|h|e|n| |'|v|e|r|b|o|s|e|'| |i|s| |n|o|n|-|z|e|r|o|,| |d|i|s|p|l|a|y|i|n|g| |a
|
||||||
|
|n| |o|p|t|i|o|n| |v|a|l|u|e| |w|i|l@1| |a|l|s|o| |t|e|l@1| |w|h|e|r|e| |i|t| @1
|
||||||
|
|w+0&&|a|s| |l|a|s|t| |s|e|t|.| @1|E|x|a|m|p|l|e|:| |>| @14
|
||||||
|
@8|:|v|e|r|b|o|s|e| |s|e|t| |s|h|i|f|t|w|i|d|t|h| |c|i|n|d|e|n|t|?
|
||||||
|
|<| |2@1|L|,| |9|4|2|B| @10|1|2|,|1| @9|2|0|%|
|
20
src/testdir/dumps/Test_cursorline_redraw_2.dump
Normal file
20
src/testdir/dumps/Test_cursorline_redraw_2.dump
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
| +0&#ffffff0@39
|
||||||
|
|T|h|e| |{|o|p|t|i|o|n|}| |a|r|g|u|m|e|n|t|s| |t|o| |"|:|s|e|t|"| |m|a|y| |b|e|
|
||||||
|
|r|e|p|e|a|t|e|d|.| @1|F|o|r| |e|x|a|m|p|l|e|:| |>| @14
|
||||||
|
| +8&&@7>:|s|e|t| |a|i| |n|o|s|i| |s|w|=|3| |t|s|=|3| @9
|
||||||
|
|I+0&&|f| |y|o|u| |m|a|k|e| |a|n| |e|r@1|o|r| |i|n| |o|n|e| |o|f| |t|h|e| |a|r|g|u|m
|
||||||
|
|e|n|t|s|,| |a|n| |e|r@1|o|r| |m|e|s@1|a|g|e| |w|i|l@1| |b|e| |g|i|v|e|n| @3
|
||||||
|
|a|n|d| |t|h|e| |f|o|l@1|o|w|i|n|g| |a|r|g|u|m|e|n|t|s| |w|i|l@1| |b|e| |i|g|n|o
|
||||||
|
|r|e|d|.| @35
|
||||||
|
@40
|
||||||
|
@40
|
||||||
|
@16|*|:|s|e|t|-|v|e|r|b|o|s|e|*| @9
|
||||||
|
|W|h|e|n| |'|v|e|r|b|o|s|e|'| |i|s| |n|o|n|-|z|e|r|o|,| |d|i|s|p|l|a|y|i|n|g| |a
|
||||||
|
|n| |o|p|t|i|o|n| |v|a|l|u|e| |w|i|l@1| |a|l|s|o| |t|e|l@1| |w|h|e|r|e| |i|t| @1
|
||||||
|
|w|a|s| |l|a|s|t| |s|e|t|.| @1|E|x|a|m|p|l|e|:| |>| @14
|
||||||
|
@8|:|v|e|r|b|o|s|e| |s|e|t| |s|h|i|f|t|w|i|d|t|h| |c|i|n|d|e|n|t|?
|
||||||
|
|<| @1|s|h|i|f|t|w|i|d|t|h|=|4| |~| @22
|
||||||
|
@10|L|a|s|t| |s|e|t| |f|r|o|m| |m|o|d|e|l|i|n|e| |l|i|n|e| |1|
|
||||||
|
|~| @38
|
||||||
|
@2|c|i|n|d|e|n|t| |~| @28
|
||||||
|
@22|7|,|2|-|9| @8|4@1|%|
|
@@ -110,6 +110,7 @@ endfunc
|
|||||||
func Test_cursorline_screenline()
|
func Test_cursorline_screenline()
|
||||||
CheckScreendump
|
CheckScreendump
|
||||||
CheckOption cursorlineopt
|
CheckOption cursorlineopt
|
||||||
|
|
||||||
let filename='Xcursorline'
|
let filename='Xcursorline'
|
||||||
let lines = []
|
let lines = []
|
||||||
|
|
||||||
@@ -197,4 +198,52 @@ func Test_cursorline_screenline()
|
|||||||
call delete(filename)
|
call delete(filename)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_cursorline_redraw()
|
||||||
|
CheckScreendump
|
||||||
|
CheckOption cursorlineopt
|
||||||
|
|
||||||
|
let textlines =<< END
|
||||||
|
When the option is a list of flags, {value} must be
|
||||||
|
exactly as they appear in the option. Remove flags
|
||||||
|
one by one to avoid problems.
|
||||||
|
Also see |:set-args| above.
|
||||||
|
|
||||||
|
The {option} arguments to ":set" may be repeated. For example: >
|
||||||
|
:set ai nosi sw=3 ts=3
|
||||||
|
If you make an error in one of the arguments, an error message will be given
|
||||||
|
and the following arguments will be ignored.
|
||||||
|
|
||||||
|
*:set-verbose*
|
||||||
|
When 'verbose' is non-zero, displaying an option value will also tell where it
|
||||||
|
was last set. Example: >
|
||||||
|
:verbose set shiftwidth cindent?
|
||||||
|
< shiftwidth=4 ~
|
||||||
|
Last set from modeline line 1 ~
|
||||||
|
cindent ~
|
||||||
|
Last set from /usr/local/share/vim/vim60/ftplugin/c.vim line 30 ~
|
||||||
|
This is only done when specific option values are requested, not for ":verbose
|
||||||
|
set all" or ":verbose set" without an argument.
|
||||||
|
When the option was set by hand there is no "Last set" message.
|
||||||
|
When the option was set while executing a function, user command or
|
||||||
|
END
|
||||||
|
call writefile(textlines, 'Xtextfile')
|
||||||
|
|
||||||
|
let script =<< trim END
|
||||||
|
set cursorline scrolloff=2
|
||||||
|
normal 12G
|
||||||
|
END
|
||||||
|
call writefile(script, 'Xscript')
|
||||||
|
|
||||||
|
let buf = RunVimInTerminal('-S Xscript Xtextfile', #{rows: 20, cols: 40})
|
||||||
|
call VerifyScreenDump(buf, 'Test_cursorline_redraw_1', {})
|
||||||
|
call term_sendkeys(buf, "zt")
|
||||||
|
call TermWait(buf)
|
||||||
|
call term_sendkeys(buf, "\<C-U>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_cursorline_redraw_2', {})
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('Xscript')
|
||||||
|
call delete('Xtextfile')
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -755,6 +755,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
3204,
|
||||||
/**/
|
/**/
|
||||||
3203,
|
3203,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user