To: vim_dev@googlegroups.com Subject: Patch 8.2.3969 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.3969 Problem: Value of MAXCOL not available in Vim script. Solution: Add v:maxcol. (Naohiro Ono, closes #9451) Files: runtime/doc/builtin.txt, runtime/doc/eval.txt, src/evalvars.c, src/testdir/test_cursor_func.vim, src/testdir/test_normal.vim, src/testdir/test_put.vim, src/vim.h *** ../vim-8.2.3968/runtime/doc/builtin.txt 2021-12-28 11:24:44.632994386 +0000 --- runtime/doc/builtin.txt 2022-01-01 14:54:04.520310464 +0000 *************** *** 2480,2486 **** :let l = filter(copy(mylist), 'v:val =~ "KEEP"') < Returns {expr1}, the |List| or |Dictionary| that was filtered, ! or a new |Blob| or |String|. When an error is encountered while evaluating {expr2} no further items in {expr1} are processed. When {expr2} is a Funcref errors inside a function are ignored, --- 2480,2486 ---- :let l = filter(copy(mylist), 'v:val =~ "KEEP"') < Returns {expr1}, the |List| or |Dictionary| that was filtered, ! or a new |Blob| or |String|. When an error is encountered while evaluating {expr2} no further items in {expr1} are processed. When {expr2} is a Funcref errors inside a function are ignored, *************** *** 3128,3135 **** Get the position for String {expr}. Same as |getpos()| but the column number in the returned List is a character index instead of a byte index. ! If |getpos()| returns a very large column number, such as ! 2147483647, then getcharpos() will return the character index of the last character. Example: --- 3130,3137 ---- Get the position for String {expr}. Same as |getpos()| but the column number in the returned List is a character index instead of a byte index. ! If |getpos()| returns a very large column number, equal to ! |v:maxcol|, then getcharpos() will return the character index of the last character. Example: *************** *** 3279,3285 **** includes an extra "curswant" item in the list: [0, lnum, col, off, curswant] ~ The "curswant" number is the preferred column when moving the ! cursor vertically. Also see |getcursorcharpos()| and |getpos()|. The first "bufnum" item is always zero. The byte position of the cursor is returned in 'col'. To get the character --- 3281,3288 ---- includes an extra "curswant" item in the list: [0, lnum, col, off, curswant] ~ The "curswant" number is the preferred column when moving the ! cursor vertically. After |$| command it will be a very large ! number equal to |v:maxcol|. Also see |getcursorcharpos()| and |getpos()|. The first "bufnum" item is always zero. The byte position of the cursor is returned in 'col'. To get the character *************** *** 3624,3635 **** 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. The column number in the returned List is the byte position within the line. To get the character position in the line, use |getcharpos()|. ! The column number can be very large, e.g. 2147483647, in which ! case it means "after the end of the line". This can be used to save and restore the position of a mark: > let save_a_mark = getpos("'a") ... --- 3627,3638 ---- 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 equal to |v:maxcol|. The column number in the returned List is the byte position within the line. To get the character position in the line, use |getcharpos()|. ! A very large column number equal to |v:maxcol| can be returned, ! in which case it means "after the end of the line". This can be used to save and restore the position of a mark: > let save_a_mark = getpos("'a") ... *************** *** 9748,9757 **** The return value includes: lnum cursor line number 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 topfill filler lines, only in diff mode leftcol first column displayed; only used when --- 9751,9764 ---- The return value includes: lnum cursor line number col cursor column (Note: the first column ! zero, as opposed to what |getcurpos()| returns) coladd cursor column offset for 'virtualedit' ! curswant column for vertical movement (Note: ! the first column is zero, as opposed ! to what |getcurpos()| returns). After ! |$| command it will be a very large ! number equal to |v:maxcol|. topline first line in the window topfill filler lines, only in diff mode leftcol first column displayed; only used when *** ../vim-8.2.3968/runtime/doc/eval.txt 2021-12-27 21:26:38.956743275 +0000 --- runtime/doc/eval.txt 2022-01-01 14:54:04.520310464 +0000 *************** *** 2159,2164 **** --- 2161,2169 ---- expressions is being evaluated. Read-only when in the |sandbox|. + *v:maxcol* *maxcol-variable* + v:maxcol Maximum line length. + *v:mouse_win* *mouse_win-variable* v:mouse_win Window number for a mouse click obtained with |getchar()|. First window has number 1, like with |winnr()|. The value is *** ../vim-8.2.3968/src/evalvars.c 2022-01-01 14:19:44.036353866 +0000 --- src/evalvars.c 2022-01-01 14:54:04.520310464 +0000 *************** *** 154,159 **** --- 154,160 ---- {VV_NAME("sizeofint", VAR_NUMBER), NULL, VV_RO}, {VV_NAME("sizeoflong", VAR_NUMBER), NULL, VV_RO}, {VV_NAME("sizeofpointer", VAR_NUMBER), NULL, VV_RO}, + {VV_NAME("maxcol", VAR_NUMBER), NULL, VV_RO}, }; // shorthand *************** *** 241,246 **** --- 242,248 ---- set_vim_var_nr(VV_SIZEOFINT, sizeof(int)); set_vim_var_nr(VV_SIZEOFLONG, sizeof(long)); set_vim_var_nr(VV_SIZEOFPOINTER, sizeof(char *)); + set_vim_var_nr(VV_MAXCOL, MAXCOL); set_vim_var_nr(VV_TYPE_NUMBER, VAR_TYPE_NUMBER); set_vim_var_nr(VV_TYPE_STRING, VAR_TYPE_STRING); *** ../vim-8.2.3968/src/testdir/test_cursor_func.vim 2021-07-21 17:04:53.343910544 +0100 --- src/testdir/test_cursor_func.vim 2022-01-01 14:54:04.520310464 +0000 *************** *** 38,43 **** --- 38,55 ---- quit! endfunc + func Test_curswant_maxcol() + new + call setline(1, 'foo') + + " Test that after "$" command curswant is set to the same value as v:maxcol. + normal! 1G$ + call assert_equal(v:maxcol, getcurpos()[4]) + call assert_equal(v:maxcol, winsaveview().curswant) + + quit! + endfunc + " Very short version of what matchparen does. function s:Highlight_Matching_Pair() let save_cursor = getcurpos() *** ../vim-8.2.3968/src/testdir/test_normal.vim 2021-12-26 15:00:00.503078780 +0000 --- src/testdir/test_normal.vim 2022-01-01 14:54:04.520310464 +0000 *************** *** 858,864 **** set nostartofline exe "norm! $\" call assert_equal('92', getline('.')) ! call assert_equal([0, 92, 2, 0, 2147483647], getcurpos()) " cleanup set startofline bw! --- 858,864 ---- set nostartofline exe "norm! $\" call assert_equal('92', getline('.')) ! call assert_equal([0, 92, 2, 0, v:maxcol], getcurpos()) " cleanup set startofline bw! *************** *** 902,908 **** norm! >>$ztzb call assert_equal(' 30', getline('.')) call assert_equal(30, winsaveview()['topline']+winheight(0)-1) ! call assert_equal([0, 30, 3, 0, 2147483647], getcurpos()) " Test for z- 1 --- 902,908 ---- norm! >>$ztzb call assert_equal(' 30', getline('.')) call assert_equal(30, winsaveview()['topline']+winheight(0)-1) ! call assert_equal([0, 30, 3, 0, v:maxcol], getcurpos()) " Test for z- 1 *************** *** 2798,2804 **** call assert_equal([0, 14, 1, 0, 1], getcurpos()) " count > buffer content norm! 120go ! call assert_equal([0, 14, 1, 0, 2147483647], getcurpos()) " clean up bw! endfunc --- 2798,2804 ---- call assert_equal([0, 14, 1, 0, 1], getcurpos()) " count > buffer content norm! 120go ! call assert_equal([0, 14, 1, 0, v:maxcol], getcurpos()) " clean up bw! endfunc *************** *** 2980,2986 **** set nostartofline exe "norm! $\" call assert_equal('95', getline('.')) ! call assert_equal([0, 95, 2, 0, 2147483647], getcurpos()) " cleanup set startofline bw! --- 2980,2986 ---- set nostartofline exe "norm! $\" call assert_equal('95', getline('.')) ! call assert_equal([0, 95, 2, 0, v:maxcol], getcurpos()) " cleanup set startofline bw! *** ../vim-8.2.3968/src/testdir/test_put.vim 2021-11-25 19:31:11.415905063 +0000 --- src/testdir/test_put.vim 2022-01-01 14:54:04.520310464 +0000 *************** *** 205,211 **** call assert_equal([0, 1, 7, 0], getpos("']")) normal Vyp ! call assert_equal([0, 1, 2147483647, 0], getpos("'>")) call assert_equal([0, 2, 7, 0], getpos("']")) bwipe! endfunc --- 205,211 ---- call assert_equal([0, 1, 7, 0], getpos("']")) normal Vyp ! call assert_equal([0, 1, v:maxcol, 0], getpos("'>")) call assert_equal([0, 2, 7, 0], getpos("']")) bwipe! endfunc *** ../vim-8.2.3968/src/vim.h 2021-12-28 15:51:40.079738196 +0000 --- src/vim.h 2022-01-01 14:54:04.520310464 +0000 *************** *** 2067,2073 **** #define VV_SIZEOFINT 100 #define VV_SIZEOFLONG 101 #define VV_SIZEOFPOINTER 102 ! #define VV_LEN 103 // number of v: vars // used for v_number in VAR_BOOL and VAR_SPECIAL #define VVAL_FALSE 0L // VAR_BOOL --- 2067,2074 ---- #define VV_SIZEOFINT 100 #define VV_SIZEOFLONG 101 #define VV_SIZEOFPOINTER 102 ! #define VV_MAXCOL 103 ! #define VV_LEN 104 // number of v: vars // used for v_number in VAR_BOOL and VAR_SPECIAL #define VVAL_FALSE 0L // VAR_BOOL *** ../vim-8.2.3968/src/version.c 2022-01-01 14:25:52.315548310 +0000 --- src/version.c 2022-01-01 14:56:10.624075121 +0000 *************** *** 751,752 **** --- 751,754 ---- { /* Add new patch number below this line */ + /**/ + 3969, /**/ -- If Microsoft would build a car... ... The airbag system would ask "are you SURE?" before deploying. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///