]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.313 v7.4.313
authorBram Moolenaar <Bram@vim.org>
Wed, 28 May 2014 18:31:42 +0000 (20:31 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 28 May 2014 18:31:42 +0000 (20:31 +0200)
Problem:    Changing the return value of getpos() causes an error. (Jie Zhu)
Solution:   Revert getpos() and add getcurpos().

runtime/doc/eval.txt
src/eval.c
src/testdir/test_eval.in
src/testdir/test_eval.ok
src/version.c

index b51770bfaa4356fde2df3c8c002c6fc3bb736820..86cc88efad7ebaeea98a6cae9b6458a88c63a93c 100644 (file)
@@ -1808,10 +1808,11 @@ getcharmod( )                   Number  modifiers for the last typed character
 getcmdline()                   String  return the current command-line
 getcmdpos()                    Number  return cursor position in command-line
 getcmdtype()                   String  return the current command-line type
+getcurpos()                    List    position of the cursor
 getcwd()                       String  the current working directory
+getfontname( [{name}])         String  name of font being used
 getfperm( {fname})             String  file permissions of file {fname}
 getfsize( {fname})             Number  size in bytes of file {fname}
-getfontname( [{name}])         String  name of font being used
 getftime( {fname})             Number  last modification time of file
 getftype( {fname})             String  description of type of file {fname}
 getline( {lnum})               String  line {lnum} of current buffer
@@ -2606,8 +2607,8 @@ cursor({list})
                with two, three or four item:
                        [{lnum}, {col}, {off}]
                        [{lnum}, {col}, {off}, {curswant}]
-               This is like the return value of |getpos()|, but without the
-               first item.
+               This is like the return value of |getpos()| or |getcurpos|,
+               but without the first item.
 
                Does not change the jumplist.
                If {lnum} is greater than the number of lines in the buffer,
@@ -2617,6 +2618,8 @@ cursor({list})
                the cursor will be positioned at the last character in the
                line.
                If {col} is zero, the cursor will stay in the current column.
+               If {curswant} is given it is used to set the preferred column
+               for vertical movment.  Otherwise {col} is used.
                When 'virtualedit' is used {off} specifies the offset in
                screen columns from the start of the character.  E.g., a
                position within a <Tab> or after the last character.
@@ -3340,6 +3343,17 @@ getcmdtype()                                             *getcmdtype()*
                Returns an empty string otherwise.
                Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
 
+                                                       *getcurpos()*
+getcurpos()    Get the position of the cursor.  This is like getpos('.'), but
+               includes an extra item in the list:
+                   [bufnum, lnum, col, off, curswant]
+               The "curswant" number is the preferred column when moving the
+               cursor vertically.
+               This can be used to save and restore the cursor position: >
+                       let save_cursor = getcurpos()
+                       MoveTheCursorAround
+                       call setpos('.', save_cursor)
+
                                                        *getcwd()*
 getcwd()       The result is a String, which is the name of the current
                working directory.
@@ -4499,10 +4513,10 @@ getpid()        Return a Number which is the process ID of the Vim process.
 
                                                        *getpos()*
 getpos({expr}) Get the position for {expr}.  For possible values of {expr}
-               see |line()|.
-               The result is a |List| with four or five numbers:
+               see |line()|.  For getting the cursor position see
+               |getcurpos()|.
+               The result is a |List| with four numbers:
                    [bufnum, lnum, col, off]
-                   [bufnum, lnum, col, off, curswant]
                "bufnum" is zero, unless a mark like '0 or 'A is used, then it
                is the buffer number of the mark.
                "lnum" and "col" are the position in the buffer.  The first
@@ -4511,16 +4525,14 @@ getpos({expr})  Get the position for {expr}.  For possible values of {expr}
                it is the offset in screen columns from the start of the
                character.  E.g., a position within a <Tab> or after the last
                character.
-               The "curswant" number is only added for getpos('.'), it is the
-               preferred column when moving the cursor vertically.
                Note that for '< and '> Visual mode matters: when it is "V"
                (visual line mode) the column of '< is zero and the column of
                '> is a large number.
-               This can be used to save and restore the cursor position: >
-                       let save_cursor = getpos(".")
-                       MoveTheCursorAround
-                       call setpos('.', save_cursor)
-<              Also see |setpos()|.
+               This can be used to save and restore the position of a mark: >
+                       let save_a_mark = getpos("'a")
+                       ...
+                       call setpos(''a', save_a_mark
+<              Also see |getcurpos()| and |setpos()|.
 
 or({expr}, {expr})                                     *or()*
                Bitwise OR on the two arguments.  The arguments are converted
@@ -5353,7 +5365,7 @@ setpos({expr}, {list})
                Returns 0 when the position could be set, -1 otherwise.
                An error message is given if {expr} is invalid.
 
-               Also see |getpos()|
+               Also see |getpos()| and |getcurpos()|.
 
                This does not restore the preferred column for moving
                vertically; if you set the cursor position with this, |j| and
index 0e9ec9ed0ae7df7655601eeabc42870a3b3c693d..51ec0b8b969ec9e855d9ea93174ca0c47e8c80bb 100644 (file)
@@ -560,6 +560,7 @@ static void f_getftype __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_getline __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_getmatches __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_getpid __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_getcurpos __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_getpos __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_getqflist __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_getreg __ARGS((typval_T *argvars, typval_T *rettv));
@@ -7967,6 +7968,7 @@ static struct fst
     {"getcmdline",     0, 0, f_getcmdline},
     {"getcmdpos",      0, 0, f_getcmdpos},
     {"getcmdtype",     0, 0, f_getcmdtype},
+    {"getcurpos",      0, 0, f_getcurpos},
     {"getcwd",         0, 0, f_getcwd},
     {"getfontname",    0, 1, f_getfontname},
     {"getfperm",       1, 1, f_getfperm},
@@ -11780,6 +11782,19 @@ f_getpid(argvars, rettv)
     rettv->vval.v_number = mch_get_pid();
 }
 
+static void getpos_both __ARGS((typval_T *argvars, typval_T *rettv, int getcurpos));
+
+/*
+ * "getcurpos()" function
+ */
+    static void
+f_getcurpos(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    getpos_both(argvars, rettv, TRUE);
+}
+
 /*
  * "getpos(string)" function
  */
@@ -11787,6 +11802,15 @@ f_getpid(argvars, rettv)
 f_getpos(argvars, rettv)
     typval_T   *argvars;
     typval_T   *rettv;
+{
+    getpos_both(argvars, rettv, FALSE);
+}
+
+    static void
+getpos_both(argvars, rettv, getcurpos)
+    typval_T   *argvars;
+    typval_T   *rettv;
+    int                getcurpos;
 {
     pos_T      *fp;
     list_T     *l;
@@ -11795,7 +11819,10 @@ f_getpos(argvars, rettv)
     if (rettv_list_alloc(rettv) == OK)
     {
        l = rettv->vval.v_list;
-       fp = var2fpos(&argvars[0], TRUE, &fnum);
+       if (getcurpos)
+           fp = &curwin->w_cursor;
+       else
+           fp = var2fpos(&argvars[0], TRUE, &fnum);
        if (fnum != -1)
            list_append_number(l, (varnumber_T)fnum);
        else
@@ -11810,7 +11837,7 @@ f_getpos(argvars, rettv)
                                (fp != NULL) ? (varnumber_T)fp->coladd :
 #endif
                                                              (varnumber_T)0);
-       if (fp == &curwin->w_cursor)
+       if (getcurpos)
            list_append_number(l, (varnumber_T)curwin->w_curswant + 1);
     }
     else
index 5a466d4028a331125173c0df219d192c8b2318f8..cd605af56eb74a7e514a9d3c5617bc9d49f997f5 100644 (file)
@@ -190,9 +190,9 @@ endfun
 :$put =v:exception
 :endtry
 :"
-:$put ='{{{1 setpos/getpos'
+:$put ='{{{1 getcurpos/setpos'
 /^012345678
-6l:let sp = getpos('.')
+6l:let sp = getcurpos()
 0:call setpos('.', sp)
 jyl:$put
 :"
index 7bbce810f8273c4457d27be9572ee406300c0502..59112d028e72a937287ae2d2b7e60a0a03bd4493 100644 (file)
Binary files a/src/testdir/test_eval.ok and b/src/testdir/test_eval.ok differ
index b3ec0d31867578788d3cfd2df1d93842a028281a..dc5988be506524017f025df17007fb3b8f15c91c 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    313,
 /**/
     312,
 /**/