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+<args>)
  <
+               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 ----
                <Esc> 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'])\<cr>1\<cr>", 'tx')
    call assert_equal(1, c)
!   call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', 
'3. blue'])\<cr>2\<cr>", 'tx')
    call assert_equal(2, c)
    call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', 
'3. blue'])\<cr>3\<cr>", 'tx')
    call assert_equal(3, c)
--- 1102,1108 ----
  func Test_inputlist()
    call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', 
'3. blue'])\<cr>1\<cr>", 'tx')
    call assert_equal(1, c)
!   call feedkeys(":let c = ['Select color:', '1. red', '2. green', '3. 
blue']->inputlist()\<cr>2\<cr>", 'tx')
    call assert_equal(2, c)
    call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', 
'3. blue'])\<cr>3\<cr>", '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\<CR>", '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\<CR>", 'xt')
***************
*** 1295,1300 ****
--- 1295,1319 ----
    unlet s:reg_stat
  endfunc
  
+ func Test_inputsecret()
+   map W :call TestFunc()<CR>
+   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\<CR>else\<CR>", '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, '<here>')
--- 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, '<here>')
*** ../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 -- [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/201908311918.x7VJIBAt032364%40masaka.moolenaar.net.

Raspunde prin e-mail lui