Mercurial > vim
changeset 5940:f6f754304324 v7.4.311
updated for version 7.4.311
Problem: Can't use winrestview to only restore part of the view.
Solution: Handle missing items in the dict. (Christian Brabandt)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 28 May 2014 16:47:16 +0200 |
parents | f972a1841779 |
children | 30e07910c3fe |
files | runtime/doc/eval.txt src/eval.c src/version.c |
diffstat | 3 files changed, 37 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -6410,6 +6410,16 @@ winrestcmd() Returns a sequence of |:res 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| tha 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
--- a/src/eval.c +++ b/src/eval.c @@ -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"); -#endif - 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 *)"coladd", -1) != NULL) + curwin->w_cursor.coladd = get_dict_number(dict, (char_u *)"coladd"); +#endif + if (dict_find(dict, (char_u *)"curswant", -1) != NULL) + { + curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant"); + curwin->w_set_curswant = FALSE; + } + + 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"); -#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 *)"topfill", -1) != NULL) + curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill"); +#endif + 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);