Patch 8.1.1984
Problem: More functions can be used as methods.
Solution: Make various functions usable as a method.
Files: runtime/doc/eval.txt, src/evalfunc.c,
src/testdir/test_functions.vim, src/testdir/test_perl.vim,
src/testdir/test_prompt_buffer.vim, src/testdir/test_python2.vim,
src/testdir/test_python3.vim, src/testdir/test_pyx2.vim
*** ../vim-8.1.1983/runtime/doc/eval.txt 2019-09-01 20:16:48.003438501
+0200
--- runtime/doc/eval.txt 2019-09-04 20:04:33.130867681 +0200
***************
*** 7112,7117 ****
--- 7126,7134 ----
below it, zero is returned.
See also |prevnonblank()|.
+ Can also be used as a |method|: >
+ GetLnum()->nextnonblank()
+
nr2char({expr} [, {utf8}]) *nr2char()*
Return a string with a single character, which has the number
value {expr}. Examples: >
***************
*** 7130,7135 ****
--- 7147,7154 ----
let str = join(map(list, {_, val -> nr2char(val)}), '')
< Result: "ABC"
+ Can also be used as a |method|: >
+ GetNumber()->nr2char()
or({expr}, {expr}) *or()*
Bitwise OR on the two arguments. The arguments are converted
***************
*** 7149,7154 ****
--- 7168,7176 ----
< ~/.v/a/myfile.vim ~
It doesn't matter if the path exists or not.
+ Can also be used as a |method|: >
+ GetDirectories()->pathshorten()
+
perleval({expr}) *perleval()*
Evaluate Perl expression {expr} in scalar context and return
its result converted to Vim data structures. If value can't be
***************
*** 7158,7164 ****
Example: >
:echo perleval('[1 .. 4]')
< [1, 2, 3, 4]
! {only available when compiled with the |+perl| feature}
popup_ functions are documented here: |popup-functions|.
--- 7180,7190 ----
Example: >
:echo perleval('[1 .. 4]')
< [1, 2, 3, 4]
!
! Can also be used as a |method|: >
! GetExpr()->perleval()
!
! < {only available when compiled with the |+perl| feature}
popup_ functions are documented here: |popup-functions|.
***************
*** 7188,7193 ****
--- 7214,7221 ----
above it, zero is returned.
Also see |nextnonblank()|.
+ Can also be used as a |method|: >
+ GetLnum()->prevnonblank()
printf({fmt}, {expr1} ...) *printf()*
Return a String with {fmt}, where "%" items are replaced by
***************
*** 7416,7421 ****
--- 7444,7453 ----
endif
endfunc
+ < Can also be used as a |method|: >
+ GetBuffer()->prompt_setcallback(callback)
+
+
prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()*
Set a callback for buffer {buf} to {expr}. When {expr} is an
empty string the callback is removed. This has only effect if
***************
*** 7425,7430 ****
--- 7457,7465 ----
mode. Without setting a callback Vim will exit Insert mode,
as in any buffer.
+ Can also be used as a |method|: >
+ GetBuffer()->prompt_setinterrupt(callback)
+
prompt_setprompt({buf}, {text})
*prompt_setprompt()*
Set prompt for buffer {buf} to {text}. You most likely want
{text} to end in a space.
***************
*** 7432,7437 ****
--- 7467,7475 ----
"prompt". Example: >
call prompt_setprompt(bufnr(), 'command: ')
<
+ Can also be used as a |method|: >
+ GetBuffer()->prompt_setprompt('command: ')
+
prop_ functions are documented here: |text-prop-functions|.
pum_getpos() *pum_getpos()*
***************
*** 7463,7469 ****
Lists are represented as Vim |List| type.
Dictionaries are represented as Vim |Dictionary| type with
keys converted to strings.
! {only available when compiled with the |+python3| feature}
*E858* *E859*
pyeval({expr}) *pyeval()*
--- 7501,7511 ----
Lists are represented as Vim |List| type.
Dictionaries are represented as Vim |Dictionary| type with
keys converted to strings.
!
! Can also be used as a |method|: >
! GetExpr()->py3eval()
!
! < {only available when compiled with the |+python3| feature}
*E858* *E859*
pyeval({expr}) *pyeval()*
***************
*** 7474,7487 ****
Lists are represented as Vim |List| type.
Dictionaries are represented as Vim |Dictionary| type,
non-string keys result in error.
! {only available when compiled with the |+python| feature}
pyxeval({expr}) *pyxeval()*
Evaluate Python expression {expr} and return its result
converted to Vim data structures.
Uses Python 2 or 3, see |python_x| and 'pyxversion'.
See also: |pyeval()|, |py3eval()|
! {only available when compiled with the |+python| or the
|+python3| feature}
*E726* *E727*
--- 7516,7537 ----
Lists are represented as Vim |List| type.
Dictionaries are represented as Vim |Dictionary| type,
non-string keys result in error.
!
! Can also be used as a |method|: >
! GetExpr()->pyeval()
!
! < {only available when compiled with the |+python| feature}
pyxeval({expr}) *pyxeval()*
Evaluate Python expression {expr} and return its result
converted to Vim data structures.
Uses Python 2 or 3, see |python_x| and 'pyxversion'.
See also: |pyeval()|, |py3eval()|
!
! Can also be used as a |method|: >
! GetExpr()->pyxeval()
!
! < {only available when compiled with the |+python| or the
|+python3| feature}
*E726* *E727*
*** ../vim-8.1.1983/src/evalfunc.c 2019-09-04 18:15:16.178573707 +0200
--- src/evalfunc.c 2019-09-04 20:01:12.483714617 +0200
***************
*** 625,636 ****
#ifdef FEAT_MZSCHEME
{"mzeval", 1, 1, FEARG_1, f_mzeval},
#endif
! {"nextnonblank", 1, 1, 0, f_nextnonblank},
! {"nr2char", 1, 2, 0, f_nr2char},
{"or", 2, 2, FEARG_1, f_or},
! {"pathshorten", 1, 1, 0, f_pathshorten},
#ifdef FEAT_PERL
! {"perleval", 1, 1, 0, f_perleval},
#endif
#ifdef FEAT_TEXT_PROP
{"popup_atcursor", 2, 2, FEARG_1, f_popup_atcursor},
--- 625,636 ----
#ifdef FEAT_MZSCHEME
{"mzeval", 1, 1, FEARG_1, f_mzeval},
#endif
! {"nextnonblank", 1, 1, FEARG_1, f_nextnonblank},
! {"nr2char", 1, 2, FEARG_1, f_nr2char},
{"or", 2, 2, FEARG_1, f_or},
! {"pathshorten", 1, 1, FEARG_1, f_pathshorten},
#ifdef FEAT_PERL
! {"perleval", 1, 1, FEARG_1, f_perleval},
#endif
#ifdef FEAT_TEXT_PROP
{"popup_atcursor", 2, 2, FEARG_1, f_popup_atcursor},
***************
*** 657,668 ****
#ifdef FEAT_FLOAT
{"pow", 2, 2, FEARG_1, f_pow},
#endif
! {"prevnonblank", 1, 1, 0, f_prevnonblank},
{"printf", 1, 19, FEARG_2, f_printf},
#ifdef FEAT_JOB_CHANNEL
! {"prompt_setcallback", 2, 2, 0, f_prompt_setcallback},
! {"prompt_setinterrupt", 2, 2, 0, f_prompt_setinterrupt},
! {"prompt_setprompt", 2, 2, 0, f_prompt_setprompt},
#endif
#ifdef FEAT_TEXT_PROP
{"prop_add", 3, 3, 0, f_prop_add},
--- 657,668 ----
#ifdef FEAT_FLOAT
{"pow", 2, 2, FEARG_1, f_pow},
#endif
! {"prevnonblank", 1, 1, FEARG_1, f_prevnonblank},
{"printf", 1, 19, FEARG_2, f_printf},
#ifdef FEAT_JOB_CHANNEL
! {"prompt_setcallback", 2, 2, FEARG_1, f_prompt_setcallback},
! {"prompt_setinterrupt", 2, 2, FEARG_1, f_prompt_setinterrupt},
! {"prompt_setprompt", 2, 2, FEARG_1, f_prompt_setprompt},
#endif
#ifdef FEAT_TEXT_PROP
{"prop_add", 3, 3, 0, f_prop_add},
***************
*** 678,690 ****
{"pum_getpos", 0, 0, 0, f_pum_getpos},
{"pumvisible", 0, 0, 0, f_pumvisible},
#ifdef FEAT_PYTHON3
! {"py3eval", 1, 1, 0, f_py3eval},
#endif
#ifdef FEAT_PYTHON
! {"pyeval", 1, 1, 0, f_pyeval},
#endif
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
! {"pyxeval", 1, 1, 0, f_pyxeval},
#endif
{"range", 1, 3, 0, f_range},
{"readdir", 1, 2, 0, f_readdir},
--- 678,690 ----
{"pum_getpos", 0, 0, 0, f_pum_getpos},
{"pumvisible", 0, 0, 0, f_pumvisible},
#ifdef FEAT_PYTHON3
! {"py3eval", 1, 1, FEARG_1, f_py3eval},
#endif
#ifdef FEAT_PYTHON
! {"pyeval", 1, 1, FEARG_1, f_pyeval},
#endif
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
! {"pyxeval", 1, 1, FEARG_1, f_pyxeval},
#endif
{"range", 1, 3, 0, f_range},
{"readdir", 1, 2, 0, f_readdir},
*** ../vim-8.1.1983/src/testdir/test_functions.vim 2019-09-03
23:36:57.677559719 +0200
--- src/testdir/test_functions.vim 2019-09-04 19:47:44.879427462 +0200
***************
*** 400,409 ****
func Test_pathshorten()
call assert_equal('', pathshorten(''))
call assert_equal('foo', pathshorten('foo'))
! call assert_equal('/foo', pathshorten('/foo'))
call assert_equal('f/', pathshorten('foo/'))
call assert_equal('f/bar', pathshorten('foo/bar'))
! call assert_equal('f/b/foobar', pathshorten('foo/bar/foobar'))
call assert_equal('/f/b/foobar', pathshorten('/foo/bar/foobar'))
call assert_equal('.f/bar', pathshorten('.foo/bar'))
call assert_equal('~f/bar', pathshorten('~foo/bar'))
--- 400,409 ----
func Test_pathshorten()
call assert_equal('', pathshorten(''))
call assert_equal('foo', pathshorten('foo'))
! call assert_equal('/foo', '/foo'->pathshorten())
call assert_equal('f/', pathshorten('foo/'))
call assert_equal('f/bar', pathshorten('foo/bar'))
! call assert_equal('f/b/foobar', 'foo/bar/foobar'->pathshorten())
call assert_equal('/f/b/foobar', pathshorten('/foo/bar/foobar'))
call assert_equal('.f/bar', pathshorten('.foo/bar'))
call assert_equal('~f/bar', pathshorten('~foo/bar'))
***************
*** 847,867 ****
call assert_equal(0, nextnonblank(-1))
call assert_equal(0, nextnonblank(0))
call assert_equal(1, nextnonblank(1))
! call assert_equal(4, nextnonblank(2))
call assert_equal(4, nextnonblank(3))
call assert_equal(4, nextnonblank(4))
call assert_equal(6, nextnonblank(5))
call assert_equal(6, nextnonblank(6))
call assert_equal(7, nextnonblank(7))
! call assert_equal(0, nextnonblank(8))
call assert_equal(0, prevnonblank(-1))
call assert_equal(0, prevnonblank(0))
! call assert_equal(1, prevnonblank(1))
call assert_equal(1, prevnonblank(2))
call assert_equal(1, prevnonblank(3))
call assert_equal(4, prevnonblank(4))
! call assert_equal(4, prevnonblank(5))
call assert_equal(6, prevnonblank(6))
call assert_equal(7, prevnonblank(7))
call assert_equal(0, prevnonblank(8))
--- 847,867 ----
call assert_equal(0, nextnonblank(-1))
call assert_equal(0, nextnonblank(0))
call assert_equal(1, nextnonblank(1))
! call assert_equal(4, 2->nextnonblank())
call assert_equal(4, nextnonblank(3))
call assert_equal(4, nextnonblank(4))
call assert_equal(6, nextnonblank(5))
call assert_equal(6, nextnonblank(6))
call assert_equal(7, nextnonblank(7))
! call assert_equal(0, 8->nextnonblank())
call assert_equal(0, prevnonblank(-1))
call assert_equal(0, prevnonblank(0))
! call assert_equal(1, 1->prevnonblank())
call assert_equal(1, prevnonblank(2))
call assert_equal(1, prevnonblank(3))
call assert_equal(4, prevnonblank(4))
! call assert_equal(4, 5->prevnonblank())
call assert_equal(6, prevnonblank(6))
call assert_equal(7, prevnonblank(7))
call assert_equal(0, prevnonblank(8))
***************
*** 1220,1226 ****
call assert_equal("a", trim("a", ""))
call assert_equal("", trim("", "a"))
! let chars = join(map(range(1, 0x20) + [0xa0], {n -> nr2char(n)}), '')
call assert_equal("x", trim(chars . "x" . chars))
endfunc
--- 1220,1226 ----
call assert_equal("a", trim("a", ""))
call assert_equal("", trim("", "a"))
! let chars = join(map(range(1, 0x20) + [0xa0], {n -> n->nr2char()}), '')
call assert_equal("x", trim(chars . "x" . chars))
endfunc
*** ../vim-8.1.1983/src/testdir/test_perl.vim 2019-06-15 17:57:43.972724036
+0200
--- src/testdir/test_perl.vim 2019-09-04 19:46:20.711703021 +0200
***************
*** 30,36 ****
funct Test_VIM_Blob()
call assert_equal('0z', perleval('VIM::Blob("")'))
! call assert_equal('0z31326162', perleval('VIM::Blob("12ab")'))
call assert_equal('0z00010203', perleval('VIM::Blob("\x00\x01\x02\x03")'))
call assert_equal('0z8081FEFF', perleval('VIM::Blob("\x80\x81\xfe\xff")'))
endfunc
--- 30,36 ----
funct Test_VIM_Blob()
call assert_equal('0z', perleval('VIM::Blob("")'))
! call assert_equal('0z31326162', 'VIM::Blob("12ab")'->perleval())
call assert_equal('0z00010203', perleval('VIM::Blob("\x00\x01\x02\x03")'))
call assert_equal('0z8081FEFF', perleval('VIM::Blob("\x80\x81\xfe\xff")'))
endfunc
*** ../vim-8.1.1983/src/testdir/test_prompt_buffer.vim 2019-06-20
03:45:31.175536929 +0200
--- src/testdir/test_prompt_buffer.vim 2019-09-04 20:00:18.167950718 +0200
***************
*** 48,53 ****
--- 48,54 ----
\ 'new',
\ 'set buftype=prompt',
\ 'call prompt_setcallback(bufnr(""), function("TextEntered"))',
+ \ 'eval bufnr("")->prompt_setprompt("cmd: ")',
\ 'startinsert',
\ ], a:name)
endfunc
***************
*** 60,69 ****
call WriteScript(scriptName)
let buf = RunVimInTerminal('-S ' . scriptName, {})
! call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))})
call term_sendkeys(buf, "hello\<CR>")
! call WaitForAssert({-> assert_equal('% hello', term_getline(buf, 1))})
call WaitForAssert({-> assert_equal('Command: "hello"', term_getline(buf,
2))})
call WaitForAssert({-> assert_equal('Result: "hello"', term_getline(buf,
3))})
--- 61,70 ----
call WriteScript(scriptName)
let buf = RunVimInTerminal('-S ' . scriptName, {})
! call WaitForAssert({-> assert_equal('cmd:', term_getline(buf, 1))})
call term_sendkeys(buf, "hello\<CR>")
! call WaitForAssert({-> assert_equal('cmd: hello', term_getline(buf, 1))})
call WaitForAssert({-> assert_equal('Command: "hello"', term_getline(buf,
2))})
call WaitForAssert({-> assert_equal('Result: "hello"', term_getline(buf,
3))})
***************
*** 82,100 ****
call WriteScript(scriptName)
let buf = RunVimInTerminal('-S ' . scriptName, {})
! call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))})
let bs = "\<BS>"
call term_sendkeys(buf, "hello" . bs . bs)
! call WaitForAssert({-> assert_equal('% hel', term_getline(buf, 1))})
let left = "\<Left>"
call term_sendkeys(buf, left . left . left . bs . '-')
! call WaitForAssert({-> assert_equal('% -hel', term_getline(buf, 1))})
let end = "\<End>"
call term_sendkeys(buf, end . "x")
! call WaitForAssert({-> assert_equal('% -helx', term_getline(buf, 1))})
call term_sendkeys(buf, "\<C-U>exit\<CR>")
call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))})
--- 83,101 ----
call WriteScript(scriptName)
let buf = RunVimInTerminal('-S ' . scriptName, {})
! call WaitForAssert({-> assert_equal('cmd:', term_getline(buf, 1))})
let bs = "\<BS>"
call term_sendkeys(buf, "hello" . bs . bs)
! call WaitForAssert({-> assert_equal('cmd: hel', term_getline(buf, 1))})
let left = "\<Left>"
call term_sendkeys(buf, left . left . left . bs . '-')
! call WaitForAssert({-> assert_equal('cmd: -hel', term_getline(buf, 1))})
let end = "\<End>"
call term_sendkeys(buf, end . "x")
! call WaitForAssert({-> assert_equal('cmd: -helx', term_getline(buf, 1))})
call term_sendkeys(buf, "\<C-U>exit\<CR>")
call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))})
***************
*** 113,120 ****
new
set buftype=prompt
! call prompt_setcallback(bufnr(''), function('MyPromptCallback', [{}]))
! call prompt_setinterrupt(bufnr(''), function('MyPromptInterrupt', [{}]))
call test_garbagecollect_now()
" Must not crash
call feedkeys("\<CR>\<C-C>", 'xt')
--- 114,121 ----
new
set buftype=prompt
! eval bufnr('')->prompt_setcallback(function('MyPromptCallback', [{}]))
! eval bufnr('')->prompt_setinterrupt(function('MyPromptInterrupt', [{}]))
call test_garbagecollect_now()
" Must not crash
call feedkeys("\<CR>\<C-C>", 'xt')
*** ../vim-8.1.1983/src/testdir/test_python2.vim 2019-06-15
17:57:43.972724036 +0200
--- src/testdir/test_python2.vim 2019-09-04 20:02:06.183484325 +0200
***************
*** 54,60 ****
try
py f = vim.Function('\x80\xfdR' + vim.eval('s:foo()'))
! call assert_equal(name, pyeval('f.name'))
catch
call assert_false(v:exception)
endtry
--- 54,60 ----
try
py f = vim.Function('\x80\xfdR' + vim.eval('s:foo()'))
! call assert_equal(name, 'f.name'->pyeval())
catch
call assert_false(v:exception)
endtry
*** ../vim-8.1.1983/src/testdir/test_python3.vim 2019-06-15
17:57:43.972724036 +0200
--- src/testdir/test_python3.vim 2019-09-04 20:01:01.159763565 +0200
***************
*** 54,60 ****
try
py3 f = vim.Function(b'\x80\xfdR' + vim.eval('s:foo()').encode())
! call assert_equal(name, py3eval('f.name'))
catch
call assert_false(v:exception)
endtry
--- 54,60 ----
try
py3 f = vim.Function(b'\x80\xfdR' + vim.eval('s:foo()').encode())
! call assert_equal(name, 'f.name'->py3eval())
catch
call assert_false(v:exception)
endtry
*** ../vim-8.1.1983/src/testdir/test_pyx2.vim 2019-06-15 17:57:43.972724036
+0200
--- src/testdir/test_pyx2.vim 2019-09-04 20:03:06.459229142 +0200
***************
*** 34,40 ****
func Test_pyxeval()
pyx import sys
! call assert_match(s:py2pattern, split(pyxeval('sys.version'))[0])
endfunc
--- 34,40 ----
func Test_pyxeval()
pyx import sys
! call assert_match(s:py2pattern, split('sys.version'->pyxeval())[0])
endfunc
*** ../vim-8.1.1983/src/version.c 2019-09-04 18:53:08.485096735 +0200
--- src/version.c 2019-09-04 20:04:51.790790572 +0200
***************
*** 759,760 ****
--- 759,762 ----
{ /* Add new patch number below this line */
+ /**/
+ 1984,
/**/
--
A bad peace is better than a good war. - Yiddish Proverb
/// 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/201909041806.x84I6TSC013920%40masaka.moolenaar.net.