# HG changeset patch # User Christian Brabandt # Date 1480774503 -3600 # Node ID 536a7d49249c8fbb1dc4c0828b1d66d9bb0c45cb # Parent e7cbe2896bfe0ff005669b2a92059ad92d741735 commit https://github.com/vim/vim/commit/a2477fd3490c1166522631eee53c57d34321086a Author: Bram Moolenaar Date: Sat Dec 3 15:13:20 2016 +0100 patch 8.0.0121 Problem: Setting 'cursorline' changes the curswant column. (Daniel Hahler) Solution: Add the P_RWINONLY flag. (closes https://github.com/vim/vim/issues/1297) diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -435,8 +435,8 @@ struct vimoption /* when option changed, what to display: */ #define P_RSTAT 0x1000 /* redraw status lines */ -#define P_RWIN 0x2000 /* redraw current window */ -#define P_RBUF 0x4000 /* redraw current buffer */ +#define P_RWIN 0x2000 /* redraw current window and recompute text */ +#define P_RBUF 0x4000 /* redraw current buffer and recompute text */ #define P_RALL 0x6000 /* redraw all windows */ #define P_RCLR 0x7000 /* clear and redraw all */ @@ -457,6 +457,7 @@ struct vimoption #define P_CURSWANT 0x4000000L /* update curswant required; not needed when * there is a redraw flag */ #define P_NDNAME 0x8000000L /* only normal dir name chars allowed */ +#define P_RWINONLY 0x10000000L /* only redraw current window */ #define ISK_LATIN1 (char_u *)"@,48-57,_,192-255" @@ -967,7 +968,7 @@ static struct vimoption options[] = (char_u *)NULL, PV_NONE, #endif {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, - {"cursorline", "cul", P_BOOL|P_VI_DEF|P_RWIN, + {"cursorline", "cul", P_BOOL|P_VI_DEF|P_RWINONLY, #ifdef FEAT_SYN_HL (char_u *)VAR_WIN, PV_CUL, #else @@ -9055,6 +9056,8 @@ check_redraw(long_u flags) changed_window_setting(); if (flags & P_RBUF) redraw_curbuf_later(NOT_VALID); + if (flags & P_RWINONLY) + redraw_later(NOT_VALID); if (doclear) redraw_all_later(CLEAR); else if (all) diff --git a/src/testdir/test_goto.vim b/src/testdir/test_goto.vim --- a/src/testdir/test_goto.vim +++ b/src/testdir/test_goto.vim @@ -273,3 +273,18 @@ func Test_gd_string_only() \ ] call XTest_goto_decl('gd', lines, 5, 10) endfunc + +" Check that setting 'cursorline' does not change curswant +func Test_cursorline_keep_col() + new + call setline(1, ['long long long line', 'short line']) + normal ggfi + let pos = getcurpos() + normal j + set cursorline + normal k + call assert_equal(pos, getcurpos()) + bwipe! + set nocursorline +endfunc + diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 121, +/**/ 120, /**/ 119,