# HG changeset patch # User Christian Brabandt # Date 1532549705 -7200 # Node ID c15bef307de6d262baa762219caf20c82a641dfe # Parent 1386ba8142b4b14f3f04372b715257851b212549 patch 8.1.0212: preferred cursor column not set in interfaces commit https://github.com/vim/vim/commit/53901442f37a59e5495165f91db5574c0b43ab04 Author: Bram Moolenaar Date: Wed Jul 25 22:02:36 2018 +0200 patch 8.1.0212: preferred cursor column not set in interfaces Problem: Preferred cursor column not set in interfaces. Solution: Set w_set_curswant when setting the cursor. (David Hotham, closes #3060) diff --git a/src/if_lua.c b/src/if_lua.c --- a/src/if_lua.c +++ b/src/if_lua.c @@ -1377,6 +1377,7 @@ luaV_window_newindex (lua_State *L) luaV_checksandbox(L); #endif w->w_cursor.col = v - 1; + w->w_set_curswant = TRUE; update_screen(VALID); } else if (strncmp(s, "width", 5) == 0) diff --git a/src/if_mzsch.c b/src/if_mzsch.c --- a/src/if_mzsch.c +++ b/src/if_mzsch.c @@ -2132,6 +2132,7 @@ set_cursor(void *data, int argc, Scheme_ win->win->w_cursor.lnum = lnum; win->win->w_cursor.col = col; + win->win->w_set_curswant = TRUE; update_screen(VALID); raise_if_error(); diff --git a/src/if_perl.xs b/src/if_perl.xs --- a/src/if_perl.xs +++ b/src/if_perl.xs @@ -1691,6 +1691,7 @@ Cursor(win, ...) col = (int) SvIV(ST(2)); win->w_cursor.lnum = lnum; win->w_cursor.col = col; + win->w_set_curswant = TRUE; check_cursor(); /* put cursor on an existing line */ update_screen(NOT_VALID); } diff --git a/src/if_py_both.h b/src/if_py_both.h --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -3985,6 +3985,7 @@ WindowSetattr(WindowObject *self, char * self->win->w_cursor.lnum = lnum; self->win->w_cursor.col = col; + self->win->w_set_curswant = TRUE; #ifdef FEAT_VIRTUALEDIT self->win->w_cursor.coladd = 0; #endif diff --git a/src/if_ruby.c b/src/if_ruby.c --- a/src/if_ruby.c +++ b/src/if_ruby.c @@ -1517,6 +1517,7 @@ static VALUE window_set_cursor(VALUE sel col = RARRAY_PTR(pos)[1]; win->w_cursor.lnum = NUM2LONG(lnum); win->w_cursor.col = NUM2UINT(col); + win->w_set_curswant = TRUE; check_cursor(); /* put cursor on an existing line */ update_screen(NOT_VALID); return Qnil; diff --git a/src/if_tcl.c b/src/if_tcl.c --- a/src/if_tcl.c +++ b/src/if_tcl.c @@ -1091,6 +1091,7 @@ winselfcmd( /* TODO: should check column */ win->w_cursor.lnum = val1; win->w_cursor.col = col2vim(val2); + win->w_set_curswant = TRUE; flags |= FL_UPDATE_SCREEN; break; diff --git a/src/testdir/test_lua.vim b/src/testdir/test_lua.vim --- a/src/testdir/test_lua.vim +++ b/src/testdir/test_lua.vim @@ -555,3 +555,20 @@ func Test_luafile_error() call delete('Xlua_file') bwipe! endfunc + +func Test_set_cursor() + " Check that setting the cursor position works. + new + call setline(1, ['first line', 'second line']) + normal gg + lua << EOF +w = vim.window() +w.line = 1 +w.col = 5 +EOF + call assert_equal([1, 5], [line('.'), col('.')]) + + " Check that movement after setting cursor position keeps current column. + normal j + call assert_equal([2, 5], [line('.'), col('.')]) +endfunc diff --git a/src/testdir/test_perl.vim b/src/testdir/test_perl.vim --- a/src/testdir/test_perl.vim +++ b/src/testdir/test_perl.vim @@ -258,3 +258,16 @@ func Test_000_SvREFCNT() --perl %bw! endfunc + +func Test_set_cursor() + " Check that setting the cursor position works. + new + call setline(1, ['first line', 'second line']) + normal gg + perldo $curwin->Cursor(1, 5) + call assert_equal([1, 6], [line('.'), col('.')]) + + " Check that movement after setting cursor position keeps current column. + normal j + call assert_equal([2, 6], [line('.'), col('.')]) +endfunc diff --git a/src/testdir/test_python2.vim b/src/testdir/test_python2.vim --- a/src/testdir/test_python2.vim +++ b/src/testdir/test_python2.vim @@ -22,3 +22,17 @@ func Test_pydo() bwipe! bwipe! endfunc + +func Test_set_cursor() + " Check that setting the cursor position works. + py import vim + new + call setline(1, ['first line', 'second line']) + normal gg + pydo vim.current.window.cursor = (1, 5) + call assert_equal([1, 6], [line('.'), col('.')]) + + " Check that movement after setting cursor position keeps current column. + normal j + call assert_equal([2, 6], [line('.'), col('.')]) +endfunc diff --git a/src/testdir/test_python3.vim b/src/testdir/test_python3.vim --- a/src/testdir/test_python3.vim +++ b/src/testdir/test_python3.vim @@ -1,4 +1,4 @@ -" Test for python 2 commands. +" Test for python 3 commands. " TODO: move tests from test88.in here. if !has('python3') @@ -22,3 +22,17 @@ func Test_py3do() bwipe! bwipe! endfunc + +func Test_set_cursor() + " Check that setting the cursor position works. + py3 import vim + new + call setline(1, ['first line', 'second line']) + normal gg + py3do vim.current.window.cursor = (1, 5) + call assert_equal([1, 6], [line('.'), col('.')]) + + " Check that movement after setting cursor position keeps current column. + normal j + call assert_equal([2, 6], [line('.'), col('.')]) +endfunc diff --git a/src/testdir/test_ruby.vim b/src/testdir/test_ruby.vim --- a/src/testdir/test_ruby.vim +++ b/src/testdir/test_ruby.vim @@ -57,3 +57,16 @@ func Test_rubyfile() call assert_fails('rubyfile ' . tempfile) call delete(tempfile) endfunc + +func Test_set_cursor() + " Check that setting the cursor position works. + new + call setline(1, ['first line', 'second line']) + normal gg + rubydo $curwin.cursor = [1, 5] + call assert_equal([1, 6], [line('.'), col('.')]) + + " Check that movement after setting cursor position keeps current column. + normal j + call assert_equal([2, 6], [line('.'), col('.')]) +endfunc diff --git a/src/testdir/test_tcl.vim b/src/testdir/test_tcl.vim --- a/src/testdir/test_tcl.vim +++ b/src/testdir/test_tcl.vim @@ -665,3 +665,16 @@ func Test_tcl_exit() tcl unset bar endfunc + +func Test_set_cursor() + " Check that setting the cursor position works. + new + call setline(1, ['first line', 'second line']) + normal gg + tcldo $::vim::current(window) cursor 1 5 + call assert_equal([1, 5], [line('.'), col('.')]) + + " Check that movement after setting cursor position keeps current column. + normal j + call assert_equal([2, 5], [line('.'), col('.')]) +endfunc diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -794,6 +794,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 212, +/**/ 211, /**/ 210,