diff options
author | Bram Moolenaar <bram@vim.org> | 2014-05-28 16:47:16 +0200 |
---|---|---|
committer | Bram Moolenaar <bram@vim.org> | 2014-05-28 16:47:16 +0200 |
commit | 8c3f8a31b3623de35bf4d1708d3650a7fb6e2e69 (patch) | |
tree | e1588b7b74b694d5a86a4eb951a550cd191aeba6 | |
parent | 1d2be1ac98c54d6d4db593143c4a2c26fe047b32 (diff) | |
download | vim-8c3f8a31b3623de35bf4d1708d3650a7fb6e2e69.tar.gz |
Problem: Can't use winrestview to only restore part of the view.
Solution: Handle missing items in the dict. (Christian Brabandt)
-rw-r--r-- | runtime/doc/eval.txt | 14 | ||||
-rw-r--r-- | src/eval.c | 28 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 34 insertions, 10 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 94cdf2b9..09a08170 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -6410,6 +6410,16 @@ winrestcmd() Returns a sequence of |:resize| commands that should restore winrestview({dict}) Uses the |Dictionary| returned by |winsaveview()| to restore the view of the current window. + Note: The {dict} does not have to contain all values, that are + returned by |winsaveview()|. If values are missing, those + settings won't be restored. So you can use: > + :call winrestview({'curswant': 4}) +< + This will only set the curswant value (the column the cursor + wants to move on vertical movements) of the cursor to column 5 + (yes, that is 5), while all other settings will remain the + same. This is useful, if you set the cursor position manually. + If you have changed the values the result is unpredictable. If the window size changed the result won't be the same. @@ -6424,7 +6434,9 @@ winsaveview() Returns a |Dictionary| that contains information to restore not opened when moving around. The return value includes: lnum cursor line number - col cursor column + col cursor column (Note: the first column + zero, as opposed to what getpos() + returns) coladd cursor column offset for 'virtualedit' curswant column for vertical movement topline first line in the window @@ -19231,20 +19231,30 @@ f_winrestview(argvars, rettv) EMSG(_(e_invarg)); else { - curwin->w_cursor.lnum = get_dict_number(dict, (char_u *)"lnum"); - curwin->w_cursor.col = get_dict_number(dict, (char_u *)"col"); + if (dict_find(dict, (char_u *)"lnum", -1) != NULL) + curwin->w_cursor.lnum = get_dict_number(dict, (char_u *)"lnum"); + if (dict_find(dict, (char_u *)"col", -1) != NULL) + curwin->w_cursor.col = get_dict_number(dict, (char_u *)"col"); #ifdef FEAT_VIRTUALEDIT - curwin->w_cursor.coladd = get_dict_number(dict, (char_u *)"coladd"); + if (dict_find(dict, (char_u *)"coladd", -1) != NULL) + curwin->w_cursor.coladd = get_dict_number(dict, (char_u *)"coladd"); #endif - curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant"); - curwin->w_set_curswant = FALSE; + if (dict_find(dict, (char_u *)"curswant", -1) != NULL) + { + curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant"); + curwin->w_set_curswant = FALSE; + } - set_topline(curwin, get_dict_number(dict, (char_u *)"topline")); + if (dict_find(dict, (char_u *)"topline", -1) != NULL) + set_topline(curwin, get_dict_number(dict, (char_u *)"topline")); #ifdef FEAT_DIFF - curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill"); + if (dict_find(dict, (char_u *)"topfill", -1) != NULL) + curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill"); #endif - curwin->w_leftcol = get_dict_number(dict, (char_u *)"leftcol"); - curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol"); + if (dict_find(dict, (char_u *)"leftcol", -1) != NULL) + curwin->w_leftcol = get_dict_number(dict, (char_u *)"leftcol"); + if (dict_find(dict, (char_u *)"skipcol", -1) != NULL) + curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol"); check_cursor(); win_new_height(curwin, curwin->w_height); diff --git a/src/version.c b/src/version.c index d817aa87..85ab6800 100644 --- a/src/version.c +++ b/src/version.c @@ -735,6 +735,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 311, +/**/ 310, /**/ 309, |