Patch 8.1.1961
Problem: More functions can be used as a method.
Solution: Allow more functions to be used as a method. Add a test for
mapcheck().
Files: runtime/doc/eval.txt, src/evalfunc.c, src/testdir/test70.in,
src/testdir/test_functions.vim, src/testdir/test_getcwd.vim,
src/testdir/test_maparg.vim, src/testdir/test_match.vim
*** ../vim-8.1.1960/runtime/doc/eval.txt 2019-08-31 22:16:30.770127033
+0200
--- runtime/doc/eval.txt 2019-09-01 19:13:56.334609314 +0200
***************
*** 6691,6696 ****
--- 6699,6706 ----
mapped, and have it do the original mapping too. Sketch: >
exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
+ < Can also be used as a |method|: >
+ GetKey()->maparg('n')
mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()*
Check if there is a mapping that matches with {name} in mode
***************
*** 6725,6730 ****
--- 6735,6743 ----
< This avoids adding the "_vv" mapping when there already is a
mapping for "_v" or for "_vvv".
+ Can also be used as a |method|: >
+ GetKey()->mapcheck('n')
+
match({expr}, {pat} [, {start} [, {count}]]) *match()*
When {expr} is a |List| then this returns the index of the
first item where {pat} matches. Each item is used as a
***************
*** 6783,6788 ****
--- 6796,6804 ----
the pattern. 'smartcase' is NOT used. The matching is always
done like 'magic' is set and 'cpoptions' is empty.
+ Can also be used as a |method|: >
+ GetList()->match('word')
+ <
*matchadd()* *E798* *E799* *E801* *E957*
matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
Defines a pattern to be highlighted in the current window (a
***************
*** 6838,6843 ****
--- 6854,6862 ----
available from |getmatches()|. All matches can be deleted in
one operation by |clearmatches()|.
+ Can also be used as a |method|: >
+ GetGroup()->matchadd('TODO')
+ <
*matchaddpos()*
matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
Same as |matchadd()|, but requires a list of positions {pos}
***************
*** 6872,6877 ****
--- 6891,6899 ----
|getmatches()| with an entry "pos1", "pos2", etc., with the
value a list like the {pos} item.
+ Can also be used as a |method|: >
+ GetGroup()->matchaddpos([23, 11])
+
matcharg({nr})
*matcharg()*
Selects the {nr} match item, as set with a |:match|,
|:2match| or |:3match| command.
***************
*** 6884,6889 ****
--- 6906,6914 ----
Highlighting matches using the |:match| commands are limited
to three matches. |matchadd()| does not have this limitation.
+ Can also be used as a |method|: >
+ GetMatch()->matcharg()
+
matchdelete({id} [, {win}) *matchdelete()* *E802* *E803*
Deletes a match with ID {id} previously defined by |matchadd()|
or one of the |:match| commands. Returns 0 if successful,
***************
*** 6892,6897 ****
--- 6917,6925 ----
If {win} is specified, use the window with this number or
window ID instead of the current window.
+ Can also be used as a |method|: >
+ GetMatch()->matchdelete()
+
matchend({expr}, {pat} [, {start} [, {count}]])
*matchend()*
Same as |match()|, but return the index of first character
after the match. Example: >
***************
*** 6911,6916 ****
--- 6939,6947 ----
< result is "-1".
When {expr} is a |List| the result is equal to |match()|.
+ Can also be used as a |method|: >
+ GetText()->matchend('word')
+
matchlist({expr}, {pat} [, {start} [, {count}]]) *matchlist()*
Same as |match()|, but return a |List|. The first item in the
list is the matched string, same as what matchstr() would
***************
*** 6921,6926 ****
--- 6952,6960 ----
< Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', '']
When there is no match an empty list is returned.
+ Can also be used as a |method|: >
+ GetList()->matchlist('word')
+
matchstr({expr}, {pat} [, {start} [, {count}]])
*matchstr()*
Same as |match()|, but return the matched string. Example: >
:echo matchstr("testing", "ing")
***************
*** 6934,6939 ****
--- 6968,6976 ----
When {expr} is a |List| then the matching item is returned.
The type isn't changed, it's not necessarily a String.
+ Can also be used as a |method|: >
+ GetText()->matchstr('word')
+
matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()*
Same as |matchstr()|, but return the matched string, the start
position and the end position of the match. Example: >
***************
*** 6952,6957 ****
--- 6989,6996 ----
< result is ["x", 1, 2, 3].
The type isn't changed, it's not necessarily a String.
+ Can also be used as a |method|: >
+ GetText()->matchstrpos('word')
*max()*
max({expr}) Return the maximum value of all items in {expr}.
{expr} can be a list or a dictionary. For a dictionary,
***************
*** 7002,7007 ****
--- 7041,7049 ----
Not available on all systems. To check use: >
:if exists("*mkdir")
+
+ < Can also be used as a |method|: >
+ GetName()->mkdir()
<
*mode()*
mode([expr]) Return a string that indicates the current mode.
***************
*** 7047,7052 ****
--- 7089,7097 ----
the leading character(s).
Also see |visualmode()|.
+ Can also be used as a |method|: >
+ DoFull()->mode()
+
mzeval({expr})
*mzeval()*
Evaluate MzScheme expression {expr} and return its result
converted to Vim data structures.
***************
*** 7062,7067 ****
--- 7107,7115 ----
:echo mzeval("l")
:echo mzeval("h")
<
+ Can also be used as a |method|: >
+ GetExpr()->mzeval()
+ <
{only available when compiled with the |+mzscheme| feature}
nextnonblank({lnum}) *nextnonblank()*
*** ../vim-8.1.1960/src/evalfunc.c 2019-09-01 17:52:27.334698921 +0200
--- src/evalfunc.c 2019-09-01 19:15:00.406353348 +0200
***************
*** 655,677 ****
{"luaeval", 1, 2, FEARG_1, f_luaeval},
#endif
{"map", 2, 2, FEARG_1, f_map},
! {"maparg", 1, 4, 0, f_maparg},
! {"mapcheck", 1, 3, 0, f_mapcheck},
! {"match", 2, 4, 0, f_match},
! {"matchadd", 2, 5, 0, f_matchadd},
! {"matchaddpos", 2, 5, 0, f_matchaddpos},
! {"matcharg", 1, 1, 0, f_matcharg},
! {"matchdelete", 1, 2, 0, f_matchdelete},
! {"matchend", 2, 4, 0, f_matchend},
! {"matchlist", 2, 4, 0, f_matchlist},
! {"matchstr", 2, 4, 0, f_matchstr},
! {"matchstrpos", 2, 4, 0, f_matchstrpos},
{"max", 1, 1, FEARG_1, f_max},
{"min", 1, 1, FEARG_1, f_min},
! {"mkdir", 1, 3, 0, f_mkdir},
! {"mode", 0, 1, 0, f_mode},
#ifdef FEAT_MZSCHEME
! {"mzeval", 1, 1, 0, f_mzeval},
#endif
{"nextnonblank", 1, 1, 0, f_nextnonblank},
{"nr2char", 1, 2, 0, f_nr2char},
--- 655,677 ----
{"luaeval", 1, 2, FEARG_1, f_luaeval},
#endif
{"map", 2, 2, FEARG_1, f_map},
! {"maparg", 1, 4, FEARG_1, f_maparg},
! {"mapcheck", 1, 3, FEARG_1, f_mapcheck},
! {"match", 2, 4, FEARG_1, f_match},
! {"matchadd", 2, 5, FEARG_1, f_matchadd},
! {"matchaddpos", 2, 5, FEARG_1, f_matchaddpos},
! {"matcharg", 1, 1, FEARG_1, f_matcharg},
! {"matchdelete", 1, 2, FEARG_1, f_matchdelete},
! {"matchend", 2, 4, FEARG_1, f_matchend},
! {"matchlist", 2, 4, FEARG_1, f_matchlist},
! {"matchstr", 2, 4, FEARG_1, f_matchstr},
! {"matchstrpos", 2, 4, FEARG_1, f_matchstrpos},
{"max", 1, 1, FEARG_1, f_max},
{"min", 1, 1, FEARG_1, f_min},
! {"mkdir", 1, 3, FEARG_1, f_mkdir},
! {"mode", 0, 1, FEARG_1, f_mode},
#ifdef FEAT_MZSCHEME
! {"mzeval", 1, 1, FEARG_1, f_mzeval},
#endif
{"nextnonblank", 1, 1, 0, f_nextnonblank},
{"nr2char", 1, 2, 0, f_nr2char},
*** ../vim-8.1.1960/src/testdir/test70.in 2013-01-31 21:00:06.000000000
+0100
--- src/testdir/test70.in 2019-09-01 19:14:34.254458433 +0200
***************
*** 25,31 ****
:mz (vim-set-buff-line (vim-eval "line('.')") "1 changed line 1")
:" scalar test
:let tmp_string = mzeval('"string"')
! :let tmp_1000 = mzeval('1000')
:if tmp_string . tmp_1000 == "string1000"
:let scalar_res = "OK"
:else
--- 25,31 ----
:mz (vim-set-buff-line (vim-eval "line('.')") "1 changed line 1")
:" scalar test
:let tmp_string = mzeval('"string"')
! :let tmp_1000 = '1000'->mzeval()
:if tmp_string . tmp_1000 == "string1000"
:let scalar_res = "OK"
:else
*** ../vim-8.1.1960/src/testdir/test_functions.vim 2019-08-31
22:16:30.774127008 +0200
--- src/testdir/test_functions.vim 2019-09-01 19:13:15.846768301 +0200
***************
*** 655,662 ****
exe "normal Rabc\<C-X>\<C-L>\<F2>\<Esc>u"
call assert_equal('R-Rc', g:current_modes)
! call assert_equal('n', mode(0))
! call assert_equal('n', mode(1))
" i_CTRL-O
exe "normal i\<C-O>:call Save_mode()\<Cr>\<Esc>"
--- 655,662 ----
exe "normal Rabc\<C-X>\<C-L>\<F2>\<Esc>u"
call assert_equal('R-Rc', g:current_modes)
! call assert_equal('n', 0->mode())
! call assert_equal('n', 1->mode())
" i_CTRL-O
exe "normal i\<C-O>:call Save_mode()\<Cr>\<Esc>"
***************
*** 793,799 ****
func Test_match_func()
call assert_equal(4, match('testing', 'ing'))
! call assert_equal(4, match('testing', 'ing', 2))
call assert_equal(-1, match('testing', 'ing', 5))
call assert_equal(-1, match('testing', 'ing', 8))
call assert_equal(1, match(['vim', 'testing', 'execute'], 'ing'))
--- 793,799 ----
func Test_match_func()
call assert_equal(4, match('testing', 'ing'))
! call assert_equal(4, 'testing'->match('ing', 2))
call assert_equal(-1, match('testing', 'ing', 5))
call assert_equal(-1, match('testing', 'ing', 8))
call assert_equal(1, match(['vim', 'testing', 'execute'], 'ing'))
***************
*** 802,808 ****
func Test_matchend()
call assert_equal(7, matchend('testing', 'ing'))
! call assert_equal(7, matchend('testing', 'ing', 2))
call assert_equal(-1, matchend('testing', 'ing', 5))
call assert_equal(-1, matchend('testing', 'ing', 8))
call assert_equal(match(['vim', 'testing', 'execute'], 'ing'),
matchend(['vim', 'testing', 'execute'], 'ing'))
--- 802,808 ----
func Test_matchend()
call assert_equal(7, matchend('testing', 'ing'))
! call assert_equal(7, 'testing'->matchend('ing', 2))
call assert_equal(-1, matchend('testing', 'ing', 5))
call assert_equal(-1, matchend('testing', 'ing', 8))
call assert_equal(match(['vim', 'testing', 'execute'], 'ing'),
matchend(['vim', 'testing', 'execute'], 'ing'))
***************
*** 811,823 ****
func Test_matchlist()
call assert_equal(['acd', 'a', '', 'c', 'd', '', '', '', '', ''],
matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)'))
! call assert_equal(['d', '', '', '', 'd', '', '', '', '', ''],
matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)', 2))
call assert_equal([], matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)', 4))
endfunc
func Test_matchstr()
call assert_equal('ing', matchstr('testing', 'ing'))
! call assert_equal('ing', matchstr('testing', 'ing', 2))
call assert_equal('', matchstr('testing', 'ing', 5))
call assert_equal('', matchstr('testing', 'ing', 8))
call assert_equal('testing', matchstr(['vim', 'testing', 'execute'], 'ing'))
--- 811,823 ----
func Test_matchlist()
call assert_equal(['acd', 'a', '', 'c', 'd', '', '', '', '', ''],
matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)'))
! call assert_equal(['d', '', '', '', 'd', '', '', '', '', ''],
'acd'->matchlist('\(a\)\?\(b\)\?\(c\)\?\(.*\)', 2))
call assert_equal([], matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)', 4))
endfunc
func Test_matchstr()
call assert_equal('ing', matchstr('testing', 'ing'))
! call assert_equal('ing', 'testing'->matchstr('ing', 2))
call assert_equal('', matchstr('testing', 'ing', 5))
call assert_equal('', matchstr('testing', 'ing', 8))
call assert_equal('testing', matchstr(['vim', 'testing', 'execute'], 'ing'))
***************
*** 826,832 ****
func Test_matchstrpos()
call assert_equal(['ing', 4, 7], matchstrpos('testing', 'ing'))
! call assert_equal(['ing', 4, 7], matchstrpos('testing', 'ing', 2))
call assert_equal(['', -1, -1], matchstrpos('testing', 'ing', 5))
call assert_equal(['', -1, -1], matchstrpos('testing', 'ing', 8))
call assert_equal(['ing', 1, 4, 7], matchstrpos(['vim', 'testing',
'execute'], 'ing'))
--- 826,832 ----
func Test_matchstrpos()
call assert_equal(['ing', 4, 7], matchstrpos('testing', 'ing'))
! call assert_equal(['ing', 4, 7], 'testing'->matchstrpos('ing', 2))
call assert_equal(['', -1, -1], matchstrpos('testing', 'ing', 5))
call assert_equal(['', -1, -1], matchstrpos('testing', 'ing', 8))
call assert_equal(['ing', 1, 4, 7], matchstrpos(['vim', 'testing',
'execute'], 'ing'))
*** ../vim-8.1.1960/src/testdir/test_getcwd.vim 2019-08-31 21:17:35.594131454
+0200
--- src/testdir/test_getcwd.vim 2019-09-01 19:11:24.179194084 +0200
***************
*** 35,41 ****
" we start from a clean state.
call delete("Xtopdir", "rf")
new
! call mkdir('Xtopdir')
cd Xtopdir
let g:topdir = getcwd()
call mkdir('Xdir1')
--- 35,41 ----
" we start from a clean state.
call delete("Xtopdir", "rf")
new
! eval 'Xtopdir'->mkdir()
cd Xtopdir
let g:topdir = getcwd()
call mkdir('Xdir1')
*** ../vim-8.1.1960/src/testdir/test_maparg.vim 2019-07-27 21:05:16.683942730
+0200
--- src/testdir/test_maparg.vim 2019-09-01 18:54:54.285025681 +0200
***************
*** 1,5 ****
--- 1,6 ----
" Tests for maparg().
" Also test utf8 map with a 0x80 byte.
+ " Also test mapcheck()
function s:SID()
return str2nr(matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_SID$'))
***************
*** 22,28 ****
call assert_equal({'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v',
\ 'nowait': 0, 'expr': 1, 'sid': sid, 'lnum': lnum + 2,
\ 'rhs': 'isbar', 'buffer': 1},
! \ maparg('bar', '', 0, 1))
let lnum = expand('<sflnum>')
map <buffer> <nowait> foo bar
call assert_equal({'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ',
--- 23,29 ----
call assert_equal({'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v',
\ 'nowait': 0, 'expr': 1, 'sid': sid, 'lnum': lnum + 2,
\ 'rhs': 'isbar', 'buffer': 1},
! \ 'bar'->maparg('', 0, 1))
let lnum = expand('<sflnum>')
map <buffer> <nowait> foo bar
call assert_equal({'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ',
***************
*** 46,51 ****
--- 47,91 ----
unmap abc
endfunction
+ func Test_mapcheck()
+ call assert_equal('', mapcheck('a'))
+ call assert_equal('', mapcheck('abc'))
+ call assert_equal('', mapcheck('ax'))
+ call assert_equal('', mapcheck('b'))
+
+ map a something
+ call assert_equal('something', mapcheck('a'))
+ call assert_equal('something', mapcheck('a', 'n'))
+ call assert_equal('', mapcheck('a', 'c'))
+ call assert_equal('', mapcheck('a', 'i'))
+ call assert_equal('something', 'abc'->mapcheck())
+ call assert_equal('something', 'ax'->mapcheck())
+ call assert_equal('', mapcheck('b'))
+ unmap a
+
+ map ab foobar
+ call assert_equal('foobar', mapcheck('a'))
+ call assert_equal('foobar', mapcheck('abc'))
+ call assert_equal('', mapcheck('ax'))
+ call assert_equal('', mapcheck('b'))
+ unmap ab
+
+ map abc barfoo
+ call assert_equal('barfoo', mapcheck('a'))
+ call assert_equal('barfoo', mapcheck('a', 'n', 0))
+ call assert_equal('', mapcheck('a', 'n', 1))
+ call assert_equal('barfoo', mapcheck('abc'))
+ call assert_equal('', mapcheck('ax'))
+ call assert_equal('', mapcheck('b'))
+ unmap abc
+
+ abbr ab abbrev
+ call assert_equal('abbrev', mapcheck('a', 'i', 1))
+ call assert_equal('', mapcheck('a', 'n', 1))
+ call assert_equal('', mapcheck('a', 'i', 0))
+ unabbr ab
+ endfunc
+
function Test_range_map()
new
" Outside of the range, minimum
*** ../vim-8.1.1960/src/testdir/test_match.vim 2019-08-23 22:31:33.217176868
+0200
--- src/testdir/test_match.vim 2019-09-01 19:10:10.615462791 +0200
***************
*** 15,21 ****
2match MyGroup2 /FIXME/
3match MyGroup3 /XXX/
call assert_equal(['MyGroup1', 'TODO'], matcharg(1))
! call assert_equal(['MyGroup2', 'FIXME'], matcharg(2))
call assert_equal(['MyGroup3', 'XXX'], matcharg(3))
" --- Check that "matcharg()" returns an empty list if the argument is not
1,
--- 15,21 ----
2match MyGroup2 /FIXME/
3match MyGroup3 /XXX/
call assert_equal(['MyGroup1', 'TODO'], matcharg(1))
! call assert_equal(['MyGroup2', 'FIXME'], 2->matcharg())
call assert_equal(['MyGroup3', 'XXX'], matcharg(3))
" --- Check that "matcharg()" returns an empty list if the argument is not
1,
***************
*** 44,50 ****
" --- Check that "matchdelete()" deletes the matches defined in the previous
" --- test correctly.
call matchdelete(m1)
! call matchdelete(m2)
call matchdelete(m3)
call assert_equal([], getmatches())
--- 44,50 ----
" --- Check that "matchdelete()" deletes the matches defined in the previous
" --- test correctly.
call matchdelete(m1)
! eval m2->matchdelete()
call matchdelete(m3)
call assert_equal([], getmatches())
***************
*** 56,62 ****
" --- Check that "clearmatches()" clears all matches defined by ":match" and
" --- "matchadd()".
let m1 = matchadd("MyGroup1", "TODO")
! let m2 = matchadd("MyGroup2", "FIXME", 42)
let m3 = matchadd("MyGroup3", "XXX", 60, 17)
match MyGroup1 /COFFEE/
2match MyGroup2 /HUMPPA/
--- 56,62 ----
" --- Check that "clearmatches()" clears all matches defined by ":match" and
" --- "matchadd()".
let m1 = matchadd("MyGroup1", "TODO")
! let m2 = "MyGroup2"->matchadd("FIXME", 42)
let m3 = matchadd("MyGroup3", "XXX", 60, 17)
match MyGroup1 /COFFEE/
2match MyGroup2 /HUMPPA/
***************
*** 118,124 ****
call clearmatches()
call setline(1, 'abcdΣabcdef')
! call matchaddpos("MyGroup1", [[1, 4, 2], [1, 9, 2]])
1
redraw!
let v1 = screenattr(1, 1)
--- 118,124 ----
call clearmatches()
call setline(1, 'abcdΣabcdef')
! eval "MyGroup1"->matchaddpos([[1, 4, 2], [1, 9, 2]])
1
redraw!
let v1 = screenattr(1, 1)
*** ../vim-8.1.1960/src/version.c 2019-09-01 17:52:27.338698893 +0200
--- src/version.c 2019-09-01 20:16:01.411625735 +0200
***************
*** 763,764 ****
--- 763,766 ----
{ /* Add new patch number below this line */
+ /**/
+ 1961,
/**/
--
hundred-and-one symptoms of being an internet addict:
164. You got out to buy software, instead of going out for a beer.
/// 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].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/201909011817.x81IHOxl022719%40masaka.moolenaar.net.