vim-patch:8.1.1552: cursor position is wrong after sign column changes
Problem: Cursor position is wrong after sign column appears or disappears.
(Yegappan Lakshmanan)
Solution: Call changed_line_abv_curs() instead of changed_cline_bef_curs().
f85e40afc2
This commit is contained in:
parent
c6481f70c2
commit
b376bb49b5
|
@ -198,7 +198,7 @@ static void insert_sign(
|
|||
// column for signs.
|
||||
if (buf->b_signlist == NULL) {
|
||||
redraw_buf_later(buf, NOT_VALID);
|
||||
changed_cline_bef_curs();
|
||||
changed_line_abv_curs();
|
||||
}
|
||||
|
||||
// first sign in signlist
|
||||
|
@ -495,11 +495,11 @@ linenr_T buf_delsign(
|
|||
}
|
||||
}
|
||||
|
||||
// When deleted the last sign needs to redraw the windows to remove the
|
||||
// sign column.
|
||||
// When deleting the last sign the cursor position may change, because the
|
||||
// sign columns no longer shows. And the 'signcolumn' may be hidden.
|
||||
if (buf->b_signlist == NULL) {
|
||||
redraw_buf_later(buf, NOT_VALID);
|
||||
changed_cline_bef_curs();
|
||||
changed_line_abv_curs();
|
||||
}
|
||||
|
||||
return lnum;
|
||||
|
@ -572,7 +572,7 @@ void buf_delete_signs(buf_T *buf, char_u *group)
|
|||
// When deleting the last sign need to redraw the windows to remove the
|
||||
// sign column. Not when curwin is NULL (this means we're exiting).
|
||||
if (buf->b_signlist != NULL && curwin != NULL) {
|
||||
changed_cline_bef_curs();
|
||||
changed_line_abv_curs();
|
||||
}
|
||||
|
||||
lastp = &buf->b_signlist;
|
||||
|
|
|
@ -4,6 +4,8 @@ if !has('signs')
|
|||
finish
|
||||
endif
|
||||
|
||||
source screendump.vim
|
||||
|
||||
func Test_sign()
|
||||
new
|
||||
call setline(1, ['a', 'b', 'c', 'd'])
|
||||
|
@ -1652,3 +1654,31 @@ func Test_sign_jump_func()
|
|||
sign undefine sign1
|
||||
enew! | only!
|
||||
endfunc
|
||||
|
||||
" Test for correct cursor position after the sign column appears or disappears.
|
||||
func Test_sign_cursor_position()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot make screendumps'
|
||||
endif
|
||||
|
||||
let lines =<< trim END
|
||||
call setline(1, [repeat('x', 75), 'mmmm', 'yyyy'])
|
||||
call cursor(2,1)
|
||||
sign define s1 texthl=Search text==>
|
||||
redraw
|
||||
sign place 10 line=2 name=s1
|
||||
END
|
||||
call writefile(lines, 'XtestSigncolumn')
|
||||
let buf = RunVimInTerminal('-S XtestSigncolumn', {'rows': 6})
|
||||
call VerifyScreenDump(buf, 'Test_sign_cursor_01', {})
|
||||
|
||||
" update cursor position calculation
|
||||
call term_sendkeys(buf, "lh")
|
||||
call term_sendkeys(buf, ":sign unplace 10\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_sign_cursor_02', {})
|
||||
|
||||
|
||||
" clean up
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('XtestSigncolumn')
|
||||
endfunc
|
||||
|
|
Loading…
Reference in New Issue