To: vim_dev@googlegroups.com Subject: Patch 8.1.1953 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.1953 Problem: More functions can be used as a method. Solution: Allow more functions to be used as a method. Files: runtime/doc/eval.txt, src/evalfunc.c, src/testdir/test_blob.vim, src/testdir/test_breakindent.vim, src/testdir/test_delete.vim, src/testdir/test_functions.vim, src/testdir/test_getcwd.vim, src/testdir/test_history.vim, src/testdir/test_listdict.vim, src/testdir/test_syn_attr.vim, src/testdir/test_termcodes.vim, src/testdir/test_true_false.vim *** ../vim-8.1.1952/runtime/doc/eval.txt 2019-08-31 19:13:27.835704640 +0200 --- runtime/doc/eval.txt 2019-08-31 21:05:56.966106863 +0200 *************** *** 5766,5771 **** --- 5774,5782 ---- " tab page m :echo haslocaldir(-1, m) < + Can also be used as a |method|: > + GetWinnr()->haslocaldir() + hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()* The result is a Number, which is 1 if there is a mapping that contains {what} in somewhere in the rhs (what it is mapped to) *************** *** 5794,5799 **** --- 5805,5813 ---- < This installs the mapping to "\ABCdoit" only if there isn't already a mapping to "\ABCdoit". + Can also be used as a |method|: > + GetRHS()->hasmapto() + histadd({history}, {item}) *histadd()* Add the String {item} to the history {history} which can be one of: *hist-names* *************** *** 5815,5820 **** --- 5829,5838 ---- :let date=input("Enter date: ") < This function is not available in the |sandbox|. + Can also be used as a |method|, the base is used for the + second argument: > + GetPattern()->histadd('search') + histdel({history} [, {item}]) *histdel()* Clear {history}, i.e. delete all its entries. See |hist-names| for the possible values of {history}. *************** *** 5846,5851 **** --- 5864,5872 ---- the "n" command and 'hlsearch': > :call histdel("search", -1) :let @/ = histget("search", -1) + < + Can also be used as a |method|: > + GetHistory()->histdel() histget({history} [, {index}]) *histget()* The result is a String, the entry with Number {index} from *************** *** 5862,5867 **** --- 5883,5891 ---- the {num}th entry from the output of |:history|. > :command -nargs=1 H execute histget("cmd", 0+) < + Can also be used as a |method|: > + GetHistory()->histget() + histnr({history}) *histnr()* The result is the Number of the current entry in {history}. See |hist-names| for the possible values of {history}. *************** *** 5869,5874 **** --- 5893,5901 ---- Example: > :let inp_index = histnr("expr") + + < Can also be used as a |method|: > + GetHistory()->histnr() < hlexists({name}) *hlexists()* The result is a Number, which is non-zero if a highlight group *************** *** 5879,5884 **** --- 5906,5914 ---- *highlight_exists()* Obsolete name: highlight_exists(). + Can also be used as a |method|: > + GetName()->hlexists() + < *hlID()* hlID({name}) The result is a Number, which is the ID of the highlight group with name {name}. When the highlight group doesn't exist, *************** *** 5890,5895 **** --- 5920,5928 ---- < *highlightID()* Obsolete name: highlightID(). + Can also be used as a |method|: > + GetName()->hlID() + hostname() *hostname()* The result is a String, which is the name of the machine on which Vim is currently running. Machine names greater than *************** *** 5914,5919 **** --- 5947,5955 ---- from/to UCS-2 is automatically changed to use UTF-8. You cannot use UCS-2 in a string anyway, because of the NUL bytes. + Can also be used as a |method|: > + GetText()->iconv('latin1', 'utf-8') + < *indent()* indent({lnum}) The result is a Number, which is indent of line {lnum} in the current buffer. The indent is counted in spaces, the value *************** *** 5921,5926 **** --- 5957,5964 ---- |getline()|. When {lnum} is invalid -1 is returned. + Can also be used as a |method|: > + GetLnum()->indent() index({object}, {expr} [, {start} [, {ic}]]) *index()* If {object} is a |List| return the lowest index where the item *************** *** 5941,5946 **** --- 5979,5986 ---- :let idx = index(words, "the") :if index(numbers, 123) >= 0 + < Can also be used as a |method|: > + GetObject()->index(what) input({prompt} [, {text} [, {completion}]]) *input()* The result is a String, which is whatever the user typed on *************** *** 5987,5992 **** --- 6027,6035 ---- : call inputrestore() :endfunction + < Can also be used as a |method|: > + GetPrompt()->input() + inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()* Like |input()|, but when the GUI is running and text dialogs are supported, a dialog window pops up to input the text. *************** *** 6001,6006 **** --- 6044,6052 ---- works like pressing the Cancel button. NOTE: Command-line completion is not supported. + Can also be used as a |method|: > + GetPrompt()->inputdialog() + inputlist({textlist}) *inputlist()* {textlist} must be a |List| of strings. This |List| is displayed, one string per line. The user will be prompted to *************** *** 6017,6022 **** --- 6063,6071 ---- let color = inputlist(['Select color:', '1. red', \ '2. green', '3. blue']) + < Can also be used as a |method|: > + GetChoices()->inputlist() + inputrestore() *inputrestore()* Restore typeahead that was saved with a previous |inputsave()|. Should be called the same number of times inputsave() is *************** *** 6042,6047 **** --- 6091,6099 ---- typed on the command-line in response to the issued prompt. NOTE: Command-line completion is not supported. + Can also be used as a |method|: > + GetPrompt()->inputsecret() + insert({object}, {item} [, {idx}]) *insert()* When {object} is a |List| or a |Blob| insert {item} at the start of it. *************** *** 6075,6080 **** --- 6127,6135 ---- exist, or isn't a directory, the result is |FALSE|. {directory} is any expression, which is used as a String. + Can also be used as a |method|: > + GetName()->isdirectory() + isinf({expr}) *isinf()* Return 1 if {expr} is a positive infinity, or -1 a negative infinity, otherwise 0. > *************** *** 6101,6106 **** --- 6156,6164 ---- < When {expr} is a variable that does not exist you get an error message. Use |exists()| to check for existence. + Can also be used as a |method|: > + GetName()->islocked() + isnan({expr}) *isnan()* Return |TRUE| if {expr} is a float with value NaN. > echo isnan(0.0 / 0.0) *** ../vim-8.1.1952/src/evalfunc.c 2019-08-31 19:13:27.839704613 +0200 --- src/evalfunc.c 2019-08-31 20:58:33.376857191 +0200 *************** *** 595,627 **** {"globpath", 2, 5, FEARG_2, f_globpath}, {"has", 1, 1, 0, f_has}, {"has_key", 2, 2, FEARG_1, f_has_key}, ! {"haslocaldir", 0, 2, 0, f_haslocaldir}, ! {"hasmapto", 1, 3, 0, f_hasmapto}, ! {"highlightID", 1, 1, 0, f_hlID}, // obsolete ! {"highlight_exists",1, 1, 0, f_hlexists}, // obsolete ! {"histadd", 2, 2, 0, f_histadd}, ! {"histdel", 1, 2, 0, f_histdel}, ! {"histget", 1, 2, 0, f_histget}, ! {"histnr", 1, 1, 0, f_histnr}, ! {"hlID", 1, 1, 0, f_hlID}, ! {"hlexists", 1, 1, 0, f_hlexists}, {"hostname", 0, 0, 0, f_hostname}, ! {"iconv", 3, 3, 0, f_iconv}, ! {"indent", 1, 1, 0, f_indent}, {"index", 2, 4, FEARG_1, f_index}, ! {"input", 1, 3, 0, f_input}, ! {"inputdialog", 1, 3, 0, f_inputdialog}, ! {"inputlist", 1, 1, 0, f_inputlist}, {"inputrestore", 0, 0, 0, f_inputrestore}, {"inputsave", 0, 0, 0, f_inputsave}, ! {"inputsecret", 1, 2, 0, f_inputsecret}, {"insert", 2, 3, FEARG_1, f_insert}, {"invert", 1, 1, FEARG_1, f_invert}, ! {"isdirectory", 1, 1, 0, f_isdirectory}, #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H) {"isinf", 1, 1, FEARG_1, f_isinf}, #endif ! {"islocked", 1, 1, 0, f_islocked}, #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H) {"isnan", 1, 1, FEARG_1, f_isnan}, #endif --- 595,627 ---- {"globpath", 2, 5, FEARG_2, f_globpath}, {"has", 1, 1, 0, f_has}, {"has_key", 2, 2, FEARG_1, f_has_key}, ! {"haslocaldir", 0, 2, FEARG_1, f_haslocaldir}, ! {"hasmapto", 1, 3, FEARG_1, f_hasmapto}, ! {"highlightID", 1, 1, FEARG_1, f_hlID}, // obsolete ! {"highlight_exists",1, 1, FEARG_1, f_hlexists}, // obsolete ! {"histadd", 2, 2, FEARG_2, f_histadd}, ! {"histdel", 1, 2, FEARG_1, f_histdel}, ! {"histget", 1, 2, FEARG_1, f_histget}, ! {"histnr", 1, 1, FEARG_1, f_histnr}, ! {"hlID", 1, 1, FEARG_1, f_hlID}, ! {"hlexists", 1, 1, FEARG_1, f_hlexists}, {"hostname", 0, 0, 0, f_hostname}, ! {"iconv", 3, 3, FEARG_1, f_iconv}, ! {"indent", 1, 1, FEARG_1, f_indent}, {"index", 2, 4, FEARG_1, f_index}, ! {"input", 1, 3, FEARG_1, f_input}, ! {"inputdialog", 1, 3, FEARG_1, f_inputdialog}, ! {"inputlist", 1, 1, FEARG_1, f_inputlist}, {"inputrestore", 0, 0, 0, f_inputrestore}, {"inputsave", 0, 0, 0, f_inputsave}, ! {"inputsecret", 1, 2, FEARG_1, f_inputsecret}, {"insert", 2, 3, FEARG_1, f_insert}, {"invert", 1, 1, FEARG_1, f_invert}, ! {"isdirectory", 1, 1, FEARG_1, f_isdirectory}, #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H) {"isinf", 1, 1, FEARG_1, f_isinf}, #endif ! {"islocked", 1, 1, FEARG_1, f_islocked}, #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H) {"isnan", 1, 1, FEARG_1, f_isnan}, #endif *** ../vim-8.1.1952/src/testdir/test_blob.vim 2019-07-12 20:16:57.075879743 +0200 --- src/testdir/test_blob.vim 2019-08-31 20:45:47.393842096 +0200 *************** *** 278,284 **** call assert_equal(2, index(0zDEADBEEF, 0xBE)) call assert_equal(-1, index(0zDEADBEEF, 0)) call assert_equal(2, index(0z11111111, 0x11, 2)) ! call assert_equal(3, index(0z11110111, 0x11, 2)) call assert_equal(2, index(0z11111111, 0x11, -2)) call assert_equal(3, index(0z11110111, 0x11, -2)) --- 278,284 ---- call assert_equal(2, index(0zDEADBEEF, 0xBE)) call assert_equal(-1, index(0zDEADBEEF, 0)) call assert_equal(2, index(0z11111111, 0x11, 2)) ! call assert_equal(3, 0z11110111->index(0x11, 2)) call assert_equal(2, index(0z11111111, 0x11, -2)) call assert_equal(3, index(0z11110111, 0x11, -2)) *** ../vim-8.1.1952/src/testdir/test_breakindent.vim 2019-08-07 23:07:03.960858821 +0200 --- src/testdir/test_breakindent.vim 2019-08-31 20:40:41.723934915 +0200 *************** *** 411,417 **** " test strdisplaywidth() call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4') let text = getline(2) ! let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times call assert_equal(width, strdisplaywidth(text)) call s:close_windows('set sbr=') endfunc --- 411,417 ---- " test strdisplaywidth() call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4') let text = getline(2) ! let width = strlen(text[1:]) + indent(2) + strlen(&sbr) * 3 " text wraps 3 times call assert_equal(width, strdisplaywidth(text)) call s:close_windows('set sbr=') endfunc *************** *** 423,429 **** " test strdisplaywidth() call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4 vts=4') let text = getline(2) ! let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times call assert_equal(width, strdisplaywidth(text)) call s:close_windows('set sbr= vts&') endfunc --- 423,429 ---- " test strdisplaywidth() call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4 vts=4') let text = getline(2) ! let width = strlen(text[1:]) + 2->indent() + strlen(&sbr) * 3 " text wraps 3 times call assert_equal(width, strdisplaywidth(text)) call s:close_windows('set sbr= vts&') endfunc *** ../vim-8.1.1952/src/testdir/test_delete.vim 2019-05-16 22:24:52.403017783 +0200 --- src/testdir/test_delete.vim 2019-08-31 20:59:38.912447533 +0200 *************** *** 32,38 **** call assert_equal(['a', 'b'], readfile('Xdir1/Xfile')) call assert_true(isdirectory('Xdir1/subdir')) call assert_equal(['a', 'b'], readfile('Xdir1/subdir/Xfile')) ! call assert_true(isdirectory('Xdir1/empty')) call assert_equal(0, delete('Xdir1', 'rf')) call assert_false(isdirectory('Xdir1')) call assert_equal(-1, delete('Xdir1', 'd')) --- 32,38 ---- call assert_equal(['a', 'b'], readfile('Xdir1/Xfile')) call assert_true(isdirectory('Xdir1/subdir')) call assert_equal(['a', 'b'], readfile('Xdir1/subdir/Xfile')) ! call assert_true('Xdir1/empty'->isdirectory()) call assert_equal(0, delete('Xdir1', 'rf')) call assert_false(isdirectory('Xdir1')) call assert_equal(-1, delete('Xdir1', 'd')) *** ../vim-8.1.1952/src/testdir/test_functions.vim 2019-08-27 21:56:01.699592495 +0200 --- src/testdir/test_functions.vim 2019-08-31 20:58:01.037059927 +0200 *************** *** 1069,1075 **** func Test_hlexists() call assert_equal(0, hlexists('does_not_exist')) ! call assert_equal(0, hlexists('Number')) call assert_equal(0, highlight_exists('does_not_exist')) call assert_equal(0, highlight_exists('Number')) syntax on --- 1069,1075 ---- func Test_hlexists() call assert_equal(0, hlexists('does_not_exist')) ! call assert_equal(0, 'Number'->hlexists()) call assert_equal(0, highlight_exists('does_not_exist')) call assert_equal(0, highlight_exists('Number')) syntax on *************** *** 1102,1108 **** func Test_inputlist() call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\1\", 'tx') call assert_equal(1, c) ! call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\2\", 'tx') call assert_equal(2, c) call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\3\", 'tx') call assert_equal(3, c) --- 1102,1108 ---- func Test_inputlist() call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\1\", 'tx') call assert_equal(1, c) ! call feedkeys(":let c = ['Select color:', '1. red', '2. green', '3. blue']->inputlist()\2\", 'tx') call assert_equal(2, c) call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\3\", 'tx') call assert_equal(3, c) *************** *** 1279,1285 **** let g:regs = [] func TestFunc() abort let g:regs += [reg_executing()] ! let g:typed = input('?') let g:regs += [reg_executing()] endfunc call feedkeys("@qy\", 'xt') --- 1279,1285 ---- let g:regs = [] func TestFunc() abort let g:regs += [reg_executing()] ! let g:typed = '?'->input() let g:regs += [reg_executing()] endfunc call feedkeys("@qy\", 'xt') *************** *** 1295,1300 **** --- 1295,1319 ---- unlet s:reg_stat endfunc + func Test_inputsecret() + map W :call TestFunc() + let @q = "W" + let g:typed1 = '' + let g:typed2 = '' + let g:regs = [] + func TestFunc() abort + let g:typed1 = '?'->inputsecret() + let g:typed2 = inputsecret('password: ') + endfunc + call feedkeys("@qsomething\else\", 'xt') + call assert_equal("something", g:typed1) + call assert_equal("else", g:typed2) + delfunc TestFunc + unmap W + unlet g:typed1 + unlet g:typed2 + endfunc + func Test_libcall_libcallnr() if !has('libcall') return *** ../vim-8.1.1952/src/testdir/test_getcwd.vim 2019-04-27 20:36:52.534303564 +0200 --- src/testdir/test_getcwd.vim 2019-08-31 20:24:09.985899002 +0200 *************** *** 17,23 **** let lflag = haslocaldir(a:win) else let dirname = fnamemodify(getcwd(a:win, a:tab), mod) ! let lflag = haslocaldir(a:win, a:tab) endif return bufname . ' ' . dirname . ' ' . lflag endfunc --- 17,23 ---- let lflag = haslocaldir(a:win) else let dirname = fnamemodify(getcwd(a:win, a:tab), mod) ! let lflag = a:win->haslocaldir(a:tab) endif return bufname . ' ' . dirname . ' ' . lflag endfunc *** ../vim-8.1.1952/src/testdir/test_history.vim 2019-06-15 17:57:43.972724036 +0200 --- src/testdir/test_history.vim 2019-08-31 20:36:27.261450128 +0200 *************** *** 12,18 **** call assert_equal(-1, histnr(a:hist)) call assert_equal('', histget(a:hist)) ! call assert_true(histadd(a:hist, 'ls')) call assert_true(histadd(a:hist, 'buffers')) call assert_equal('buffers', histget(a:hist)) call assert_equal('ls', histget(a:hist, -2)) --- 12,18 ---- call assert_equal(-1, histnr(a:hist)) call assert_equal('', histget(a:hist)) ! call assert_true('ls'->histadd(a:hist)) call assert_true(histadd(a:hist, 'buffers')) call assert_equal('buffers', histget(a:hist)) call assert_equal('ls', histget(a:hist, -2)) *************** *** 21,34 **** call assert_equal('', histget(a:hist, -5)) call assert_equal(2, histnr(a:hist)) call assert_true(histdel(a:hist, 2)) ! call assert_false(histdel(a:hist, 7)) call assert_equal(1, histnr(a:hist)) call assert_equal('ls', histget(a:hist, -1)) call assert_true(histadd(a:hist, 'buffers')) call assert_true(histadd(a:hist, 'ls')) ! call assert_equal('ls', histget(a:hist, -1)) ! call assert_equal(4, histnr(a:hist)) let a=execute('history ' . a:hist) call assert_match("^\n # \\S* history\n 3 buffers\n> 4 ls$", a) --- 21,34 ---- call assert_equal('', histget(a:hist, -5)) call assert_equal(2, histnr(a:hist)) call assert_true(histdel(a:hist, 2)) ! call assert_false(a:hist->histdel(7)) call assert_equal(1, histnr(a:hist)) call assert_equal('ls', histget(a:hist, -1)) call assert_true(histadd(a:hist, 'buffers')) call assert_true(histadd(a:hist, 'ls')) ! call assert_equal('ls', a:hist->histget(-1)) ! call assert_equal(4, a:hist->histnr()) let a=execute('history ' . a:hist) call assert_match("^\n # \\S* history\n 3 buffers\n> 4 ls$", a) *** ../vim-8.1.1952/src/testdir/test_listdict.vim 2019-07-16 22:03:28.906863140 +0200 --- src/testdir/test_listdict.vim 2019-08-31 21:00:20.720186940 +0200 *************** *** 565,571 **** set rtp+=./sautest lockvar g:footest#x unlockvar g:footest#x ! call assert_equal(-1, islocked('g:footest#x')) call assert_equal(0, exists('g:footest#x')) call assert_equal(1, g:footest#x) let &rtp = old_rtp --- 565,571 ---- set rtp+=./sautest lockvar g:footest#x unlockvar g:footest#x ! call assert_equal(-1, 'g:footest#x'->islocked()) call assert_equal(0, exists('g:footest#x')) call assert_equal(1, g:footest#x) let &rtp = old_rtp *** ../vim-8.1.1952/src/testdir/test_syn_attr.vim 2016-07-19 20:43:52.000000000 +0200 --- src/testdir/test_syn_attr.vim 2019-08-31 20:28:26.652334911 +0200 *************** *** 3,9 **** func Test_missing_attr() hi Mine term=bold cterm=italic call assert_equal('Mine', synIDattr(hlID("Mine"), "name")) ! call assert_equal('', synIDattr(hlID("Mine"), "bg", 'term')) call assert_equal('1', synIDattr(hlID("Mine"), "bold", 'term')) call assert_equal('1', synIDattr(hlID("Mine"), "italic", 'cterm')) hi Mine term=reverse cterm=inverse --- 3,9 ---- func Test_missing_attr() hi Mine term=bold cterm=italic call assert_equal('Mine', synIDattr(hlID("Mine"), "name")) ! call assert_equal('', synIDattr("Mine"->hlID(), "bg", 'term')) call assert_equal('1', synIDattr(hlID("Mine"), "bold", 'term')) call assert_equal('1', synIDattr(hlID("Mine"), "italic", 'cterm')) hi Mine term=reverse cterm=inverse *************** *** 12,18 **** hi Mine term=underline cterm=standout gui=undercurl call assert_equal('1', synIDattr(hlID("Mine"), "underline", 'term')) call assert_equal('1', synIDattr(hlID("Mine"), "standout", 'cterm')) ! call assert_equal('1', synIDattr(hlID("Mine"), "undercurl", 'gui')) hi Mine term=NONE cterm=NONE gui=NONE call assert_equal('', synIDattr(hlID("Mine"), "bold", 'term')) call assert_equal('', synIDattr(hlID("Mine"), "italic", 'cterm')) --- 12,18 ---- hi Mine term=underline cterm=standout gui=undercurl call assert_equal('1', synIDattr(hlID("Mine"), "underline", 'term')) call assert_equal('1', synIDattr(hlID("Mine"), "standout", 'cterm')) ! call assert_equal('1', synIDattr("Mine"->hlID(), "undercurl", 'gui')) hi Mine term=NONE cterm=NONE gui=NONE call assert_equal('', synIDattr(hlID("Mine"), "bold", 'term')) call assert_equal('', synIDattr(hlID("Mine"), "italic", 'cterm')) *** ../vim-8.1.1952/src/testdir/test_termcodes.vim 2019-08-12 14:20:30.079043316 +0200 --- src/testdir/test_termcodes.vim 2019-08-31 20:38:26.776737766 +0200 *************** *** 33,39 **** " need to use byte encoding here. let str = list2str([a:code + 0x20, a:col + 0x20, a:row + 0x20]) if has('iconv') ! let bytes = iconv(str, 'utf-8', 'latin1') else " Hopefully the numbers are not too big. let bytes = str --- 33,39 ---- " need to use byte encoding here. let str = list2str([a:code + 0x20, a:col + 0x20, a:row + 0x20]) if has('iconv') ! let bytes = str->iconv('utf-8', 'latin1') else " Hopefully the numbers are not too big. let bytes = str *** ../vim-8.1.1952/src/testdir/test_true_false.vim 2016-07-07 16:33:26.000000000 +0200 --- src/testdir/test_true_false.vim 2019-08-31 20:26:06.357186893 +0200 *************** *** 100,106 **** call Try_arg_true_false('maparg("asdf", "i", %v%)', "", "asdff") call Try_arg_true_false('FilterMapArg(maparg("asdf", "i", 1, %v%))', "asdff", {'rhs': 'asdff'}) ! call Try_arg_true_false('hasmapto("asdf", "i", %v%)', 0, 1) new colored call setline(1, '') --- 100,106 ---- call Try_arg_true_false('maparg("asdf", "i", %v%)', "", "asdff") call Try_arg_true_false('FilterMapArg(maparg("asdf", "i", 1, %v%))', "asdff", {'rhs': 'asdff'}) ! call Try_arg_true_false('"asdf"->hasmapto("i", %v%)', 0, 1) new colored call setline(1, '') *** ../vim-8.1.1952/src/version.c 2019-08-31 19:13:27.839704613 +0200 --- src/version.c 2019-08-31 20:26:27.353058997 +0200 *************** *** 763,764 **** --- 763,766 ---- { /* Add new patch number below this line */ + /**/ + 1953, /**/ -- Although the scythe isn't pre-eminent among the weapons of war, anyone who has been on the wrong end of, say, a peasants' revolt will know that in skilled hands it is fearsome. -- (Terry Pratchett, Mort) /// 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 ///