summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <bram@vim.org>2014-05-28 16:47:16 +0200
committerBram Moolenaar <bram@vim.org>2014-05-28 16:47:16 +0200
commit8c3f8a31b3623de35bf4d1708d3650a7fb6e2e69 (patch)
treee1588b7b74b694d5a86a4eb951a550cd191aeba6
parent1d2be1ac98c54d6d4db593143c4a2c26fe047b32 (diff)
downloadvim-8c3f8a31b3623de35bf4d1708d3650a7fb6e2e69.tar.gz
updated for version 7.4.311v7.4.311v7-4-311
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.txt14
-rw-r--r--src/eval.c28
-rw-r--r--src/version.c2
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
diff --git a/src/eval.c b/src/eval.c
index 3d20d177..d313c5d0 100644
--- 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");
+ 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,