Patch 7.4.313 (after 7.4.310)
Problem:    Changing the return value of getpos() causes an error. (Jie Zhu)
Solution:   Revert getpos() and add getcurpos().
Files:      src/eval.c, src/testdir/test_eval.in, src/testdir/test_eval.ok,
            runtime/doc/eval.txt


*** ../vim-7.4.312/src/eval.c   2014-05-28 18:22:37.876225054 +0200
--- src/eval.c  2014-05-28 20:11:55.364282457 +0200
***************
*** 560,565 ****
--- 560,566 ----
  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,7972 ****
--- 7968,7974 ----
      {"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,11785 ****
--- 11782,11800 ----
      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
   */
***************
*** 11788,11793 ****
--- 11803,11817 ----
      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;
      int               fnum = -1;
***************
*** 11795,11801 ****
      if (rettv_list_alloc(rettv) == OK)
      {
        l = rettv->vval.v_list;
!       fp = var2fpos(&argvars[0], TRUE, &fnum);
        if (fnum != -1)
            list_append_number(l, (varnumber_T)fnum);
        else
--- 11819,11828 ----
      if (rettv_list_alloc(rettv) == OK)
      {
        l = rettv->vval.v_list;
!       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,11816 ****
                                (fp != NULL) ? (varnumber_T)fp->coladd :
  #endif
                                                              (varnumber_T)0);
!       if (fp == &curwin->w_cursor)
            list_append_number(l, (varnumber_T)curwin->w_curswant + 1);
      }
      else
--- 11837,11843 ----
                                (fp != NULL) ? (varnumber_T)fp->coladd :
  #endif
                                                              (varnumber_T)0);
!       if (getcurpos)
            list_append_number(l, (varnumber_T)curwin->w_curswant + 1);
      }
      else
*** ../vim-7.4.312/src/testdir/test_eval.in     2014-05-28 14:32:47.160104334 
+0200
--- src/testdir/test_eval.in    2014-05-28 20:14:27.048283785 +0200
***************
*** 190,198 ****
  :$put =v:exception
  :endtry
  :"
! :$put ='{{{1 setpos/getpos'
  /^012345678
! 6l:let sp = getpos('.')
  0:call setpos('.', sp)
  jyl:$put
  :"
--- 190,198 ----
  :$put =v:exception
  :endtry
  :"
! :$put ='{{{1 getcurpos/setpos'
  /^012345678
! 6l:let sp = getcurpos()
  0:call setpos('.', sp)
  jyl:$put
  :"
*** ../vim-7.4.312/src/testdir/test_eval.ok     2014-05-28 14:32:47.160104334 
+0200
--- src/testdir/test_eval.ok    2014-05-28 20:14:43.316283927 +0200
***************
*** 346,350 ****
  Bar exists: 1
  func Bar exists: 1
  Vim(call):E116: Invalid arguments for function append
! {{{1 setpos/getpos
  6
--- 346,350 ----
  Bar exists: 1
  func Bar exists: 1
  Vim(call):E116: Invalid arguments for function append
! {{{1 getcurpos/setpos
  6
*** ../vim-7.4.312/runtime/doc/eval.txt 2014-05-28 18:22:37.872225054 +0200
--- runtime/doc/eval.txt        2014-05-28 20:27:57.092290876 +0200
***************
*** 1808,1817 ****
  getcmdline()                  String  return the current command-line
  getcmdpos()                   Number  return cursor position in command-line
  getcmdtype()                  String  return the current command-line type
  getcwd()                      String  the current working directory
  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
--- 1808,1818 ----
  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}
  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,2613 ****
                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.
  
                Does not change the jumplist.
                If {lnum} is greater than the number of lines in the buffer,
--- 2607,2614 ----
                with two, three or four item:
                        [{lnum}, {col}, {off}]
                        [{lnum}, {col}, {off}, {curswant}]
!               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,2622 ****
--- 2618,2625 ----
                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.
***************
*** 3339,3344 ****
--- 3347,3363 ----
                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.
***************
*** 4493,4502 ****
  
                                                        *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:
                    [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
--- 4517,4526 ----
  
                                                        *getpos()*
  getpos({expr})        Get the position for {expr}.  For possible values of 
{expr}
!               see |line()|.  For getting the cursor position see
!               |getcurpos()|.
!               The result is a |List| with four numbers:
                    [bufnum, lnum, col, off]
                "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
***************
*** 4505,4520 ****
                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()|.
  
  or({expr}, {expr})                                    *or()*
                Bitwise OR on the two arguments.  The arguments are converted
--- 4529,4542 ----
                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.
                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 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
***************
*** 5347,5353 ****
                Returns 0 when the position could be set, -1 otherwise.
                An error message is given if {expr} is invalid.
  
!               Also see |getpos()|
  
                This does not restore the preferred column for moving
                vertically; if you set the cursor position with this, |j| and
--- 5369,5375 ----
                Returns 0 when the position could be set, -1 otherwise.
                An error message is given if {expr} is invalid.
  
!               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
*** ../vim-7.4.312/src/version.c        2014-05-28 18:22:37.880225054 +0200
--- src/version.c       2014-05-28 20:15:52.164284530 +0200
***************
*** 736,737 ****
--- 736,739 ----
  {   /* Add new patch number below this line */
+ /**/
+     313,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
225. You sign up for free subscriptions for all the computer magazines

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui