diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-12-03 15:13:20 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-12-03 15:13:20 +0100 |
commit | a2477fd3490c1166522631eee53c57d34321086a (patch) | |
tree | 0d5b40678aa1e56e026784e911651e7b1293c52f | |
parent | 5643db84c6a9f15d14492cefd52647623aa2ac7c (diff) |
patch 8.0.0121v8.0.0121
Problem: Setting 'cursorline' changes the curswant column. (Daniel Hahler)
Solution: Add the P_RWINONLY flag. (closes #1297)
-rw-r--r-- | src/option.c | 9 | ||||
-rw-r--r-- | src/testdir/test_goto.vim | 15 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 23 insertions, 3 deletions
diff --git a/src/option.c b/src/option.c index 7356816b6b..920f163a5f 100644 --- 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 index d0daeeb760..2573401707 100644 --- 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 index a20159cdfc..7089a83a96 100644 --- 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, |