1
0
forked from aniani/vim

patch 8.2.4795: 'cursorbind' scrolling depends on whether 'cursorline' is set

Problem:    'cursorbind' scrolling depends on whether 'cursorline' is set.
Solution:   Always call validate_cursor(). (Christian Brabandt, closes #10230,
            closes #10014)
This commit is contained in:
Christian Brabandt
2022-04-20 14:52:01 +01:00
committed by Bram Moolenaar
parent 4c84dd33ad
commit 2c645e8b00
8 changed files with 92 additions and 10 deletions

View File

@@ -2918,10 +2918,7 @@ do_check_cursorbind(void)
restart_edit_save = restart_edit; restart_edit_save = restart_edit;
restart_edit = TRUE; restart_edit = TRUE;
check_cursor(); check_cursor();
# ifdef FEAT_SYN_HL validate_cursor();
if (curwin->w_p_cul || curwin->w_p_cuc)
validate_cursor();
# endif
restart_edit = restart_edit_save; restart_edit = restart_edit_save;
// Correct cursor for multi-byte character. // Correct cursor for multi-byte character.
if (has_mbyte) if (has_mbyte)

View File

@@ -41,6 +41,21 @@ What you can use (see test_assert.vim for an example):
with "Skipped" so that it's clear this still needs work. E.g.: throw with "Skipped" so that it's clear this still needs work. E.g.: throw
"Skipped: Bug with <c-e> and popupmenu not fixed yet" "Skipped: Bug with <c-e> and popupmenu not fixed yet"
- The following environment variables are recognized and can be set to
influence the behavior of the test suite (see runtest.vim for details)
- $TEST_MAY_FAIL=Test_channel_one - ignore those failing tests
- $TEST_FILTER=Test_channel - only run test that match this pattern
- $TEST_SKIP_PAT=Test_channel - skip tests that match this pattern
- $TEST_NO_RETRY=yes - do not try to re-run failing tests
You can also set them in Vim:
:let $TEST_MAY_FAIL = 'Test_channel_one'
:let $TEST_FILTER = '_set_mode'
:let $TEST_SKIP_PAT = 'Test_loop_forever'
:let $TEST_NO_RETRY = 'yes'
Use an empty string to revert, e.g.:
:let $TEST_FILTER = ''
- See the start of runtest.vim for more help. - See the start of runtest.vim for more help.
@@ -76,19 +91,24 @@ The file 'messages' contains the messages generated by the test script. If a
test fails, then the test.log file contains the error messages. If all the test fails, then the test.log file contains the error messages. If all the
tests are successful, then this file will be an empty file. tests are successful, then this file will be an empty file.
To run a single test function from a test script: - To run a single test function from a test script:
$ ../vim -u NONE -S runtest.vim <test_file>.vim <function_name> $ ../vim -u NONE -S runtest.vim <test_file>.vim <function_name>
To run all the tests: - To execute only specific test functions, add a second argument:
$ ../vim -u NONE -S runtest.vim test_channel.vim open_delay
- To run all the tests:
$ make $ make
To run the test on MS-Windows using the MSVC nmake: - To run the test on MS-Windows using the MSVC nmake:
> nmake -f Make_dos.mak > nmake -f Make_dos.mak
To run the tests with GUI Vim: - To run the tests with GUI Vim:
$ make GUI_FLAG=-g $ make GUI_FLAG=-g
@@ -96,7 +116,6 @@ To run the tests with GUI Vim:
$ make VIMPROG=../gvim $ make VIMPROG=../gvim
To cleanup the temporary files after running the tests: - To cleanup the temporary files after running the tests:
$ make clean $ make clean

View File

@@ -0,0 +1,8 @@
|a+0&#ffffff0| |b@1| |c@1| |d@1| |e@1| |f@1| |g@1| ||+1&&|a+0&&@1| |b@1| |c@1| |d@1| |e@1| |f@1| |g@1> |h@1| |i@1| |j@1| |k@1| |l@1| |m@1| |n@1| |o@1| |p@1| |q@1| |r@1|
@19| +0&#e0e0e08||+1&#ffffff0| +0&&@19| +0&#e0e0e08| +0&#ffffff0@32
@19| +0&#e0e0e08||+1&#ffffff0| +0&&@19| +0&#e0e0e08| +0&#ffffff0@32
@19| +0&#e0e0e08||+1&#ffffff0| +0&&@19| +0&#e0e0e08| +0&#ffffff0@32
@19| +0&#e0e0e08||+1&#ffffff0| +0&&@19| +0&#e0e0e08| +0&#ffffff0@32
|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @52
|<+1#0000000&|a|m|e|]| |[|+|]| |1|,|2|1| @2|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @22|1|,|2|1| @10|A|l@1
| +0&&@74

View File

@@ -0,0 +1,8 @@
| +0&#ffffff0|h@1| |i@1| |j@1| |k@1| |l@1| |m@1| |n||+1&&|a+0&&@1| |b@1| |c@1| |d@1| |e@1| |f@1| |g@1| |h@1| |i@1| |j@1| >k@1| |l@1| |m@1| |n@1| |o@1| |p@1| |q@1| |r@1|
@10| +0&#e0e0e08| +0&#ffffff0@8||+1&&| +0&&@29| +0&#e0e0e08| +0&#ffffff0@22
@10| +0&#e0e0e08| +0&#ffffff0@8||+1&&| +0&&@29| +0&#e0e0e08| +0&#ffffff0@22
@10| +0&#e0e0e08| +0&#ffffff0@8||+1&&| +0&&@29| +0&#e0e0e08| +0&#ffffff0@22
@10| +0&#e0e0e08| +0&#ffffff0@8||+1&&| +0&&@29| +0&#e0e0e08| +0&#ffffff0@22
|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @52
|<+1#0000000&|a|m|e|]| |[|+|]| |1|,|3|1| @2|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @22|1|,|3|1| @10|A|l@1
| +0&&@74

View File

@@ -0,0 +1,8 @@
|a+8&#ffffff0| |b@1| |c@1| |d@1| |e@1| |f@1| |g@1| ||+1&&|a+8&&@1| |b@1| |c@1| |d@1| |e@1| |f@1| |g@1> |h@1| |i@1| |j@1| |k@1| |l@1| |m@1| |n@1| |o@1| |p@1| |q@1| |r@1|
| +0&&@18| +0&#e0e0e08||+1&#ffffff0| +0&&@19| +0&#e0e0e08| +0&#ffffff0@32
@19| +0&#e0e0e08||+1&#ffffff0| +0&&@19| +0&#e0e0e08| +0&#ffffff0@32
@19| +0&#e0e0e08||+1&#ffffff0| +0&&@19| +0&#e0e0e08| +0&#ffffff0@32
@19| +0&#e0e0e08||+1&#ffffff0| +0&&@19| +0&#e0e0e08| +0&#ffffff0@32
|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @52
|<+1#0000000&|a|m|e|]| |[|+|]| |1|,|2|1| @2|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @22|1|,|2|1| @10|A|l@1
|:+0&&|w|i|n|d|o| |:|s|e|t| |c|u|r|s|o|r|l|i|n|e| @52

View File

@@ -0,0 +1,8 @@
| +8&#ffffff0|h@1| |i@1| |j@1| |k@1| |l@1| |m@1| |n||+1&&|a+8&&@1| |b@1| |c@1| |d@1| |e@1| |f@1| |g@1| |h@1| |i@1| |j@1| >k@1| |l@1| |m@1| |n@1| |o@1| |p@1| |q@1| |r@1|
| +0&&@9| +0&#e0e0e08| +0&#ffffff0@8||+1&&| +0&&@29| +0&#e0e0e08| +0&#ffffff0@22
@10| +0&#e0e0e08| +0&#ffffff0@8||+1&&| +0&&@29| +0&#e0e0e08| +0&#ffffff0@22
@10| +0&#e0e0e08| +0&#ffffff0@8||+1&&| +0&&@29| +0&#e0e0e08| +0&#ffffff0@22
@10| +0&#e0e0e08| +0&#ffffff0@8||+1&&| +0&&@29| +0&#e0e0e08| +0&#ffffff0@22
|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @52
|<+1#0000000&|a|m|e|]| |[|+|]| |1|,|3|1| @2|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @22|1|,|3|1| @10|A|l@1
|:+0&&|w|i|n|d|o| |:|s|e|t| |c|u|r|s|o|r|l|i|n|e| @52

View File

@@ -293,5 +293,37 @@ func Test_cursorline_screenline_update()
call delete('Xcul_screenline') call delete('Xcul_screenline')
endfunc endfunc
func Test_cursorline_cursorbind_horizontal_scroll()
CheckScreendump
let lines =<< trim END
call setline(1, 'aa bb cc dd ee ff gg hh ii jj kk ll mm' ..
\ ' nn oo pp qq rr ss tt uu vv ww xx yy zz')
set nowrap
" The following makes the cursor apparent on the screen dump
set sidescroll=1 cursorcolumn
" add empty lines, required for cursorcolumn
call append(1, ['','','',''])
20vsp
windo :set cursorbind
END
call writefile(lines, 'Xhor_scroll')
let buf = RunVimInTerminal('-S Xhor_scroll', #{rows: 8})
call term_sendkeys(buf, "20l")
call VerifyScreenDump(buf, 'Test_hor_scroll_1', {})
call term_sendkeys(buf, "10l")
call VerifyScreenDump(buf, 'Test_hor_scroll_2', {})
call term_sendkeys(buf, ":windo :set cursorline\<cr>")
call term_sendkeys(buf, "0")
call term_sendkeys(buf, "20l")
call VerifyScreenDump(buf, 'Test_hor_scroll_3', {})
call term_sendkeys(buf, "10l")
call VerifyScreenDump(buf, 'Test_hor_scroll_4', {})
call StopVimInTerminal(buf)
"call delete('Xhor_scroll')
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -746,6 +746,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 */
/**/
4795,
/**/ /**/
4794, 4794,
/**/ /**/