| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.313 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| 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 |
| |
| |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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 |
| :" |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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 -- Bram@Moolenaar.net -- 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 /// |