]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.0.0542: getpos() can return a negative line number v8.0.0542
authorBram Moolenaar <Bram@vim.org>
Mon, 3 Apr 2017 20:02:55 +0000 (22:02 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 3 Apr 2017 20:02:55 +0000 (22:02 +0200)
Problem:    getpos() can return a negative line number. (haya14busa)
Solution:   Handle a zero topline and botline. (closes #1613)

runtime/doc/eval.txt
src/eval.c
src/version.c

index 0eccd618a0bcdf706116f529ca991ebdf471bf13..6c3c0da8bc5bf4c10c28b03e6b25bfbd441e8c49 100644 (file)
@@ -5413,8 +5413,10 @@ line({expr})     The result is a Number, which is the line number of the file
                    $       the last line in the current buffer
                    'x      position of mark x (if the mark is not set, 0 is
                            returned)
-                   w0      first line visible in current window
-                   w$      last line visible in current window
+                   w0      first line visible in current window (one if the
+                           display isn't updated, e.g. in silent Ex mode)
+                   w$      last line visible in current window (this is one
+                           less than "w0" if no lines are visible)
                    v       In Visual mode: the start of the Visual area (the
                            cursor is the end).  When not in Visual mode
                            returns the cursor position.  Differs from |'<| in
index e588c23e9fbc62f78cf325982da0e29f526a6a23..261ece85c577b1de5ef5fd7152d6144533685cc5 100644 (file)
@@ -6120,13 +6120,16 @@ var2fpos(
        if (name[1] == '0')             /* "w0": first visible line */
        {
            update_topline();
-           pos.lnum = curwin->w_topline;
+           /* In silent Ex mode topline is zero, but that's not a valid line
+            * number; use one instead. */
+           pos.lnum = curwin->w_topline > 0 ? curwin->w_topline : 1;
            return &pos;
        }
        else if (name[1] == '$')        /* "w$": last visible line */
        {
            validate_botline();
-           pos.lnum = curwin->w_botline - 1;
+           /* In silent Ex mode botline is zero, return zero then. */
+           pos.lnum = curwin->w_botline > 0 ? curwin->w_botline - 1 : 0;
            return &pos;
        }
     }
index eef36b4347b0d817b0926a5bedfa54282ac7eb64..d22f1655324ae4c1d34aa7e305010bcf456dcb28 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    542,
 /**/
     541,
 /**/