aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-04-01 07:11:38 +0800
committerGitHub <noreply@github.com>2022-04-01 07:11:38 +0800
commit8a6cf51a710585fee7edb9d1357791da30f31f44 (patch)
tree09cea09f139567e60d5505e0905f997346d90933
parentdc48330b9d51bffb314583bbe4073dfa1083d9a5 (diff)
downloadrneovim-8a6cf51a710585fee7edb9d1357791da30f31f44.tar.gz
rneovim-8a6cf51a710585fee7edb9d1357791da30f31f44.tar.bz2
rneovim-8a6cf51a710585fee7edb9d1357791da30f31f44.zip
vim-patch:8.2.3122: with 'nowrap' cursor position is unexected in narrow window (#17935)
Problem: With 'nowrap' cursor position is unexected in narrow window. (Leonid V. Fedorenchik) Solution: Put cursor on the last non-empty line. (closes vim/vim#8525) https://github.com/vim/vim/commit/30441bb3d5fa73f888b09684db3f54ff5ab48dbc
-rw-r--r--src/nvim/move.c7
-rw-r--r--src/nvim/testdir/test_listchars.vim6
-rw-r--r--test/functional/legacy/listchars_spec.lua136
3 files changed, 103 insertions, 46 deletions
diff --git a/src/nvim/move.c b/src/nvim/move.c
index 5e02e355bf..eda3298101 100644
--- a/src/nvim/move.c
+++ b/src/nvim/move.c
@@ -778,8 +778,13 @@ void curs_columns(win_T *wp, int may_scroll)
int textwidth = wp->w_width_inner - extra;
if (textwidth <= 0) {
// No room for text, put cursor in last char of window.
+ // If not wrapping, the last non-empty line.
wp->w_wcol = wp->w_width_inner - 1;
- wp->w_wrow = wp->w_height_inner - 1;
+ if (wp->w_p_wrap) {
+ wp->w_wrow = wp->w_height_inner - 1;
+ } else {
+ wp->w_wrow = wp->w_height_inner - 1 - wp->w_empty_rows;
+ }
} else if (wp->w_p_wrap
&& wp->w_width_inner != 0) {
width = textwidth + win_col_off2(wp);
diff --git a/src/nvim/testdir/test_listchars.vim b/src/nvim/testdir/test_listchars.vim
index c6e2ebd406..b239c9c6b5 100644
--- a/src/nvim/testdir/test_listchars.vim
+++ b/src/nvim/testdir/test_listchars.vim
@@ -542,6 +542,12 @@ func Test_listchars_foldcolumn()
call VerifyScreenDump(buf, 'Test_listchars_04', {})
call term_sendkeys(buf, "\<C-W>>")
call VerifyScreenDump(buf, 'Test_listchars_05', {})
+ call term_sendkeys(buf, "\<C-W>h")
+ call term_sendkeys(buf, ":set nowrap foldcolumn=4\<CR>")
+ call term_sendkeys(buf, "15\<C-W><")
+ call VerifyScreenDump(buf, 'Test_listchars_06', {})
+ call term_sendkeys(buf, "4\<C-W><")
+ call VerifyScreenDump(buf, 'Test_listchars_07', {})
" clean up
call StopVimInTerminal(buf)
diff --git a/test/functional/legacy/listchars_spec.lua b/test/functional/legacy/listchars_spec.lua
index 7a1afa1fd6..206e226767 100644
--- a/test/functional/legacy/listchars_spec.lua
+++ b/test/functional/legacy/listchars_spec.lua
@@ -102,6 +102,12 @@ describe("'listchars'", function()
it('"exceeds" character does not appear in foldcolumn vim-patch:8.2.3121', function()
local screen = Screen.new(60, 10)
+ screen:set_default_attr_ids({
+ [1] = {bold = true, foreground = Screen.colors.Blue}, -- NonText
+ [2] = {bold = true, reverse = true}, -- StatusLine
+ [3] = {reverse = true}, -- StatusLineNC, VertSplit
+ [4] = {background = Screen.colors.Grey, foreground = Screen.colors.DarkBlue}, -- FoldColumn, SignColumn
+ })
screen:attach()
exec([[
call setline(1, ['aaa', '', 'a', 'aaaaaa'])
@@ -111,68 +117,108 @@ describe("'listchars'", function()
]])
feed('13<C-W>>')
screen:expect([[
- aaa │ a>│ ^aaa |
- │ │ |
- a │ a │ a |
- aaaaaa │ a>│ aaaaaa |
- ~ │~ │~ |
- ~ │~ │~ |
- ~ │~ │~ |
- ~ │~ │~ |
- [No Name] [+] <[+] [No Name] [+] |
+ {4: }aaa {3:│}{4: }a{1:>}{3:│}{4: }^aaa |
+ {4: } {3:│}{4: } {3:│}{4: } |
+ {4: }a {3:│}{4: }a {3:│}{4: }a |
+ {4: }aaaaaa {3:│}{4: }a{1:>}{3:│}{4: }aaaaaa |
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {3:[No Name] [+] <[+] }{2:[No Name] [+] }|
|
]])
feed('<C-W>>')
screen:expect([[
- aaa │ >│ ^aaa |
- │ │ |
- a │ a│ a |
- aaaaaa │ >│ aaaaaa |
- ~ │~ │~ |
- ~ │~ │~ |
- ~ │~ │~ |
- ~ │~ │~ |
- [No Name] [+] <+] [No Name] [+] |
+ {4: }aaa {3:│}{4: }{1:>}{3:│}{4: }^aaa |
+ {4: } {3:│}{4: } {3:│}{4: } |
+ {4: }a {3:│}{4: }a{3:│}{4: }a |
+ {4: }aaaaaa {3:│}{4: }{1:>}{3:│}{4: }aaaaaa |
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {3:[No Name] [+] <+] }{2:[No Name] [+] }|
|
]])
feed('<C-W>>')
screen:expect([[
- aaa │ │ ^aaa |
- │ │ |
- a │ │ a |
- aaaaaa │ │ aaaaaa |
- ~ │~ │~ |
- ~ │~ │~ |
- ~ │~ │~ |
- ~ │~ │~ |
- [No Name] [+] <] [No Name] [+] |
+ {4: }aaa {3:│}{4: }{3:│}{4: }^aaa |
+ {4: } {3:│}{4: }{3:│}{4: } |
+ {4: }a {3:│}{4: }{3:│}{4: }a |
+ {4: }aaaaaa {3:│}{4: }{3:│}{4: }aaaaaa |
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {3:[No Name] [+] <] }{2:[No Name] [+] }|
|
]])
feed('<C-W>>')
screen:expect([[
- aaa │ │ ^aaa |
- │ │ |
- a │ │ a |
- aaaaaa │ │ aaaaaa |
- ~ │~ │~ |
- ~ │~ │~ |
- ~ │~ │~ |
- ~ │~ │~ |
- [No Name] [+] < [No Name] [+] |
+ {4: }aaa {3:│}{4: }{3:│}{4: }^aaa |
+ {4: } {3:│}{4: }{3:│}{4: } |
+ {4: }a {3:│}{4: }{3:│}{4: }a |
+ {4: }aaaaaa {3:│}{4: }{3:│}{4: }aaaaaa |
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {3:[No Name] [+] < }{2:[No Name] [+] }|
|
]])
feed('<C-W>>')
screen:expect([[
- aaa │ │ ^aaa |
- │ │ |
- a │ │ a |
- aaaaaa │ │ aaaaaa |
- ~ │~│~ |
- ~ │~│~ |
- ~ │~│~ |
- ~ │~│~ |
- [No Name] [+] < [No Name] [+] |
+ {4: }aaa {3:│}{4: }{3:│}{4: }^aaa |
+ {4: } {3:│}{4: }{3:│}{4: } |
+ {4: }a {3:│}{4: }{3:│}{4: }a |
+ {4: }aaaaaa {3:│}{4: }{3:│}{4: }aaaaaa |
+ {1:~ }{3:│}{1:~}{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~}{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~}{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~}{3:│}{1:~ }|
+ {3:[No Name] [+] < }{2:[No Name] [+] }|
|
]])
+ feed('<C-W>h')
+ feed_command('set nowrap foldcolumn=4')
+ screen:expect([[
+ {4: }aaa {3:│}{4: }^aaa {3:│}{4: }aaa |
+ {4: } {3:│}{4: } {3:│}{4: } |
+ {4: }a {3:│}{4: }a {3:│}{4: }a |
+ {4: }aaaaaa {3:│}{4: }aaaaaa {3:│}{4: }aaaaaa |
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {3:[No Name] [+] }{2:[No Name] [+] }{3:[No Name] [+] }|
+ :set nowrap foldcolumn=4 |
+ ]])
+ feed('15<C-W><lt>')
+ screen:expect([[
+ {4: }aaa {3:│}{4: }{3:│}{4: }aaa |
+ {4: } {3:│}{4: }{3:│}{4: } |
+ {4: }a {3:│}{4: }{3:│}{4: }a |
+ {4: }aaaaaa {3:│}{4: ^ }{3:│}{4: }aaaaaa |
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~ }{3:│}{1:~ }|
+ {3:[No Name] [+] }{2:<[+] }{3:[No Name] [+] }|
+ :set nowrap foldcolumn=4 |
+ ]])
+ feed('4<C-W><lt>')
+ screen:expect([[
+ {4: }aaa {3:│}{4: }{3:│}{4: }aaa |
+ {4: } {3:│}{4: }{3:│}{4: } |
+ {4: }a {3:│}{4: }{3:│}{4: }a |
+ {4: }aaaaaa {3:│}{4:^ }{3:│}{4: }aaaaaa |
+ {1:~ }{3:│}{1:~}{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~}{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~}{3:│}{1:~ }|
+ {1:~ }{3:│}{1:~}{3:│}{1:~ }|
+ {3:[No Name] [+] }{2:< }{3:[No Name] [+] }|
+ :set nowrap foldcolumn=4 |
+ ]])
end)
end)