aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/autoload/provider/clipboard.vim19
-rw-r--r--runtime/autoload/tutor.vim197
-rw-r--r--runtime/doc/eval.txt3
-rw-r--r--runtime/ftplugin/tutor.vim19
-rw-r--r--runtime/syntax/tutor.vim22
-rw-r--r--runtime/tutor/en/vim-01-beginner.tutor92
-rw-r--r--runtime/tutor/en/vim-01-beginner.tutor.json45
-rw-r--r--runtime/tutor/tutor.tutor118
-rw-r--r--runtime/tutor/tutor.tutor.json35
-rw-r--r--src/nvim/eval.c6
-rw-r--r--src/nvim/option.c5
-rw-r--r--src/nvim/quickfix.c92
-rw-r--r--src/nvim/testdir/test_bufwintabinfo.vim13
-rw-r--r--src/nvim/testdir/test_expr.vim3
-rw-r--r--src/nvim/testdir/test_nested_function.vim36
-rw-r--r--src/nvim/testdir/test_quickfix.vim299
-rw-r--r--src/nvim/version.c2832
17 files changed, 1091 insertions, 2745 deletions
diff --git a/runtime/autoload/provider/clipboard.vim b/runtime/autoload/provider/clipboard.vim
index 47f4271091..86006497d9 100644
--- a/runtime/autoload/provider/clipboard.vim
+++ b/runtime/autoload/provider/clipboard.vim
@@ -16,6 +16,12 @@ function! s:selection.on_exit(jobid, data, event) abort
endif
endfunction
+function! s:selection.on_stderr(jobid, data, event) abort
+ echohl WarningMsg
+ echomsg 'clipboard: error invoking '.get(self.argv, 0, '?').': '.join(a:data)
+ echohl None
+endfunction
+
let s:selections = { '*': s:selection, '+': copy(s:selection)}
function! s:try_cmd(cmd, ...) abort
@@ -135,24 +141,17 @@ function! s:clipboard.set(lines, regtype, reg) abort
end
let selection.data = [a:lines, a:regtype]
let argv = split(s:copy[a:reg], " ")
+ let selection.argv = argv
let selection.detach = s:cache_enabled
let selection.cwd = "/"
- call extend(selection, {
- \ 'on_stdout': function('s:set_errhandler'),
- \ 'on_stderr': function('s:set_errhandler'),
- \ })
let jobid = jobstart(argv, selection)
if jobid > 0
call jobsend(jobid, a:lines)
call jobclose(jobid, 'stdin')
let selection.owner = jobid
- endif
-endfunction
-
-function! s:set_errhandler(job_id, data, event) abort
- if a:job_id <= 0
+ else
echohl WarningMsg
- echo 'clipboard: error when invoking provider: ' . join(a:data)
+ echomsg 'clipboard: failed to execute: '.(s:copy[a:reg])
echohl None
endif
endfunction
diff --git a/runtime/autoload/tutor.vim b/runtime/autoload/tutor.vim
index 43d8a87886..56e2283465 100644
--- a/runtime/autoload/tutor.vim
+++ b/runtime/autoload/tutor.vim
@@ -15,30 +15,17 @@ function! tutor#SetupVim()
endif
endfunction
-" Mappings: {{{1
-
-function! s:CheckMaps()
- nmap
+" Loads metadata file, if available
+function! tutor#LoadMetadata()
+ let b:tutor_metadata = json_decode(join(readfile(expand('%').'.json'), "\n"))
endfunction
-function! s:MapKeyWithRedirect(key, cmd)
- if maparg(a:key) !=# ''
- redir => l:keys
- silent call s:CheckMaps()
- redir END
- let l:key_list = split(l:keys, '\n')
-
- let l:raw_map = filter(copy(l:key_list), "v:val =~# '\\* ".a:key."'")
- if len(l:raw_map) == 0
- exe "nnoremap <buffer> <expr> ".a:key." ".a:cmd
- return
- endif
- let l:map_data = split(l:raw_map[0], '\s*')
+" Mappings: {{{1
- exe "nnoremap <buffer> <expr> ".l:map_data[0]." ".a:cmd
- else
- exe "nnoremap <buffer> <expr> ".a:key." ".a:cmd
- endif
+function! tutor#SetNormalMappings()
+ nnoremap <silent> <buffer> <CR> :call tutor#FollowLink(0)<cr>
+ nnoremap <silent> <buffer> <2-LeftMouse> :call tutor#MouseDoubleClick()<cr>
+ nnoremap <buffer> >> :call tutor#InjectCommand()<cr>
endfunction
function! tutor#MouseDoubleClick()
@@ -46,7 +33,7 @@ function! tutor#MouseDoubleClick()
normal! zo
else
if match(getline('.'), '^#\{1,} ') > -1
- normal! zc
+ silent normal! zc
else
call tutor#FollowLink(0)
endif
@@ -59,114 +46,6 @@ function! tutor#InjectCommand()
redraw | echohl WarningMsg | echon "tutor: ran" | echohl None | echon " " | echohl Statement | echon l:cmd
endfunction
-function! tutor#SetNormalMappings()
- call s:MapKeyWithRedirect('l', 'tutor#ForwardSkipConceal(v:count1)')
- call s:MapKeyWithRedirect('h', 'tutor#BackwardSkipConceal(v:count1)')
- call s:MapKeyWithRedirect('<right>', 'tutor#ForwardSkipConceal(v:count1)')
- call s:MapKeyWithRedirect('<left>', 'tutor#BackwardSkipConceal(v:count1)')
-
- nnoremap <silent> <buffer> <CR> :call tutor#FollowLink(0)<cr>
- nnoremap <silent> <buffer> <2-LeftMouse> :call tutor#MouseDoubleClick()<cr>
- nnoremap <buffer> >> :call tutor#InjectCommand()<cr>
-endfunction
-
-function! tutor#SetSampleTextMappings()
- noremap <silent> <buffer> A :if match(getline('.'), '^--->') > -1 \| call search('\s{\@=', 'Wc') \| startinsert \| else \| startinsert! \| endif<cr>
- noremap <silent> <buffer> $ :if match(getline('.'), '^--->') > -1 \| call search('.\s{\@=', 'Wc') \| else \| call search('$', 'Wc') \| endif<cr>
- onoremap <silent> <buffer> $ :if match(getline('.'), '^--->') > -1 \| call search('.\s{\@=', 'Wc') \| else \| call search('$', 'Wc') \| endif<cr>
- noremap <silent> <buffer> ^ :if match(getline('.'), '^--->') > -1 \| call search('\(--->\s\)\@<=.', 'bcW') \| else \| call search('^', 'bcW') \|endif<cr>
- onoremap <silent> <buffer> ^ :if match(getline('.'), '^--->') > -1 \| call search('\(--->\s\)\@<=.', 'bcW') \| else \| call search('^', 'bcW') \|endif<cr>
- nmap <silent> <buffer> 0 ^<esc>
- nmap <silent> <buffer> <Home> ^<esc>
- nmap <silent> <buffer> <End> $
- imap <silent> <buffer> <Home> <esc>^<esc>:startinsert<cr>
- imap <silent> <buffer> <End> <esc>$:startinsert<cr>
- noremap <silent> <buffer> I :exe "normal! 0" \| startinsert<cr>
-endfunction
-
-" Navigation: {{{1
-
-" taken from http://stackoverflow.com/a/24224578
-
-function! tutor#ForwardSkipConceal(count)
- let cnt=a:count
- let mvcnt=0
- let c=col('.')
- let l=line('.')
- let lc=col('$')
- let line=getline('.')
- while cnt
- if c>=lc
- let mvcnt+=cnt
- break
- endif
- if stridx(&concealcursor, 'n')==-1
- let isconcealed=0
- else
- let [isconcealed, cchar, group] = synconcealed(l, c)
- endif
- if isconcealed
- let cnt-=strchars(cchar)
- let oldc=c
- let c+=1
- while c < lc
- let [isconcealed2, cchar2, group2] = synconcealed(l, c)
- if !isconcealed2 || cchar2 != cchar
- break
- endif
- let c+= 1
- endwhile
- let mvcnt+=strchars(line[oldc-1:c-2])
- else
- let cnt-=1
- let mvcnt+=1
- let c+=len(matchstr(line[c-1:], '.'))
- endif
- endwhile
- return mvcnt.'l'
-endfunction
-
-function! tutor#BackwardSkipConceal(count)
- let cnt=a:count
- let mvcnt=0
- let c=col('.')
- let l=line('.')
- let lc=0
- let line=getline('.')
- while cnt
- if c<=1
- let mvcnt+=cnt
- break
- endif
- if stridx(&concealcursor, 'n')==-1 || c == 0
- let isconcealed=0
- else
- let [isconcealed, cchar, group]=synconcealed(l, c-1)
- endif
- if isconcealed
- let cnt-=strchars(cchar)
- let oldc=c
- let c-=1
- while c>1
- let [isconcealed2, cchar2, group2] = synconcealed(l, c-1)
- if !isconcealed2 || cchar2 != cchar
- break
- endif
- let c-=1
- endwhile
- let c = max([c, 1])
- let mvcnt+=strchars(line[c-1:oldc-2])
- else
- let cnt-=1
- let mvcnt+=1
- let c-=len(matchstr(line[:c-2], '.$'))
- endif
- endwhile
- return mvcnt.'h'
-endfunction
-
-" Hypertext: {{{1
-
function! tutor#FollowLink(force)
let l:stack_s = join(map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")'), '')
if l:stack_s =~# 'tutorLink'
@@ -209,42 +88,40 @@ function! tutor#InfoText()
return join(l:info_parts, " ")
endfunction
-" Marks {{{1
-function! tutor#PlaceXMarks()
- call cursor(1, 1)
- let b:tutor_sign_id = 1
- while search('^--->', 'W') > 0
- call tutor#CheckText(getline('.'))
- let b:tutor_sign_id+=1
- endwhile
- call cursor(1, 1)
+
+" Marks: {{{1
+
+function! tutor#ApplyMarks()
+ hi! link tutorExpect Special
+ if exists('b:tutor_metadata') && has_key(b:tutor_metadata, 'expect')
+ let b:tutor_sign_id = 1
+ for expct in keys(b:tutor_metadata['expect'])
+ let lnum = eval(expct)
+ call matchaddpos('tutorExpect', [lnum])
+ call tutor#CheckLine(lnum)
+ endfor
+ endif
endfunction
-function! tutor#CheckText(text)
- if match(a:text, '{expect:ANYTHING}\s*$') == -1
- if match(getline('.'), '^--->\s*$') > -1
- exe "sign place ".b:tutor_sign_id." line=".line('.')." name=tutorbad buffer=".bufnr('%')
- else
- if match(getline('.'), '|expect:.\+|') == -1
- let l:cur_text = matchstr(a:text, '---> \zs.\{-}\ze {expect:')
- let l:expected_text = matchstr(a:text, '{expect:\zs.*\ze}\s*$')
- else
- let l:cur_text = matchstr(a:text, '---> \zs.\{-}\ze |expect:')
- let l:expected_text = matchstr(a:text, '|expect:\zs.*\ze|\s*$')
- endif
- if l:cur_text ==# l:expected_text
- exe "sign place ".b:tutor_sign_id." line=".line('.')." name=tutorok buffer=".bufnr('%')
- else
- exe "sign place ".b:tutor_sign_id." line=".line('.')." name=tutorbad buffer=".bufnr('%')
- endif
+function! tutor#ApplyMarksOnChanged()
+ if exists('b:tutor_metadata') && has_key(b:tutor_metadata, 'expect')
+ let lnum = line('.')
+ if index(keys(b:tutor_metadata['expect']), string(lnum)) > -1
+ call tutor#CheckLine(lnum)
endif
endif
endfunction
-function! tutor#OnTextChanged()
- let l:text = getline('.')
- if match(l:text, '^--->') > -1
- call tutor#CheckText(l:text)
+function! tutor#CheckLine(line)
+ if exists('b:tutor_metadata') && has_key(b:tutor_metadata, 'expect')
+ let bufn = bufnr('%')
+ let ctext = getline(a:line)
+ if b:tutor_metadata['expect'][string(a:line)] == -1 || ctext ==# b:tutor_metadata['expect'][string(a:line)]
+ exe "sign place ".b:tutor_sign_id." line=".a:line." name=tutorok buffer=".bufn
+ else
+ exe "sign place ".b:tutor_sign_id." line=".a:line." name=tutorbad buffer=".bufn
+ endif
+ let b:tutor_sign_id+=1
endif
endfunction
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index cca62f1469..8882043162 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -4273,7 +4273,8 @@ getqflist([{what}]) *getqflist()*
If the optional {what} dictionary argument is supplied, then
returns only the items listed in {what} as a dictionary. The
following string items are supported in {what}:
- nr get information for this quickfix list
+ nr get information for this quickfix list; zero
+ means the current quickfix list
title get the list title
winid get the |window-ID| (if opened)
all all of the above quickfix properties
diff --git a/runtime/ftplugin/tutor.vim b/runtime/ftplugin/tutor.vim
index 1579753170..ec55472b78 100644
--- a/runtime/ftplugin/tutor.vim
+++ b/runtime/ftplugin/tutor.vim
@@ -19,27 +19,30 @@ setlocal noundofile
setlocal keywordprg=:help
setlocal iskeyword=@,-,_
-setlocal foldmethod=expr
+" The user will have to enable the folds himself, but we provide the foldexpr
+" function.
+setlocal foldmethod=manual
setlocal foldexpr=tutor#TutorFolds()
-setlocal foldcolumn=1
setlocal foldlevel=4
-setlocal nowrap
setlocal statusline=%{toupper(expand('%:t:r'))}\ tutorial%=
setlocal statusline+=%{tutor#InfoText()}
+" Load metadata if it exists: {{{1
+if filereadable(expand('%').'.json')
+ call tutor#LoadMetadata()
+endif
+
" Mappings: {{{1
call tutor#SetNormalMappings()
-call tutor#SetSampleTextMappings()
" Checks: {{{1
sign define tutorok text=✓ texthl=tutorOK
sign define tutorbad text=✗ texthl=tutorX
-if !exists('g:tutor_debug') || g:tutor_debug == 0
- call tutor#PlaceXMarks()
- autocmd! TextChanged <buffer> call tutor#OnTextChanged()
- autocmd! TextChangedI <buffer> call tutor#OnTextChanged()
+if !exists('g:tutor_debug') || g:tutor_debug == 0
+ call tutor#ApplyMarks()
+ autocmd! TextChanged,TextChangedI <buffer> call tutor#ApplyMarksOnChanged()
endif
diff --git a/runtime/syntax/tutor.vim b/runtime/syntax/tutor.vim
index bce9189660..fbf159582a 100644
--- a/runtime/syntax/tutor.vim
+++ b/runtime/syntax/tutor.vim
@@ -31,26 +31,20 @@ syn keyword tutorMarks TODO NOTE IMPORTANT TIP ATTENTION EXERCISE
syn keyword tutorMarks todo note tip attention exercise
syn keyword tutorMarks Todo Note Tip Excersise
-syn match tutorTextMark /\\\@<!--->/ conceal cchar=→
-syn region tutorSampleText start=/^\(--->\)\@=/ end=/$/ keepend contains=@SPELL
-syn match tutorSampleTextMark /^--->/ contained containedin=tutorSampleText conceal cchar=→
-syn match tutorSampleTextExpect /\}\@<! {expect:.\+}\s*$/ contained containedin=tutorSampleText conceal
-syn match tutorSampleTextExpect /|\@<! |expect:.\+|\s*$/ contained containedin=tutorSampleText conceal
-
syn region tutorCodeblock matchgroup=Delimiter start=/^\~\{3}.*$/ end=/^\~\{3}/
-syn region tutorShell matchgroup=Delimiter start=/^\~\{3} sh\s*$/ end=/^\~\{3}/ keepend contains=@TUTORSHELL concealends
+syn region tutorShell matchgroup=Delimiter start=/^\~\{3} sh\s*$/ end=/^\~\{3}/ keepend contains=@TUTORSHELL
syn match tutorShellPrompt /\(^\s*\)\@<=[$#]/ contained containedin=tutorShell
-syn region tutorInlineCode matchgroup=Delimiter start=/\\\@<!`/ end=/\\\@<!\(`{\@!\|`\s\)/ concealends
+syn region tutorInlineCode matchgroup=Delimiter start=/\\\@<!`/ end=/\\\@<!\(`{\@!\|`\s\)/
-syn region tutorCommand matchgroup=Delimiter start=/^\~\{3} cmd\( :\)\?\s*$/ end=/^\~\{3}/ keepend contains=@VIM concealends
-syn region tutorInlineCommand matchgroup=Delimiter start=/\\\@<!`\(.*{vim}\)\@=/ end=/\\\@<!`\({vim}\)\@=/ nextgroup=tutorInlineType contains=@VIM concealends
+syn region tutorCommand matchgroup=Delimiter start=/^\~\{3} cmd\( :\)\?\s*$/ end=/^\~\{3}/ keepend contains=@VIM
+syn region tutorInlineCommand matchgroup=Delimiter start=/\\\@<!`\(.*{vim}\)\@=/ end=/\\\@<!`\({vim}\)\@=/ nextgroup=tutorInlineType contains=@VIM
-syn region tutorNormal matchgroup=Delimiter start=/^\~\{3} norm\(al\?\)\?\s*$/ end=/^\~\{3}/ contains=@VIMNORMAL concealends
-syn region tutorInlineNormal matchgroup=Delimiter start=/\\\@<!`\(\S*{normal}\)\@=/ end=/\\\@<!`\({normal}\)\@=/ nextgroup=tutorInlineType contains=@VIMNORMAL concealends
+syn region tutorNormal matchgroup=Delimiter start=/^\~\{3} norm\(al\?\)\?\s*$/ end=/^\~\{3}/ contains=@VIMNORMAL
+syn region tutorInlineNormal matchgroup=Delimiter start=/\\\@<!`\(\S*{normal}\)\@=/ end=/\\\@<!`\({normal}\)\@=/ nextgroup=tutorInlineType contains=@VIMNORMAL
-syn match tutorInlineType /{\(normal\|vim\)}/ contained conceal
+syn match tutorInlineType /{\(normal\|vim\)}/ contained
syn match tutorInlineOK /✓/
syn match tutorInlineX /✗/
@@ -72,7 +66,7 @@ hi! tutorMarks cterm=bold gui=bold
hi! tutorEmphasis gui=italic cterm=italic
hi! tutorBold gui=bold cterm=bold
-hi! link tutorSampleText Special
+hi! link tutorExpect Special
hi! tutorOK ctermfg=green guifg=#00ff88 cterm=bold gui=bold
hi! tutorX ctermfg=red guifg=#ff2000 cterm=bold gui=bold
hi! link tutorInlineOK tutorOK
diff --git a/runtime/tutor/en/vim-01-beginner.tutor b/runtime/tutor/en/vim-01-beginner.tutor
index 47d4ed06a1..fee7de21d2 100644
--- a/runtime/tutor/en/vim-01-beginner.tutor
+++ b/runtime/tutor/en/vim-01-beginner.tutor
@@ -18,10 +18,10 @@ be saved. Don't worry about messing things up; just remember that pressing
[<Esc>](<Esc>) and then [u](u) will undo the latest change.
This tutorial is interactive, and there are a few things you should know.
-Pressing [<Enter>](<Enter>) over text highlighted [like this](holy-grail) will take you to some relevant
-help (hopefully), and pressing K over any word will try to do so too. Sometimes
-you will be required to modify text like
----> this here {expect:this here}
+Pressing [<Enter>](<Enter>) over text highlighted [like this](holy-grail) will take you to some
+relevant help (hopefully), and pressing K over any word will try to do so too.
+Sometimes you will be required to modify text like
+this here
Once you have done the changes correctly, the ✗ sign at the left will change
to ✓. I imagine you can already see how neat Vim can be ;)
Other times, you'll be prompted to run a command (I'll explain this later):
@@ -99,7 +99,7 @@ NOTE: [:q!](:q) <Enter> discards any changes you made. In a few lessons you
4. Repeat steps 2 through 4 until the sentence is correct.
----> The ccow jumpedd ovverr thhe mooon. {expect:The cow jumped over the moon.}
+The ccow jumpedd ovverr thhe mooon.
5. Now that the line is correct, go on to Lesson 1.4.
@@ -119,8 +119,8 @@ NOTE: As you go through this tutor, do not try to memorize, learn by usage.
4. As each error is fixed press <Esc> to return to Normal mode.
Repeat steps 2 through 4 to correct the sentence.
----> There is text misng this . {expect:There is some text missing from this line.}
----> There is some text missing from this line. {expect:There is some text missing from this line.}
+There is text misng this .
+There is some text missing from this line.
5. When you are comfortable inserting text move to lesson 1.5.
@@ -138,10 +138,10 @@ NOTE: As you go through this tutor, do not try to memorize, learn by usage.
4. Move the cursor to the second line marked ---> and repeat
steps 2 and 3 to correct this sentence.
----> There is some text missing from th {expect:There is some text missing from this line.}
----> There is some text missing from this line. {expect:There is some text missing from this line.}
----> There is also some text miss {expect:There is also some text missing here.}
----> There is also some text missing here. {expect:There is also some text missing here.}
+There is some text missing from th
+There is some text missing from this line.
+There is also some text miss
+There is also some text missing here.
5. When you are comfortable appending text move to lesson 1.6.
@@ -212,7 +212,7 @@ Now continue with Lesson 2.
4. Type [d](d)[w](w) to make the word disappear.
----> There are a some words fun that don't belong paper in this sentence. {expect:There are some words that don't belong in this sentence.}
+There are a some words fun that don't belong paper in this sentence.
5. Repeat steps 3 and 4 until the sentence is correct and go to Lesson 2.2.
@@ -228,7 +228,7 @@ Now continue with Lesson 2.
4. Type `d$`{normal} to delete to the end of the line.
----> Somebody typed the end of this line twice. end of this line twice. {expect:ANYTHING}
+Somebody typed the end of this line twice. end of this line twice.
5. Move on to Lesson 2.3 to understand what is happening.
@@ -268,7 +268,7 @@ NOTE: Pressing just the motion while in Normal mode without an operator will
5. Repeat steps 2 and 3 with different numbers.
----> This is just a line with words you can move around in. {expect:ANYTHING}
+This is just a line with words you can move around in.
6. Move on to Lesson 2.5.
@@ -287,7 +287,7 @@ insert a count before the motion to delete more:
3. Repeat steps 1 and 2 with a different count to delete the consecutive
UPPER CASE words with one command
----> this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up. {expect:this line of words is cleaned up.}
+this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
# Lesson 2.6: OPERATING ON LINES
@@ -301,13 +301,13 @@ insert a count before the motion to delete more:
3. Now move to the fourth line.
4. Type `2dd`{normal} to delete two lines.
----> 1) Roses are red, {expect:ANYTHING}
----> 2) Mud is fun, {expect:ANYTHING}
----> 3) Violets are blue, {expect:ANYTHING}
----> 4) I have a car, {expect:ANYTHING}
----> 5) Clocks tell time, {expect:ANYTHING}
----> 6) Sugar is sweet {expect:ANYTHING}
----> 7) And so are you. {expect:ANYTHING}
+1) Roses are red,
+2) Mud is fun,
+3) Violets are blue,
+4) I have a car,
+5) Clocks tell time,
+6) Sugar is sweet
+7) And so are you.
# Lesson 2.7: THE UNDO COMMAND
@@ -322,7 +322,7 @@ insert a count before the motion to delete more:
6. Now type `u`{normal} a few times to undo the U and preceding commands.
7. Now type `<Ctrl-r>`{normal} a few times to redo the commands (undo the undo's).
----> Fiix the errors oon thhis line and reeplace them witth undo. {expect:Fix the errors on this line and replace them with undo.}
+Fiix the errors oon thhis line and reeplace them witth undo.
8. These are very useful commands. Now move on to the Lesson 2 Summary.
@@ -362,10 +362,10 @@ insert a count before the motion to delete more:
5. Repeat steps 2 through 4 to put all the lines in correct order.
----> d) Can you learn too? {expect:ANYTHING}
----> b) Violets are blue, {expect:ANYTHING}
----> c) Intelligence is learned, {expect:ANYTHING}
----> a) Roses are red, {expect:ANYTHING}
+d) Can you learn too?
+b) Violets are blue,
+c) Intelligence is learned,
+a) Roses are red,
# Lesson 3.2: THE REPLACE COMMAND
@@ -379,8 +379,8 @@ insert a count before the motion to delete more:
4. Repeat steps 2 and 3 until the first line is equal to the second one.
----> Whan this lime was tuoed in, someone presswd some wrojg keys! {expect:When this line was typed in, someone pressed some wrong keys!}
----> When this line was typed in, someone pressed some wrong keys! {expect:When this line was typed in, someone pressed some wrong keys!}
+Whan this lime was tuoed in, someone presswd some wrojg keys!
+When this line was typed in, someone pressed some wrong keys!
5. Now move on to Lesson 3.3.
@@ -400,8 +400,8 @@ NOTE: Remember that you should be learning by doing, not memorization.
5. Repeat steps 3 and 4 until the first sentence is the same as the second.
----> This lubw has a few wptfd that mrrf changing usf the change operator. {expect:This line has a few words that need changing using the change operator.}
----> This line has a few words that need changing using the change operator. {expect:This line has a few words that need changing using the change operator.}
+This lubw has a few wptfd that mrrf changing usf the change operator.
+This line has a few words that need changing using the change operator.
Notice that [c](c)e deletes the word and places you in Insert mode.
@@ -421,8 +421,8 @@ Notice that [c](c)e deletes the word and places you in Insert mode.
5. Type `c$`{normal} and type the rest of the line like the second and press `<Esc>`{normal}.
----> The end of this line needs some help to make it like the second. {expect:The end of this line needs to be corrected using the c$ command.}
----> The end of this line needs to be corrected using the c$ command. {expect:The end of this line needs to be corrected using the c$ command.}
+The end of this line needs some help to make it like the second.
+The end of this line needs to be corrected using the c$ command.
NOTE: You can use the Backspace key to correct mistakes while typing.
@@ -484,7 +484,7 @@ NOTE: You may see the cursor position in the lower right corner of the screen
5. To go back to where you came from press `<Ctrl-o>`{normal} (Keep Ctrl down while
pressing the letter o). Repeat to go back further. `<Ctrl-i>`{normal} goes forward.
----> "errroor" is not the way to spell error; errroor is an error. {expect:ANYTHING}
+"errroor" is not the way to spell error; errroor is an error.
NOTE: When the search reaches the end of the file it will continue at the
start, unless the ['wrapscan']('wrapscan') option has been reset.
@@ -503,7 +503,7 @@ NOTE: When the search reaches the end of the file it will continue at the
5. Move the cursor to another (,),[,],{ or } and see what `%`{normal} does.
----> This ( is a test line with ('s, ['s ] and {'s } in it. )) {expect:ANYTHING}
+This ( is a test line with ('s, ['s ] and {'s } in it. ))
NOTE: This is very useful in debugging a program with unmatched parentheses!
@@ -528,7 +528,7 @@ NOTE: This is very useful in debugging a program with unmatched parentheses!
Adding the g [flag](:s_flags) means to substitute globally in the line, change
all occurrences of "thee" in the line.
----> thee best time to see thee flowers is in thee spring. {expect:the best time to see the flowers is in the spring.}
+thee best time to see thee flowers is in thee spring.
4. To change every occurrence of a character string between two lines, type
~~~ cmd
@@ -719,12 +719,12 @@ NOTE: You can also read the output of an external command. For example,
3. Now type some text and press `<Esc>`{normal} to exit Insert mode.
----> After typing o the cursor is placed on the open line in Insert mode. {expect:ANYTHING}
+After typing o the cursor is placed on the open line in Insert mode.
4. To open up a line ABOVE the cursor, simply type a [capital O](O), rather
than a lowercase `o`{normal}. Try this on the line below.
----> Open up a line above this by typing O while the cursor is on this line. {expect:ANYTHING}
+Open up a line above this by typing O while the cursor is on this line.
# Lesson 6.2: THE APPEND COMMAND
@@ -741,8 +741,8 @@ NOTE: You can also read the output of an external command. For example,
5. Use `e`{normal} to move to the next incomplete word and repeat steps 3 and 4.
----> This li will allow you to pract appendi text to a line. {expect:This line will allow you to practice appending text to a line.}
----> This line will allow you to practice appending text to a line. {expect:This line will allow you to practice appending text to a line.}
+This li will allow you to pract appendi text to a line.
+This line will allow you to practice appending text to a line.
NOTE: [a](a), [i](i) and [A](A) all go to the same Insert mode, the only difference is where
the characters are inserted.
@@ -762,8 +762,8 @@ NOTE: [a](a), [i](i) and [A](A) all go to the same Insert mode, the only differ
4. Repeat the steps to replace the remaining "xxx".
----> Adding 123 to xxx gives you xxx. {expect:Adding 123 to 456 gives you 579.}
----> Adding 123 to 456 gives you 579. {expect:Adding 123 to 456 gives you 579.}
+Adding 123 to xxx gives you xxx.
+Adding 123 to 456 gives you 579.
NOTE: Replace mode is like Insert mode, but every typed character deletes an
existing character.
@@ -785,8 +785,8 @@ NOTE: Replace mode is like Insert mode, but every typed character deletes an
6. Use Visual mode to select " item.", yank it with `y`{normal}, move to the end of
the next line with `j$`{normal} and put the text there with `p`{normal}.
----> a) this is the first item.
----> b) {expect: b) this is the second item}
+a) this is the first item.
+ b)
NOTE: you can also use `y`{normal} as an operator; `yw`{normal} yanks one word.
@@ -947,8 +947,10 @@ There are many resources online to learn more about vim. Here's a bunch of them:
- Vim Video-Tutorials by Derek Wyatt: http://derekwyatt.org/vim/tutorials/
- *Learn Vimscript the Hard Way*: http://learnvimscriptthehardway.stevelosh.com/
- *7 Habits of Effective Text Editing*: http://www.moolenaar.net/habits.html
+- *vim-galore*: https://github.com/mhinz/vim-galore
-If you prefer a book, *Practival Vim* by Drew Neil is recommended often.
+If you prefer a book, *Practical Vim* by Drew Neil is recommended often (the sequel, *Modern
+Vim*, includes material specific to nvim!).
This tutorial was written by Michael C. Pierce and Robert K. Ware, Colorado
School of Mines using ideas supplied by Charles Smith, Colorado State
diff --git a/runtime/tutor/en/vim-01-beginner.tutor.json b/runtime/tutor/en/vim-01-beginner.tutor.json
new file mode 100644
index 0000000000..3f55971a09
--- /dev/null
+++ b/runtime/tutor/en/vim-01-beginner.tutor.json
@@ -0,0 +1,45 @@
+{
+ "expect": {
+ "24": -1,
+ "102": "The cow jumped over the moon.",
+ "122": "There is some text missing from this line.",
+ "123": "There is some text missing from this line.",
+ "141": "There is some text missing from this line.",
+ "142": "There is some text missing from this line.",
+ "143": "There is also some text missing here.",
+ "144": "There is also some text missing here.",
+ "215": "There are some words that don't belong in this sentence.",
+ "231": "Somebody typed the end of this line twice.",
+ "271": -1,
+ "290": "this line of words is cleaned up.",
+ "304": -1,
+ "305": -1,
+ "306": -1,
+ "307": -1,
+ "308": -1,
+ "309": -1,
+ "310": -1,
+ "325": "Fix the errors on this line and replace them with undo.",
+ "365": -1,
+ "366": -1,
+ "367": -1,
+ "368": -1,
+ "382": "When this line was typed in, someone pressed some wrong keys!",
+ "383": "When this line was typed in, someone pressed some wrong keys!",
+ "403": "This line has a few words that need changing using the change operator.",
+ "404": "This line has a few words that need changing using the change operator.",
+ "424": "The end of this line needs to be corrected using the c$ command.",
+ "425": "The end of this line needs to be corrected using the c$ command.",
+ "487": -1,
+ "506": -1,
+ "531": "the best time to see the flowers is in the spring.",
+ "722": -1,
+ "727": -1,
+ "744": "This line will allow you to practice appending text to a line.",
+ "745": "This line will allow you to practice appending text to a line.",
+ "765": "Adding 123 to 456 gives you 579.",
+ "766": "Adding 123 to 456 gives you 579.",
+ "788": "a) this is the first item.",
+ "789": " b) this is the second item."
+ }
+}
diff --git a/runtime/tutor/tutor.tutor b/runtime/tutor/tutor.tutor
index 1ad64a18ff..c937bd686a 100644
--- a/runtime/tutor/tutor.tutor
+++ b/runtime/tutor/tutor.tutor
@@ -60,27 +60,27 @@ is displayed like
1. Format the line below so it becomes a lesson description:
----> This is text with important information {expect:This is text with **important information**}
----> This is text with **important information** {expect:This is text with **important information**}
+This is text with important information
+This is text with **important information**
Note: Some words (e.g., NOTE, IMPORTANT, tip, ATTENTION, etc.) will also be
highlighted. You don't need to mark them specially.
2. Turn the line below into a TODO item:
----> Document '&variable' {expect:TODO: Document '&variable'}
----> TODO: Document '&variable' {expect:TODO: Document '&variable'}
+Document '&variable'
+TODO: Document '&variable'
### Headers *headers*
3. Practice fixing the lines below:
----> This is a level 1 header {expect:# This is a level 1 header}
----> # This is a level 1 header {expect:# This is a level 1 header}
----> This is a level 3 header {expect:### This is a level 3 header}
----> ### This is a level 3 header {expect:### This is a level 3 header}
----> This is a header with a label {expect:# This is a header with a label {*label*}}
----> # This is a header with a label {*label*} {expect:# This is a header with a label {*label*}}
+This is a level 1 header
+# This is a level 1 header
+This is a level 3 header
+### This is a level 3 header
+This is a header with a label
+# This is a header with a label {*label*}
4. Now, create a 4th level section here, and add a label like in the previous
exercise:
@@ -105,8 +105,8 @@ If the target of a link matches a help topic, opening it will open it.
5. Fix the following line:
----> A link to help for the 'breakindent' option {expect:A link to help for the ['breakindent']('breakindent') option}
----> A link to help for the ['breakindent']('breakindent') option {expect:A link to help for the ['breakindent']('breakindent') option}
+A link to help for the 'breakindent' option
+A link to help for the ['breakindent']('breakindent') option
#### Anchor links
@@ -120,8 +120,8 @@ and are hidden by default. Links to them look like
6. Add the appropiate link:
----> A link to the Links section {expect:A link to the [Links](*links*) section}
----> A link to the [Links](*links*) section {expect:A link to the [Links](*links*) section}
+A link to the Links section
+A link to the [Links](*links*) section
7. Now, create a link to the section you created on exercise 4
above.
@@ -136,8 +136,8 @@ You can also have links to other tutorials. For this, you'll write the anchor in
7. Create a link to this tutorial:
----> A link to the vim-tutor-mode tutorial {expect:A link to [the vim-tutor-mode tutorial](@tutor:tutor)}
----> A link to [the vim-tutor-mode tutorial](@tutor:tutor) {expect:A link to [the vim-tutor-mode tutorial](@tutor:tutor)}
+A link to the vim-tutor-mode tutorial
+A link to [the vim-tutor-mode tutorial](@tutor:tutor)
### Codeblocks *codeblocks*
@@ -154,13 +154,13 @@ echom "hello"
8. Copy the viml section below
----> {expect:~~~ viml}
----> {expect:echom "the value of &number is".string(&number)}
----> {expect:~~~}
----> ~~~ viml {expect:~~~ viml}
----> echom "the value of &number is".string(&number) {expect:echom "the value of &number is".string(&number)}
----> ~~~ {expect:~~~}
+
+
+
+~~~ viml
+echom 'the value of &number is'.string(&number)
+~~~
You can inline viml code using "\`" and "\`{vim}":
@@ -185,13 +185,13 @@ Note: you can also write `norm` or `normal`.
9. Copy the normal section below
----> {expect:~~~ normal}
----> {expect:d2w}
----> {expect:~~~}
----> ~~~ normal {expect:~~~ normal}
----> d2w {expect:d2w}
----> ~~~ {expect:~~~}
+
+
+
+~~~ normal
+d2w
+~~~
You can also inline normal commands by using "\`" and "\`{normal}":
@@ -203,10 +203,11 @@ is displayed:
10. Complete the line as shown
----> d {expect:«d2w»}
----> «d2w» {expect:«d2w»}
+d
+`d2w`{normal}
-Commands to run in the system shell can be highlighted by indenting a line starting with "$".
+Commands to run in the system shell can be highlighted by indenting a line
+starting with "$".
~~~ sh
$ vim --version
@@ -215,45 +216,32 @@ Commands to run in the system shell can be highlighted by indenting a line start
## INTERACTIVE ELEMENTS *interactive*
As visible in this very document, vim-tutor-mode includes some interactive
-elements, to provide feedback to the user about his progress. These elements
-all have the syntax
-
- \---> TEXT {CLAUSE}
-
-where \---> must start at the beginning of the line. If TEXT satisfies CLAUSE,
-a ✓ sign will appear to the left. A ✗ sign is displayed otherwise. The CLAUSE
-itself is hidden unless debug mode is set or ['conceallevel']('conceallevel')
-is 2.
+elements to provide feedback to the user about his progress. If the text in
+these elements satisfies some set condition, a ✓ sign will appear in the gutter
+to the left. Otherwise, a ✗ sign is displayed.
### expect *expect*
-The basic clause is "expect", which is satisfied if TEXT is the same as the
-content of the clause. For example
-
- \---> TEXT {expect:TEXT}
-
-is satisfied, but
-
- \---> OTHER TEXT {expect:TEXT}
-
-is not.
+"expect" lines check that the contents of the line are identical to some preset text
+(like in the exercises above).
-13. Make both lines the same:
+These elements are specified in separate JSON files like this
----> this is not right {expect:---> this is right} |expect:---> this is right {expect:---> this is right}|
----> ---> this is right {expect:---> this is right} |expect:---> this is right {expect:---> this is right}|
-
-
-If the content of a expect clause is ANYTHING, no checks will be performed. This is
-useful to create a line that is highlighted you want the user to play with.
-
- \---> TEXT {expect:ANYTHING}
-
-is displayed
+~~~ json
+{
+ "expect": {
+ "1": "This is how this line should look.",
+ "2": "This is how this line should look.",
+ "3": -1
+ }
+}
+~~~
----> this is free text {expect:ANYTHING}
+These files contain an "expect" dictionary, for which the keys are line numbers and
+the values are the expected text. A value of -1 means that the condition for the line
+will always be satisfied, no matter what (this is useful for letting the user play a bit).
-14. Turn the line below into free text:
+This is an "expect" line that is always satisfied. Try changing it.
----> this is some text |expect:---> this is some text {expect:ANYTHING}|
----> ---> this is some text {expect:ANYTHING} |expect:---> this is some text {expect:ANYTHING}|
+These files conventionally have the same name as the tutorial document with the `.json`
+extension appended (for a full example, see the file that corresponds to this tutorial).
diff --git a/runtime/tutor/tutor.tutor.json b/runtime/tutor/tutor.tutor.json
new file mode 100644
index 0000000000..bf3eae8586
--- /dev/null
+++ b/runtime/tutor/tutor.tutor.json
@@ -0,0 +1,35 @@
+{
+ "expect": {
+ "63": "This is text with **important information**",
+ "64": "This is text with **important information**",
+ "71": "Document '&variable'",
+ "72": "Document '&variable'",
+ "78": "# This is a level 1 header",
+ "79": "# This is a level 1 header",
+ "80": "### This is a level 3 header",
+ "81": "### This is a level 3 header",
+ "82": "# This is a header with a label {*label*}",
+ "83": "# This is a header with a label {*label*}",
+ "108": "A link to help for the ['breakindent']('breakindent') option",
+ "109": "A link to help for the ['breakindent']('breakindent') option",
+ "123": "A link to the [Links](*links*) section",
+ "124": "A link to the [Links](*links*) section",
+ "139": "A link to [the vim-tutor-mode tutorial](@tutor:tutor)",
+ "140": "A link to [the vim-tutor-mode tutorial](@tutor:tutor)",
+ "157": "~~~ viml",
+ "158": "echom 'the value of &number is'.string(&number)",
+ "159": "~~~",
+ "161": "~~~ viml",
+ "162": "echom 'the value of &number is'.string(&number)",
+ "163": "~~~",
+ "188": "~~~ normal",
+ "189": "d2w",
+ "190": "~~~",
+ "192": "~~~ normal",
+ "193": "d2w",
+ "194": "~~~",
+ "206": "`d2w`{normal}",
+ "207": "`d2w`{normal}",
+ "244": -1
+ }
+}
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index e5bb7f1b38..08b3d1dbd7 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -4239,11 +4239,17 @@ static int eval7(
// use its contents.
s = deref_func_name((const char *)s, &len, &partial, !evaluate);
+ // Need to make a copy, in case evaluating the arguments makes
+ // the name invalid.
+ s = xmemdupz(s, len);
+
// Invoke the function.
ret = get_func_tv(s, len, rettv, arg,
curwin->w_cursor.lnum, curwin->w_cursor.lnum,
&len, evaluate, partial, NULL);
+ xfree(s);
+
// If evaluate is false rettv->v_type was not set in
// get_func_tv, but it's needed in handle_subscript() to parse
// what follows. So set it here.
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 37b37e2859..40fae18aaf 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -7039,8 +7039,11 @@ dict_T *get_winbuf_options(const int bufopt)
if (opt->flags & P_STRING) {
tv_dict_add_str(d, opt->fullname, strlen(opt->fullname),
*(const char **)varp);
+ } else if (opt->flags & P_NUM) {
+ tv_dict_add_nr(d, opt->fullname, strlen(opt->fullname),
+ *(long *)varp);
} else {
- tv_dict_add_nr(d, opt->fullname, strlen(opt->fullname), *varp);
+ tv_dict_add_nr(d, opt->fullname, strlen(opt->fullname), *(int *)varp);
}
}
}
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index bd5dfa92cc..f17075f0c4 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -383,6 +383,8 @@ static int efm_to_regpat(char_u *efm, int len, efm_T *fmt_ptr,
return 0;
}
+static efm_T *fmt_start = NULL; // cached across qf_parse_line() calls
+
static void free_efm_list(efm_T **efm_first)
{
for (efm_T *efm_ptr = *efm_first; efm_ptr != NULL; efm_ptr = *efm_first) {
@@ -390,6 +392,8 @@ static void free_efm_list(efm_T **efm_first)
vim_regfree(efm_ptr->prog);
xfree(efm_ptr);
}
+
+ fmt_start = NULL;
}
// Parse 'errorformat' option
@@ -671,7 +675,6 @@ static int qf_parse_line(qf_info_T *qi, char_u *linebuf, size_t linelen,
efm_T *fmt_first, qffields_T *fields)
{
efm_T *fmt_ptr;
- static efm_T *fmt_start = NULL; // cached across calls
size_t len;
int i;
int idx = 0;
@@ -875,36 +878,38 @@ restofline:
qi->qf_multiignore = false; // reset continuation
} else if (vim_strchr((char_u *)"CZ", idx)
!= NULL) { // continuation of multi-line msg
- qfline_T *qfprev = qi->qf_lists[qi->qf_curlist].qf_last;
- if (qfprev == NULL) {
- return QF_FAIL;
- }
- if (*fields->errmsg && !qi->qf_multiignore) {
- size_t len = STRLEN(qfprev->qf_text);
- qfprev->qf_text = xrealloc(qfprev->qf_text,
- len + STRLEN(fields->errmsg) + 2);
- qfprev->qf_text[len] = '\n';
- STRCPY(qfprev->qf_text + len + 1, fields->errmsg);
- }
- if (qfprev->qf_nr == -1) {
- qfprev->qf_nr = fields->enr;
- }
- if (vim_isprintc(fields->type) && !qfprev->qf_type) {
- qfprev->qf_type = fields->type; // only printable chars allowed
- }
- if (!qfprev->qf_lnum) {
- qfprev->qf_lnum = fields->lnum;
- }
- if (!qfprev->qf_col) {
- qfprev->qf_col = fields->col;
- }
- qfprev->qf_viscol = fields->use_viscol;
- if (!qfprev->qf_fnum) {
- qfprev->qf_fnum = qf_get_fnum(qi, qi->qf_directory,
- *fields->namebuf || qi->qf_directory
- ? fields->namebuf
- : qi->qf_currfile && fields->valid
- ? qi->qf_currfile : 0);
+ if (!qi->qf_multiignore) {
+ qfline_T *qfprev = qi->qf_lists[qi->qf_curlist].qf_last;
+ if (qfprev == NULL) {
+ return QF_FAIL;
+ }
+ if (*fields->errmsg && !qi->qf_multiignore) {
+ size_t len = STRLEN(qfprev->qf_text);
+ qfprev->qf_text = xrealloc(qfprev->qf_text,
+ len + STRLEN(fields->errmsg) + 2);
+ qfprev->qf_text[len] = '\n';
+ STRCPY(qfprev->qf_text + len + 1, fields->errmsg);
+ }
+ if (qfprev->qf_nr == -1) {
+ qfprev->qf_nr = fields->enr;
+ }
+ if (vim_isprintc(fields->type) && !qfprev->qf_type) {
+ qfprev->qf_type = fields->type; // only printable chars allowed
+ }
+ if (!qfprev->qf_lnum) {
+ qfprev->qf_lnum = fields->lnum;
+ }
+ if (!qfprev->qf_col) {
+ qfprev->qf_col = fields->col;
+ }
+ qfprev->qf_viscol = fields->use_viscol;
+ if (!qfprev->qf_fnum) {
+ qfprev->qf_fnum = qf_get_fnum(qi, qi->qf_directory,
+ *fields->namebuf || qi->qf_directory
+ ? fields->namebuf
+ : qi->qf_currfile && fields->valid
+ ? qi->qf_currfile : 0);
+ }
}
if (idx == 'Z') {
qi->qf_multiline = qi->qf_multiignore = false;
@@ -967,6 +972,7 @@ qf_init_ext(
NULL, 0, 0 };
qffields_T fields = { NULL, NULL, 0, 0L, 0, false, NULL, 0, 0, 0 };
qfline_T *old_last = NULL;
+ bool adding = false;
static efm_T *fmt_first = NULL;
char_u *efm;
static char_u *last_efm = NULL;
@@ -992,6 +998,7 @@ qf_init_ext(
qf_new_list(qi, qf_title);
} else if (qi->qf_lists[qi->qf_curlist].qf_count > 0) {
// Adding to existing list, use last entry.
+ adding = true;
old_last = qi->qf_lists[qi->qf_curlist].qf_last;
}
@@ -1108,10 +1115,12 @@ qf_init_ext(
}
EMSG(_(e_readerrf));
error2:
- qf_free(qi, qi->qf_curlist);
- qi->qf_listcount--;
- if (qi->qf_curlist > 0) {
- qi->qf_curlist--;
+ if (!adding) {
+ qf_free(qi, qi->qf_curlist);
+ qi->qf_listcount--;
+ if (qi->qf_curlist > 0) {
+ qi->qf_curlist--;
+ }
}
qf_init_end:
if (state.fd != NULL) {
@@ -1408,7 +1417,7 @@ void copy_loclist(win_T *from, win_T *to)
to->w_llist->qf_curlist = qi->qf_curlist; /* current list */
}
-// Get buffer number for file "directory.fname".
+// Get buffer number for file "directory/fname".
// Also sets the b_has_qf_entry flag.
static int qf_get_fnum(qf_info_T *qi, char_u *directory, char_u *fname)
{
@@ -2362,7 +2371,9 @@ static void qf_free(qf_info_T *qi, int idx)
qi->qf_lists[idx].qf_index = 0;
qf_clean_dir_stack(&qi->qf_dir_stack);
+ qi->qf_directory = NULL;
qf_clean_dir_stack(&qi->qf_file_stack);
+ qi->qf_currfile = NULL;
}
/*
@@ -4025,9 +4036,12 @@ int get_errorlist_properties(win_T *wp, dict_T *what, dict_T *retdict)
if ((di = tv_dict_find(what, S_LEN("nr"))) != NULL) {
// Use the specified quickfix/location list
if (di->di_tv.v_type == VAR_NUMBER) {
- qf_idx = (int)di->di_tv.vval.v_number - 1;
- if (qf_idx < 0 || qf_idx >= qi->qf_listcount) {
- return FAIL;
+ // for zero use the current list
+ if (di->di_tv.vval.v_number != 0) {
+ qf_idx = (int)di->di_tv.vval.v_number - 1;
+ if (qf_idx < 0 || qf_idx >= qi->qf_listcount) {
+ return FAIL;
+ }
}
flags |= QF_GETLIST_NR;
} else {
diff --git a/src/nvim/testdir/test_bufwintabinfo.vim b/src/nvim/testdir/test_bufwintabinfo.vim
index 5c916e2dd7..1c9350c416 100644
--- a/src/nvim/testdir/test_bufwintabinfo.vim
+++ b/src/nvim/testdir/test_bufwintabinfo.vim
@@ -87,9 +87,17 @@ function Test_get_buf_options()
endfunc
function Test_get_win_options()
+ if has('folding')
+ set foldlevel=999
+ endif
+ set list
let opts = getwinvar(1, '&')
call assert_equal(v:t_dict, type(opts))
call assert_equal(0, opts.linebreak)
+ call assert_equal(1, opts.list)
+ if has('folding')
+ call assert_equal(999, opts.foldlevel)
+ endif
if has('signs')
call assert_equal('auto', opts.signcolumn)
endif
@@ -97,7 +105,12 @@ function Test_get_win_options()
let opts = gettabwinvar(1, 1, '&')
call assert_equal(v:t_dict, type(opts))
call assert_equal(0, opts.linebreak)
+ call assert_equal(1, opts.list)
if has('signs')
call assert_equal('auto', opts.signcolumn)
endif
+ set list&
+ if has('folding')
+ set foldlevel=0
+ endif
endfunc
diff --git a/src/nvim/testdir/test_expr.vim b/src/nvim/testdir/test_expr.vim
index 82c5d21bd0..710eae9b8b 100644
--- a/src/nvim/testdir/test_expr.vim
+++ b/src/nvim/testdir/test_expr.vim
@@ -418,6 +418,9 @@ func Test_function_with_funcref()
let s:fref = function(s:f)
call assert_equal(v:t_string, s:fref('x'))
call assert_fails("call function('s:f')", 'E700:')
+
+ call assert_fails("call function('foo()')", 'E475:')
+ call assert_fails("call function('foo()')", 'foo()')
endfunc
func Test_funcref()
diff --git a/src/nvim/testdir/test_nested_function.vim b/src/nvim/testdir/test_nested_function.vim
index f881730529..7e301ed33e 100644
--- a/src/nvim/testdir/test_nested_function.vim
+++ b/src/nvim/testdir/test_nested_function.vim
@@ -1,32 +1,42 @@
"Tests for nested functions
"
-function! NestedFunc()
- fu! Func1()
+func NestedFunc()
+ func! Func1()
let g:text .= 'Func1 '
- endfunction
+ endfunc
call Func1()
- fu! s:func2()
+ func! s:func2()
let g:text .= 's:func2 '
- endfunction
+ endfunc
call s:func2()
- fu! s:_func3()
+ func! s:_func3()
let g:text .= 's:_func3 '
- endfunction
+ endfunc
call s:_func3()
let fn = 'Func4'
- fu! {fn}()
+ func! {fn}()
let g:text .= 'Func4 '
- endfunction
+ endfunc
call {fn}()
let fn = 'func5'
- fu! s:{fn}()
+ func! s:{fn}()
let g:text .= 's:func5'
- endfunction
+ endfunc
call s:{fn}()
-endfunction
+endfunc
-function! Test_nested_functions()
+func Test_nested_functions()
let g:text = ''
call NestedFunc()
call assert_equal('Func1 s:func2 s:_func3 Func4 s:func5', g:text)
endfunction
+
+func Test_nested_argument()
+ func g:X()
+ let g:Y = function('sort')
+ endfunc
+ let g:Y = function('sort')
+ echo g:Y([], g:X())
+ delfunc g:X
+ unlet g:Y
+endfunc
diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim
index 75ab01f013..aff5fc2eed 100644
--- a/src/nvim/testdir/test_quickfix.vim
+++ b/src/nvim/testdir/test_quickfix.vim
@@ -6,7 +6,7 @@ endif
set encoding=utf-8
-function! s:setup_commands(cchar)
+func s:setup_commands(cchar)
if a:cchar == 'c'
command! -nargs=* -bang Xlist <mods>clist<bang> <args>
command! -nargs=* Xgetexpr <mods>cgetexpr <args>
@@ -68,10 +68,10 @@ function! s:setup_commands(cchar)
let g:Xgetlist = function('getloclist', [0])
let g:Xsetlist = function('setloclist', [0])
endif
-endfunction
+endfunc
" Tests for the :clist and :llist commands
-function XlistTests(cchar)
+func XlistTests(cchar)
call s:setup_commands(a:cchar)
" With an empty list, command should return error
@@ -128,17 +128,17 @@ function XlistTests(cchar)
let l = split(result, "\n")
call assert_equal([' 2 Xtestfile1:1 col 3: Line1',
\ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l)
-endfunction
+endfunc
-function Test_clist()
+func Test_clist()
call XlistTests('c')
call XlistTests('l')
-endfunction
+endfunc
" Tests for the :colder, :cnewer, :lolder and :lnewer commands
" Note that this test assumes that a quickfix/location list is
" already set by the caller.
-function XageTests(cchar)
+func XageTests(cchar)
call s:setup_commands(a:cchar)
" Jumping to a non existent list should return error
@@ -171,20 +171,20 @@ function XageTests(cchar)
Xnewer 2
let l = g:Xgetlist()
call assert_equal('Line3', l[0].text)
-endfunction
+endfunc
-function Test_cage()
+func Test_cage()
let list = [{'bufnr': 1, 'lnum': 1}]
call setqflist(list)
call XageTests('c')
call setloclist(0, list)
call XageTests('l')
-endfunction
+endfunc
" Tests for the :cwindow, :lwindow :cclose, :lclose, :copen and :lopen
" commands
-function XwindowTests(cchar)
+func XwindowTests(cchar)
call s:setup_commands(a:cchar)
" Create a list with no valid entries
@@ -227,16 +227,16 @@ function XwindowTests(cchar)
" Calling cwindow should close the quickfix window with no valid errors
Xwindow
call assert_true(winnr('$') == 1)
-endfunction
+endfunc
-function Test_cwindow()
+func Test_cwindow()
call XwindowTests('c')
call XwindowTests('l')
-endfunction
+endfunc
" Tests for the :cfile, :lfile, :caddfile, :laddfile, :cgetfile and :lgetfile
" commands.
-function XfileTests(cchar)
+func XfileTests(cchar)
call s:setup_commands(a:cchar)
call writefile(['Xtestfile1:700:10:Line 700',
@@ -275,16 +275,16 @@ function XfileTests(cchar)
\ l[1].lnum == 333 && l[1].col == 88 && l[1].text ==# 'Line 333')
call delete('Xqftestfile1')
-endfunction
+endfunc
-function Test_cfile()
+func Test_cfile()
call XfileTests('c')
call XfileTests('l')
-endfunction
+endfunc
" Tests for the :cbuffer, :lbuffer, :caddbuffer, :laddbuffer, :cgetbuffer and
" :lgetbuffer commands.
-function XbufferTests(cchar)
+func XbufferTests(cchar)
call s:setup_commands(a:cchar)
enew!
@@ -316,26 +316,26 @@ function XbufferTests(cchar)
\ l[3].lnum == 750 && l[3].col == 25 && l[3].text ==# 'Line 750')
enew!
-endfunction
+endfunc
-function Test_cbuffer()
+func Test_cbuffer()
call XbufferTests('c')
call XbufferTests('l')
-endfunction
+endfunc
-function XexprTests(cchar)
+func XexprTests(cchar)
call s:setup_commands(a:cchar)
call assert_fails('Xexpr 10', 'E777:')
-endfunction
+endfunc
-function Test_cexpr()
+func Test_cexpr()
call XexprTests('c')
call XexprTests('l')
-endfunction
+endfunc
" Tests for :cnext, :cprev, :cfirst, :clast commands
-function Xtest_browse(cchar)
+func Xtest_browse(cchar)
call s:setup_commands(a:cchar)
call s:create_test_file('Xqftestfile1')
@@ -366,14 +366,14 @@ function Xtest_browse(cchar)
call delete('Xqftestfile1')
call delete('Xqftestfile2')
-endfunction
+endfunc
-function Test_browse()
+func Test_browse()
call Xtest_browse('c')
call Xtest_browse('l')
-endfunction
+endfunc
-function! s:test_xhelpgrep(cchar)
+func s:test_xhelpgrep(cchar)
call s:setup_commands(a:cchar)
Xhelpgrep quickfix
Xopen
@@ -385,9 +385,9 @@ function! s:test_xhelpgrep(cchar)
call assert_true(w:quickfix_title =~ title_text, w:quickfix_title)
" This wipes out the buffer, make sure that doesn't cause trouble.
Xclose
-endfunction
+endfunc
-function Test_helpgrep()
+func Test_helpgrep()
call s:test_xhelpgrep('c')
helpclose
call s:test_xhelpgrep('l')
@@ -425,7 +425,7 @@ func Test_vimgreptitle()
augroup! QfBufWinEnter
endfunc
-function XqfTitleTests(cchar)
+func XqfTitleTests(cchar)
call s:setup_commands(a:cchar)
Xgetexpr ['file:1:1:message']
@@ -444,16 +444,16 @@ function XqfTitleTests(cchar)
endif
call assert_equal(title, w:quickfix_title)
Xclose
-endfunction
+endfunc
" Tests for quickfix window's title
-function Test_qf_title()
+func Test_qf_title()
call XqfTitleTests('c')
call XqfTitleTests('l')
-endfunction
+endfunc
" Tests for 'errorformat'
-function Test_efm()
+func Test_efm()
let save_efm = &efm
set efm=%EEEE%m,%WWWW%m,%+CCCC%.%#,%-GGGG%.%#
cgetexpr ['WWWW', 'EEEE', 'CCCC']
@@ -466,7 +466,7 @@ function Test_efm()
let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]')))
call assert_equal("[['W', 1], ['ZZZZ', 0], ['E^@CCCC', 1], ['YYYY', 0]]", l)
let &efm = save_efm
-endfunction
+endfunc
" This will test for problems in quickfix:
" A. incorrectly copying location lists which caused the location list to show
@@ -477,7 +477,7 @@ endfunction
" window it belongs to.
"
" Set up the test environment:
-function! ReadTestProtocol(name)
+func ReadTestProtocol(name)
let base = substitute(a:name, '\v^test://(.*)%(\.[^.]+)?', '\1', '')
let word = substitute(base, '\v(.*)\..*', '\1', '')
@@ -496,9 +496,9 @@ function! ReadTestProtocol(name)
setl nomodifiable
setl readonly
exe 'doautocmd BufRead ' . substitute(a:name, '\v^test://(.*)', '\1', '')
-endfunction
+endfunc
-function Test_locationlist()
+func Test_locationlist()
enew
augroup testgroup
@@ -578,15 +578,15 @@ function Test_locationlist()
wincmd n | only
augroup! testgroup
-endfunction
+ endfunc
-function Test_locationlist_curwin_was_closed()
+func Test_locationlist_curwin_was_closed()
augroup testgroup
au!
autocmd BufReadCmd test_curwin.txt call R(expand("<amatch>"))
augroup END
- function! R(n)
+ func! R(n)
quit
endfunc
@@ -597,9 +597,9 @@ function Test_locationlist_curwin_was_closed()
call assert_fails('lrewind', 'E924:')
augroup! testgroup
-endfunction
+ endfunc
-function Test_locationlist_cross_tab_jump()
+func Test_locationlist_cross_tab_jump()
call writefile(['loclistfoo'], 'loclistfoo')
call writefile(['loclistbar'], 'loclistbar')
set switchbuf=usetab
@@ -613,10 +613,10 @@ function Test_locationlist_cross_tab_jump()
set switchbuf&vim
call delete('loclistfoo')
call delete('loclistbar')
-endfunction
+endfunc
" More tests for 'errorformat'
-function! Test_efm1()
+func Test_efm1()
if !has('unix')
" The 'errorformat' setting is different on non-Unix systems.
" This test works only on Unix-like systems.
@@ -734,10 +734,10 @@ function! Test_efm1()
call delete('Xerrorfile1')
call delete('Xerrorfile2')
call delete('Xtestfile')
-endfunction
+ endfunc
" Test for quickfix directory stack support
-function! s:dir_stack_tests(cchar)
+func s:dir_stack_tests(cchar)
call s:setup_commands(a:cchar)
let save_efm=&efm
@@ -779,10 +779,10 @@ function! s:dir_stack_tests(cchar)
call assert_equal(5, qf[11].lnum)
let &efm=save_efm
-endfunction
+endfunc
" Tests for %D and %X errorformat options
-function! Test_efm_dirstack()
+func Test_efm_dirstack()
" Create the directory stack and files
call mkdir('dir1')
call mkdir('dir1/a')
@@ -814,10 +814,33 @@ function! Test_efm_dirstack()
call delete('dir1', 'rf')
call delete('dir2', 'rf')
call delete('habits1.txt')
-endfunction
+endfunc
+
+" Test for resync after continuing an ignored message
+func Xefm_ignore_continuations(cchar)
+ call s:setup_commands(a:cchar)
+
+ let save_efm = &efm
+
+ let &efm =
+ \ '%Eerror %m %l,' .
+ \ '%-Wignored %m %l,' .
+ \ '%+Cmore ignored %m %l,' .
+ \ '%Zignored end'
+ Xgetexpr ['ignored warning 1', 'more ignored continuation 2', 'ignored end', 'error resync 4']
+ let l = map(g:Xgetlist(), '[v:val.text, v:val.valid, v:val.lnum, v:val.type]')
+ call assert_equal([['resync', 1, 4, 'E']], l)
+
+ let &efm = save_efm
+endfunc
+
+func Test_efm_ignore_continuations()
+ call Xefm_ignore_continuations('c')
+ call Xefm_ignore_continuations('l')
+endfunc
" Tests for invalid error format specifies
-function Xinvalid_efm_Tests(cchar)
+func Xinvalid_efm_Tests(cchar)
call s:setup_commands(a:cchar)
let save_efm = &efm
@@ -850,17 +873,17 @@ function Xinvalid_efm_Tests(cchar)
call assert_fails('Xexpr ["Entering dir abc", "abc.txt:1:Hello world"]', 'E379:')
let &efm = save_efm
-endfunction
+endfunc
-function Test_invalid_efm()
+func Test_invalid_efm()
call Xinvalid_efm_Tests('c')
call Xinvalid_efm_Tests('l')
-endfunction
+endfunc
" TODO:
" Add tests for the following formats in 'errorformat'
" %r %O
-function! Test_efm2()
+func Test_efm2()
let save_efm = &efm
" Test for %s format in efm
@@ -946,19 +969,19 @@ function! Test_efm2()
call assert_equal('unittests/dbfacadeTest.py', bufname(l[4].bufnr))
let &efm = save_efm
-endfunction
+endfunc
-function XquickfixChangedByAutocmd(cchar)
+func XquickfixChangedByAutocmd(cchar)
call s:setup_commands(a:cchar)
if a:cchar == 'c'
let ErrorNr = 'E925'
- function! ReadFunc()
+ func! ReadFunc()
colder
cgetexpr []
endfunc
else
let ErrorNr = 'E926'
- function! ReadFunc()
+ func! ReadFunc()
lolder
lgetexpr []
endfunc
@@ -981,10 +1004,10 @@ function XquickfixChangedByAutocmd(cchar)
augroup! testgroup
endfunc
-function Test_quickfix_was_changed_by_autocmd()
+func Test_quickfix_was_changed_by_autocmd()
call XquickfixChangedByAutocmd('c')
call XquickfixChangedByAutocmd('l')
-endfunction
+endfunc
func Test_caddbuffer_to_empty()
helpgr quickfix
@@ -1006,7 +1029,7 @@ func Test_cgetexpr_works()
endfunc
" Tests for the setqflist() and setloclist() functions
-function SetXlistTests(cchar, bnum)
+func SetXlistTests(cchar, bnum)
call s:setup_commands(a:cchar)
call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 1},
@@ -1041,9 +1064,9 @@ function SetXlistTests(cchar, bnum)
call g:Xsetlist([])
let l = g:Xgetlist()
call assert_equal(0, len(l))
-endfunction
+endfunc
-function Test_setqflist()
+func Test_setqflist()
new Xtestfile | only
let bnum = bufnr('%')
call setline(1, range(1,5))
@@ -1053,9 +1076,9 @@ function Test_setqflist()
enew!
call delete('Xtestfile')
-endfunction
+endfunc
-function Xlist_empty_middle(cchar)
+func Xlist_empty_middle(cchar)
call s:setup_commands(a:cchar)
" create three quickfix lists
@@ -1078,12 +1101,12 @@ function Xlist_empty_middle(cchar)
call assert_equal(matchlen, len(g:Xgetlist()))
endfunc
-function Test_setqflist_empty_middle()
+func Test_setqflist_empty_middle()
call Xlist_empty_middle('c')
call Xlist_empty_middle('l')
-endfunction
+endfunc
-function Xlist_empty_older(cchar)
+func Xlist_empty_older(cchar)
call s:setup_commands(a:cchar)
" create three quickfix lists
@@ -1104,14 +1127,14 @@ function Xlist_empty_older(cchar)
call assert_equal(twolen, len(g:Xgetlist()))
Xnewer
call assert_equal(threelen, len(g:Xgetlist()))
-endfunction
+endfunc
-function Test_setqflist_empty_older()
+func Test_setqflist_empty_older()
call Xlist_empty_older('c')
call Xlist_empty_older('l')
-endfunction
+endfunc
-function! XquickfixSetListWithAct(cchar)
+func XquickfixSetListWithAct(cchar)
call s:setup_commands(a:cchar)
let list1 = [{'filename': 'fnameA', 'text': 'A'},
@@ -1185,12 +1208,12 @@ function! XquickfixSetListWithAct(cchar)
call assert_fails("call g:Xsetlist(list1, 0)", 'E928:')
endfunc
-function Test_quickfix_set_list_with_act()
+func Test_quickfix_set_list_with_act()
call XquickfixSetListWithAct('c')
call XquickfixSetListWithAct('l')
-endfunction
+endfunc
-function XLongLinesTests(cchar)
+func XLongLinesTests(cchar)
let l = g:Xgetlist()
call assert_equal(4, len(l))
@@ -1208,9 +1231,9 @@ function XLongLinesTests(cchar)
call assert_equal(10, len(l[3].text))
call g:Xsetlist([], 'r')
-endfunction
+endfunc
-function s:long_lines_tests(cchar)
+func s:long_lines_tests(cchar)
call s:setup_commands(a:cchar)
let testfile = 'samples/quickfix.txt'
@@ -1231,22 +1254,22 @@ function s:long_lines_tests(cchar)
exe 'edit' testfile
exe 'Xbuffer' bufnr('%')
call XLongLinesTests(a:cchar)
-endfunction
+endfunc
-function Test_long_lines()
+func Test_long_lines()
call s:long_lines_tests('c')
call s:long_lines_tests('l')
-endfunction
+endfunc
-function! s:create_test_file(filename)
+func s:create_test_file(filename)
let l = []
for i in range(1, 20)
call add(l, 'Line' . i)
endfor
call writefile(l, a:filename)
-endfunction
+endfunc
-function! Test_switchbuf()
+func Test_switchbuf()
call s:create_test_file('Xqftestfile1')
call s:create_test_file('Xqftestfile2')
call s:create_test_file('Xqftestfile3')
@@ -1333,9 +1356,9 @@ function! Test_switchbuf()
call delete('Xqftestfile1')
call delete('Xqftestfile2')
call delete('Xqftestfile3')
-endfunction
+endfunc
-function! Xadjust_qflnum(cchar)
+func Xadjust_qflnum(cchar)
call s:setup_commands(a:cchar)
enew | only
@@ -1360,17 +1383,17 @@ function! Xadjust_qflnum(cchar)
enew!
call delete(fname)
-endfunction
+endfunc
-function! Test_adjust_lnum()
+func Test_adjust_lnum()
call setloclist(0, [])
call Xadjust_qflnum('c')
call setqflist([])
call Xadjust_qflnum('l')
-endfunction
+endfunc
" Tests for the :grep/:lgrep and :grepadd/:lgrepadd commands
-function! s:test_xgrep(cchar)
+func s:test_xgrep(cchar)
call s:setup_commands(a:cchar)
" The following lines are used for the grep test. Don't remove.
@@ -1389,9 +1412,9 @@ function! s:test_xgrep(cchar)
set makeef=Temp_File_##
silent Xgrepadd GrepAdd_Test_Text: test_quickfix.vim
call assert_true(len(g:Xgetlist()) == 6)
-endfunction
+endfunc
-function! Test_grep()
+func Test_grep()
if !has('unix')
" The grepprg may not be set on non-Unix systems
return
@@ -1399,9 +1422,9 @@ function! Test_grep()
call s:test_xgrep('c')
call s:test_xgrep('l')
-endfunction
+endfunc
-function! Test_two_windows()
+func Test_two_windows()
" Use one 'errorformat' for two windows. Add an expression to each of them,
" make sure they each keep their own state.
set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f'
@@ -1427,12 +1450,10 @@ function! Test_two_windows()
laddexpr 'one.txt:3:one one one'
let loc_one = getloclist(one_id)
-echo string(loc_one)
call assert_equal('Xone/a/one.txt', bufname(loc_one[1].bufnr))
call assert_equal(3, loc_one[1].lnum)
let loc_two = getloclist(two_id)
-echo string(loc_two)
call assert_equal('Xtwo/a/two.txt', bufname(loc_two[1].bufnr))
call assert_equal(5, loc_two[1].lnum)
@@ -1444,7 +1465,7 @@ echo string(loc_two)
call delete('Xtwo', 'rf')
endfunc
-function XbottomTests(cchar)
+func XbottomTests(cchar)
call s:setup_commands(a:cchar)
call g:Xsetlist([{'filename': 'foo', 'lnum': 42}])
@@ -1460,12 +1481,12 @@ function XbottomTests(cchar)
endfunc
" Tests for the :cbottom and :lbottom commands
-function Test_cbottom()
+func Test_cbottom()
call XbottomTests('c')
call XbottomTests('l')
-endfunction
+endfunc
-function HistoryTest(cchar)
+func HistoryTest(cchar)
call s:setup_commands(a:cchar)
call assert_fails(a:cchar . 'older 99', 'E380:')
@@ -1505,7 +1526,7 @@ func Test_duplicate_buf()
endfunc
" Quickfix/Location list set/get properties tests
-function Xproperty_tests(cchar)
+func Xproperty_tests(cchar)
call s:setup_commands(a:cchar)
" Error cases
@@ -1532,6 +1553,11 @@ function Xproperty_tests(cchar)
call assert_equal('N1', g:Xgetlist({'all':1}).title)
call g:Xsetlist([], ' ', {'title' : 'N2'})
call assert_equal(qfnr + 1, g:Xgetlist({'all':1}).nr)
+
+ let res = g:Xgetlist({'nr': 0})
+ call assert_equal(qfnr + 1, res.nr)
+ call assert_equal(['nr'], keys(res))
+
call g:Xsetlist([], ' ', {'title' : 'N3'})
call assert_equal('N2', g:Xgetlist({'nr':2, 'title':1}).title)
@@ -1544,21 +1570,21 @@ function Xproperty_tests(cchar)
call assert_equal({}, g:Xgetlist({'abc':1}))
if a:cchar == 'l'
- call assert_equal({}, getloclist(99, ['title']))
+ call assert_equal({}, getloclist(99, {'title': 1}))
endif
-endfunction
+ endfunc
-function Test_qf_property()
+func Test_qf_property()
call Xproperty_tests('c')
call Xproperty_tests('l')
-endfunction
+ endfunc
" Tests for the QuickFixCmdPre/QuickFixCmdPost autocommands
-function QfAutoCmdHandler(loc, cmd)
+func QfAutoCmdHandler(loc, cmd)
call add(g:acmds, a:loc . a:cmd)
-endfunction
+endfunc
-function Test_Autocmd()
+func Test_Autocmd()
autocmd QuickFixCmdPre * call QfAutoCmdHandler('pre', expand('<amatch>'))
autocmd QuickFixCmdPost * call QfAutoCmdHandler('post', expand('<amatch>'))
@@ -1586,9 +1612,9 @@ function Test_Autocmd()
\ 'precaddbuffer',
\ 'postcaddbuffer']
call assert_equal(l, g:acmds)
-endfunction
+endfunc
-function! Test_Autocmd_Exception()
+func Test_Autocmd_Exception()
set efm=%m
lgetexpr '?'
@@ -1603,4 +1629,47 @@ function! Test_Autocmd_Exception()
call assert_equal('1', getloclist(0)[0].text)
set efm&vim
-endfunction
+endfunc
+
+func Test_caddbuffer_wrong()
+ " This used to cause a memory access in freed memory.
+ let save_efm = &efm
+ set efm=%EEEE%m,%WWWW,%+CCCC%>%#,%GGGG%.#
+ cgetexpr ['WWWW', 'EEEE', 'CCCC']
+ let &efm = save_efm
+ caddbuffer
+ bwipe!
+endfunc
+
+func Test_caddexpr_wrong()
+ " This used to cause a memory access in freed memory.
+ cbuffer
+ cbuffer
+ copen
+ let save_efm = &efm
+ set efm=%
+ call assert_fails('caddexpr ""', 'E376:')
+ let &efm = save_efm
+endfunc
+
+func Test_dirstack_cleanup()
+ " This used to cause a memory access in freed memory.
+ let save_efm = &efm
+ lexpr '0'
+ lopen
+ fun X(c)
+ let save_efm=&efm
+ set efm=%D%f
+ if a:c == 'c'
+ caddexpr '::'
+ else
+ laddexpr ':0:0'
+ endif
+ let &efm=save_efm
+ endfun
+ call X('c')
+ call X('l')
+ call setqflist([], 'r')
+ caddbuffer
+ let &efm = save_efm
+endfunc
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 9d57da4caa..9b5c5eefb8 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -77,2370 +77,654 @@ static char *features[] = {
// clang-format off
static const int included_patches[] = {
- // 2367 NA
- // 2366 NA
- // 2365 NA
- // 2364 NA
- // 2363 NA
- 2362,
- // 2361 NA
- 2360,
- 2359,
- // 2358 NA
- 2357,
- 2356,
- 2355,
- // 2354,
- 2353,
- // 2352 NA
- // 2351 NA
- // 2350,
- 2349,
- 2348,
- 2347,
- 2346,
- // 2345 NA
- // 2344 NA
- 2343,
- // 2342 NA
- 2341,
- // 2340 NA
- 2339,
- // 2338 NA
- 2337,
- 2336,
- 2335,
- 2334,
- 2333,
- 2332,
- 2331,
- 2330,
- 2329,
- 2328,
- // 2327 NA
- 2326,
- // 2325 NA
- 2324,
- 2323,
- 2322,
- 2321,
- 2320,
- // 2319 NA
- 2318,
- 2317,
- // 2316 NA
- 2315,
- 2314,
- 2313,
- 2312,
- // 2311 NA
- // 2310 NA
- 2309,
- // 2308 NA
- 2307,
- 2306,
- 2305,
- 2304,
- 2303,
- // 2302 NA
- // 2301 NA
- 2300,
- 2299,
- // 2298 NA
- // 2297 NA
- 2296,
- 2295,
- 2294,
- 2293,
- 2292,
- 2291,
- // 2290 NA
- // 2289 NA
- // 2288 NA
- // 2287 NA
- // 2286 NA
- // 2285 NA
- 2284,
- 2283,
- // 2282 NA
- 2281,
- 2280,
- 2279,
- // 2278 NA
- 2277,
- 2276,
- 2275,
- 2274,
- 2273,
- 2272,
- // 2271 NA
- // 2270 NA
- 2269,
- 2268,
- // 2267 NA
- 2266,
- 2265,
- 2264,
- 2263,
- // 2262 NA
- // 2261 NA
- // 2260 NA
- 2259,
- // 2258 NA
- // 2257 NA
- 2256,
- 2255,
- // 2254 NA
- // 2253 NA
- // 2252 NA
- 2251,
- // 2250,
- 2249,
- 2248,
- // 2247 NA
- 2246,
- 2245,
- 2244,
- // 2243 NA
- 2242,
- 2241,
- 2240,
- 2239,
- // 2238 NA
- 2237,
- 2236,
- 2235,
- // 2234 NA
- 2233,
- // 2232 NA
- 2231,
- 2230,
- // 2229,
- 2228,
- 2227,
- 2226,
- 2225,
- 2224,
- 2223,
- 2222,
- 2221,
- 2220,
- 2219,
- // 2218 NA
- 2217,
- // 2216 NA
- 2215,
- // 2214 NA
- 2213,
- 2212,
- // 2211 NA
- // 2210 NA
- 2209,
- 2208,
- // 2207 NA
- // 2206 NA
- 2205,
- 2204,
- // 2203 NA
- // 2202 NA
- 2201,
- 2200,
- // 2199 NA
- // 2198 NA
- 2197,
- 2196,
- // 2195 NA
- 2194,
- // 2193 NA
- // 2192 NA
- // 2191 NA
- 2190,
- // 2189,
- 2188,
- 2187,
- // 2186 NA
- 2185,
- 2184,
- 2183,
- // 2182 NA
- // 2181 NA
- 2180,
- 2179,
- 2178,
- 2177,
- // 2176 NA
- 2175,
- 2174,
- 2173,
- 2172,
- // 2171 NA
- 2170,
- 2169,
- // 2168 NA
- // 2167 NA
- // 2166 NA
- 2165,
- 2164,
- 2163,
- 2162,
- 2161,
- 2160,
- 2159,
- 2158,
- // 2157 NA
- // 2156 NA
- // 2155 NA
- // 2154 NA
- // 2153 NA
- 2152,
- 2151,
- // 2150 NA
- 2149,
- 2148,
- 2147,
- 2146,
- // 2145 NA
- 2144,
- 2143,
- 2142,
- 2141,
- // 2140 NA
- 2139,
- // 2138 NA
- 2137,
- 2136,
- 2135,
- 2134,
- // 2133 NA
- // 2132 NA
- // 2131 NA
- // 2130 NA
- // 2129 NA
- 2128,
- 2127,
- 2126,
- // 2125 NA
- 2124,
- 2123,
- // 2122 NA
- 2121,
- 2120,
- 2119,
- // 2118 NA
- 2117,
- // 2116 NA
- // 2115 NA
- // 2114 NA
- 2113,
- 2112,
- // 2111 NA
- 2110,
- 2109,
- // 2108 NA
- 2107,
- 2106,
- // 2105 NA
- 2104,
- 2103,
- // 2102 NA
- 2101,
- 2100,
- 2099,
- 2098,
- 2097,
- 2096,
- 2095,
- // 2094 NA
- // 2093 NA
- // 2092 NA
- // 2091 NA
- 2090,
- // 2089 NA
- 2088,
- 2087,
- 2086,
- 2085,
- 2084,
- // 2083 NA
- 2082,
- 2081,
- // 2080 NA
- // 2079 NA
- // 2078 NA
- 2077,
- 2076,
- 2075,
- 2074,
- // 2073 NA
- 2072,
- 2071,
- // 2070 NA
- 2069,
- 2068,
- 2067,
- 2066,
- 2065,
- 2064,
- // 2063 NA
- 2062,
- 2061,
- // 2060 NA
- // 2059 NA
- // 2058 NA
- // 2057 NA
- // 2056 NA
- // 2055 NA
- // 2054 NA
- // 2053 NA
- // 2052 NA
- 2051,
- 2050,
- 2049,
- // 2048 NA
- 2047,
- 2046,
- // 2045 NA
- 2044,
- 2043,
- // 2042 NA
- // 2041 NA
- // 2040 NA
- // 2039 NA
- // 2038 NA
- // 2037 NA
- 2036,
- // 2035 NA
- // 2034 NA
- 2033,
- // 2032 NA
- 2031,
- // 2030 NA
- 2029,
- 2028,
- // 2027 NA
- // 2026 NA
- // 2025 NA
- 2024,
- 2023,
- 2022,
- 2021,
- // 2020 NA
- 2019,
- 2018,
- 2017,
- // 2016 NA
- 2015,
- 2014,
- 2013,
- 2012,
- 2011,
- 2010,
- 2009,
- 2008,
- 2007,
- 2006,
- 2005,
- // 2004 NA
- // 2003 NA
- 2002,
- // 2001 NA
- 2000,
- 1999,
- // 1998 NA
- 1997,
- 1996,
- // 1995 NA
- 1994,
- 1993,
- 1992,
- 1991,
- 1990,
- 1989,
- // 1988 NA
- // 1987 NA
- 1986,
- // 1985 NA
- 1984,
- // 1983 NA
- // 1982 NA
- 1981,
- 1980,
- 1979,
- 1978,
- 1977,
- 1976,
- 1975,
- // 1974 NA
- 1973,
- // 1972 NA
- 1971,
- 1970,
- // 1969 NA
- 1968,
- 1967,
- 1966,
- // 1965 NA
- 1964,
- // 1963 NA
- 1962,
- 1961,
- 1960,
- // 1959 NA
- // 1958 NA
- // 1957 NA
- 1956,
- // 1955 NA
- 1954,
- 1953,
- 1952,
- // 1951 NA
- 1950,
- 1949,
- 1948,
- // 1947 NA
- // 1946 NA
- // 1945 NA
- // 1944 NA
- // 1943 NA
- // 1942 NA
- 1941,
- 1940,
- // 1939 NA
- // 1938 NA
- 1937,
- // 1936 NA
- // 1935 NA
- // 1934 NA
- // 1933 NA
- // 1932 NA
- // 1931 NA
- // 1930 NA
- // 1929 NA
- 1928,
- // 1927 NA
- // 1926 NA
- 1925,
- // 1924 NA
- 1923,
- // 1922 NA
- // 1921 NA
- // 1920 NA
- // 1919 NA
- // 1918 NA
- // 1917 NA
- // 1916 NA
- // 1915 NA
- // 1914 NA
- 1913,
- 1912,
- // 1911 NA
- 1910,
- 1909,
- // 1908 NA
- // 1907 NA
- // 1906 NA
- // 1905 NA
- // 1904 NA
- // 1903 NA
- // 1902 NA
- // 1901 NA
- 1900,
- // 1899 NA
- 1898,
- 1897,
- 1896,
- 1895,
- 1894,
- 1893,
- 1892,
- // 1891 NA
- // 1890 NA
- 1889,
- // 1888 NA
- // 1887 NA
- // 1886 NA
- // 1885 NA
- 1884,
- // 1883 NA
- 1882,
- 1881,
- // 1880 NA
- // 1879 NA
- // 1878 NA
- // 1877 NA
- 1876,
- 1875,
- // 1874 NA
- // 1873 NA
- // 1872 NA
- 1871,
- // 1870 NA
- // 1869 NA
- 1868,
- 1867,
- 1866,
- // 1865 NA
- // 1864 NA
- // 1863 NA
- // 1862 NA
- 1861,
- 1860,
- // 1859 NA
- // 1858 NA
- // 1857 NA
- // 1856 NA
- // 1855 NA
- // 1854 NA
- // 1853 NA
- // 1852 NA
- 1851,
- // 1850 NA
- // 1849 NA
- // 1848 NA
- 1847,
- // 1846 NA
- // 1845 NA
- // 1844 NA
- // 1843 NA
- 1842,
- 1841,
- 1840,
- 1839,
- 1838,
- 1837,
- 1836,
- 1835,
- 1834,
- 1833,
- 1832,
- 1831,
- // 1830 NA
- // 1829 NA
- // 1828 NA
- // 1827 NA
- // 1826 NA
- // 1825 NA
- // 1824 NA
- 1823,
- // 1822 NA
- 1821,
- 1820,
- // 1819 NA
- 1818,
- // 1817 NA
- 1816,
- 1815,
- // 1814 NA
- 1813,
- // 1812 NA
- // 1811 NA
- // 1810 NA
- 1809,
- 1808,
- // 1807 NA
- 1806,
- // 1805 NA
- // 1804 NA
- // 1803 NA
- 1802,
- // 1801 NA
- // 1800 NA
- 1799,
- // 1798 NA
- // 1797 NA
- // 1796 NA
- // 1795 NA
- // 1794 NA
- 1793,
- // 1792 NA
- // 1791 NA
- // 1790 NA
- // 1789 NA
- // 1789 NA
- // 1788 NA
- // 1787 NA
- // 1786 NA
- 1785,
- // 1784 NA
- 1783,
- 1782,
- 1781,
- 1780,
- 1779,
- // 1778 NA
- // 1777 NA
- // 1776 NA
- // 1775 NA
- // 1774 NA
- // 1773 NA
- // 1772 NA
- // 1771 NA
- // 1770 NA
- // 1769 NA
- 1768,
- // 1767 NA
- // 1766 NA
- 1765,
- // 1764 NA
- 1763,
- // 1762 NA
- // 1761 NA
- // 1760 NA
- 1759,
- 1758,
- 1757,
- // 1756 NA
- 1755,
- 1754,
- 1753,
- 1752,
- 1751,
- // 1750 NA
- // 1749 NA
- 1748,
- // 1747 NA
- // 1746 NA
- // 1745 NA
- // 1744 NA
- // 1743 NA
- 1742,
- 1741,
- 1740,
- 1739,
- 1738,
- // 1737 NA
- // 1736 NA
- 1735,
- 1734,
- // 1733 NA
- 1732,
- // 1731 NA
- 1730,
- // 1729 NA
- 1728,
- 1727,
- // 1726 NA
- // 1725 NA
- // 1724 NA
- 1723,
- // 1722 NA
- // 1721 NA
- // 1720 NA
- 1719,
- 1718,
- // 1717 NA
- 1716,
- 1715,
- 1714,
- // 1713 NA
- 1712,
- 1711,
- // 1710 NA
- // 1709 NA
- 1708,
- 1707,
- // 1706 NA
- // 1705 NA
- 1704,
- 1703,
- 1702,
- 1701,
- 1700,
- 1699,
- // 1698 NA
- 1697,
- 1696,
- 1695,
- // 1694 NA
- // 1693 NA
- 1692,
- 1691,
- // 1690 NA
- // 1689 NA
- // 1688 NA
- // 1687 NA
- 1686,
- 1685,
- // 1684 NA
- // 1683 NA
- 1682,
- 1681,
- // 1680 NA
- 1679,
- // 1678 NA
- // 1677 NA
- 1676,
- 1675,
- // 1674 NA
- 1673,
- // 1672 NA
- 1671,
- 1670,
- // 1669 NA
- // 1668 NA
- // 1667 NA
- // 1666 NA
- // 1665 NA
- 1664,
- 1663,
- // 1662 NA
- // 1661 NA
- 1660,
- // 1659 NA
- 1658,
- // 1657 NA
- 1656,
- // 1655 NA
- 1654,
- // 1653 NA
- 1652,
- // 1651 NA
- 1650,
- 1649,
- 1648,
- 1647,
- // 1646 NA
- 1645,
- // 1644 NA
- 1643,
- 1642,
- 1641,
- 1640,
- 1639,
- 1638,
- // 1637 NA
- // 1636 NA
- // 1635 NA
- 1634,
- // 1633 NA
- // 1632 NA
- // 1631 NA
- 1630,
- 1629,
- // 1628 NA
- // 1627 NA
- // 1626 NA
- // 1625 NA
- // 1624 NA
- // 1623 NA
- // 1622 NA
- // 1621 NA
- 1620,
- 1619,
- // 1618 NA
- // 1617 NA
- // 1616 NA
- // 1615 NA
- 1614,
- // 1613 NA
- // 1612 NA
- // 1611 NA
- // 1610 NA
- // 1609 NA
- 1608,
- 1607,
- 1606,
- 1605,
- 1604,
- 1603,
- // 1602 NA
- // 1601 NA
- // 1600 NA
- // 1599 NA
- // 1598 NA
- // 1597 NA
- 1596,
- // 1595 NA
- // 1594 NA
- // 1593 NA
- 1592,
- 1591,
- 1590,
- 1589,
- 1588,
- // 1587 NA
- 1586,
- 1585,
- // 1584 NA
- // 1583 NA
- 1582,
- 1581,
- 1580,
- // 1579 NA
- 1578,
- 1577,
- 1576,
- // 1575 NA
- 1574,
- // 1573 NA
- // 1572 NA
- 1571,
- 1570,
- 1569,
- 1568,
- 1567,
- // 1566 NA
- 1565,
- 1564,
- 1563,
- // 1562 NA
- // 1561 NA
- // 1560 NA
- 1559,
- 1558,
- 1557,
- // 1556 NA
- // 1555 NA
- 1554,
- 1553,
- 1552,
- 1551,
- 1550,
- 1549,
- 1548,
- 1547,
- 1546,
- // 1545 NA
- // 1544 NA
- // 1543 NA
- // 1542 NA
- // 1541 NA
- // 1540 NA
- // 1539 NA
- // 1538 NA
- // 1537 NA
- // 1536 NA
- 1535,
- // 1534 NA
- 1533,
- // 1532 NA
- // 1531 NA
- // 1530 NA
- // 1529 NA
- 1528,
- // 1527 NA
- // 1526 NA
- // 1525 NA
- // 1524 NA
- // 1523 NA
- // 1522 NA
- 1521,
- // 1520 NA
- // 1519 NA
- // 1518 NA
- // 1517 NA
- 1516,
- // 1515 NA
- // 1514 NA
- 1513,
- // 1512 NA
- 1511,
- // 1510 NA
- // 1509 NA
- // 1508 NA
- // 1507 NA
- // 1506 NA
- // 1505 NA
- // 1504 NA
- // 1503 NA
- // 1502 NA
- // 1501 NA
- 1500,
- 1499,
- // 1498 NA
- // 1497 NA
- // 1496 NA
- // 1495 NA
- 1494,
- // 1493 NA
- 1492,
- 1491,
- // 1490 NA
- // 1489 NA
- // 1488 NA
- // 1487 NA
- 1486,
- // 1485 NA
- // 1484 NA
- // 1483 NA
- // 1482 NA
- // 1481 NA
- 1480,
- 1479,
- 1478,
- 1477,
- // 1476 NA
- // 1475 NA
- // 1474 NA
- // 1473 NA
- // 1472 NA
- // 1471 NA
- // 1470 NA
- // 1469 NA
- 1468,
- // 1467 NA
- // 1466 NA
- // 1465 NA
- 1464,
- // 1463 NA
- // 1462 NA
- // 1461 NA
- // 1460 NA
- // 1459 NA
- // 1458 NA
- // 1457 NA
- // 1456 NA
- // 1455 NA
- // 1454 NA
- // 1453 NA
- // 1452 NA
- // 1451 NA
- // 1450 NA
- // 1449 NA
- // 1448 NA
- // 1447 NA
- // 1446 NA
- // 1445 NA
- // 1444 NA
- // 1443 NA
- // 1442 NA
- // 1441 NA
- // 1440 NA
- // 1439 NA
- // 1438 NA
- // 1437 NA
- // 1436 NA
- // 1435 NA
- // 1434 NA
- // 1433 NA
- // 1432 NA
- // 1431 NA
- // 1430 NA
- // 1429 NA
- // 1428 NA
- // 1427 NA
- // 1426 NA
- 1425,
- // 1424 NA
- // 1423 NA
- // 1422 NA
- // 1421 NA
- // 1420 NA
- // 1419 NA
- // 1418 NA
- // 1417 NA
- // 1416 NA
- // 1415 NA
- // 1414 NA
- // 1413 NA
- // 1412 NA
- // 1411 NA
- 1410,
- // 1409 NA
- // 1408 NA
- // 1407 NA
- 1406,
- 1405,
- // 1404 NA
- // 1403 NA
- // 1402 NA
- 1401,
- // 1400 NA
- // 1399 NA
- // 1398 NA
- 1397,
- 1396,
- // 1395 NA
- 1394,
- // 1393 NA
- // 1392 NA
- // 1391 NA
- // 1390 NA
- // 1389 NA
- 1388,
- // 1387 NA
- // 1386 NA
- // 1385 NA
- 1384,
- // 1383 NA
- // 1382 NA
- // 1381 NA
- // 1380 NA
- // 1379 NA
- // 1378 NA
- // 1377 NA
- // 1376 NA
- // 1375 NA
- // 1374 NA
- // 1373 NA
- // 1372 NA
- // 1371 NA
- // 1370 NA
- // 1369 NA
- // 1368 NA
- // 1367 NA
- 1366,
- 1365,
- // 1364 NA
- // 1363 NA
- // 1362 NA
- // 1361 NA
- // 1360 NA
- // 1359 NA
- // 1358 NA
- // 1357 NA
- // 1356 NA
- // 1355 NA
- // 1354 NA
- // 1353 NA
- 1352,
- // 1351 NA
- // 1350 NA
- // 1349 NA
- // 1348 NA
- 1347,
- 1346,
- // 1345 NA
- // 1344 NA
- // 1343 NA
- // 1342 NA
- // 1341 NA
- // 1340 NA
- // 1339 NA
- // 1338 NA
- // 1337 NA
- // 1336 NA
- // 1335 NA
- // 1334 NA
- // 1333 NA
- // 1332 NA
- // 1331 NA
- // 1330 NA
- // 1329 NA
- // 1328 NA
- // 1327 NA
- // 1326 NA
- // 1325 NA
- // 1324 NA
- // 1323 NA
- // 1322 NA
- // 1321 NA
- // 1320 NA
- // 1319 NA
- // 1318 NA
- // 1317 NA
- // 1316 NA
- // 1315 NA
- // 1314 NA
- // 1313 NA
- // 1312 NA
- // 1311 NA
- // 1310 NA
- 1309,
- // 1308 NA
- // 1307 NA
- // 1306 NA
- 1305,
- 1304,
- // 1303 NA
- // 1302 NA
- // 1301 NA
- // 1300 NA
- // 1299 NA
- // 1298 NA
- // 1297 NA
- 1296,
- // 1295 NA
- // 1294 NA
- // 1293 NA
- 1292,
- // 1291 NA
- // 1290 NA
- // 1289 NA
- // 1288 NA
- // 1287 NA
- // 1286 NA
- 1285,
- 1284,
- // 1283 NA
- 1282,
- 1281,
- // 1280 NA
- // 1279 NA
- // 1278 NA
- // 1277 NA
- 1276,
- // 1275 NA
- // 1274 NA
- // 1273 NA
- // 1272 NA
- 1271,
- // 1270 NA
- 1269,
- // 1268 NA
- 1267,
- 1266,
- // 1265 NA
- // 1264 NA
- // 1263 NA
- // 1262 NA
- // 1261 NA
- // 1260 NA
- 1259,
- // 1258 NA
- // 1257 NA
- // 1256 NA
- // 1255 NA
- // 1254 NA
- // 1253 NA
- // 1252 NA
- // 1251 NA
- // 1250 NA
- // 1249 NA
- // 1248 NA
- // 1247 NA
- // 1246 NA
- // 1245 NA
- // 1244 NA
- // 1243 NA
- // 1242 NA
- // 1241 NA
- // 1240 NA
- // 1239 NA
- // 1238 NA
- 1237,
- 1236,
- // 1235 NA
- // 1234 NA
- // 1233 NA
- // 1232 NA
- // 1231 NA
- // 1230 NA
- // 1229 NA
- 1228,
- // 1227 NA
- // 1226 NA
- // 1225 NA
- // 1224 NA
- 1223,
- // 1222 NA
- // 1221 NA
- // 1220 NA
- // 1219 NA
- // 1218 NA
- // 1217 NA
- // 1216 NA
- // 1215 NA
- // 1214 NA
- // 1213 NA
- // 1212 NA
- // 1211 NA
- // 1210 NA
- // 1209 NA
- // 1208 NA
- // 1207 NA
- // 1206 NA
- // 1205 NA
- // 1204 NA
- // 1203 NA
- // 1202 NA
- // 1201 NA
- // 1200 NA
- // 1199 NA
- // 1198 NA
- // 1197 NA
- // 1196 NA
- // 1195 NA
- // 1194 NA
- // 1193 NA
- // 1192 NA
- // 1191 NA
- // 1190 NA
- // 1189 NA
- // 1188 NA
- // 1187 NA
- // 1186 NA
- // 1185 NA
- // 1184 NA
- // 1183 NA
- // 1182 NA
- 1181,
- 1180,
- 1179,
- 1178,
- // 1177 NA
- // 1176 NA
- // 1175 NA
- // 1174 NA
- 1173,
- // 1172 NA
- // 1171 NA
- // 1170 NA
- // 1169 NA
- 1168,
- 1167,
- 1166,
- // 1165 NA
- 1164,
- 1163,
- // 1162 NA
- 1161,
- 1160,
- // 1159 NA
- // 1158 NA
- 1157,
- // 1156 NA
- // 1155 NA
- // 1154 NA
- 1153,
- // 1152 NA
- 1151,
- 1150,
- 1149,
- // 1148 NA
- 1147,
- // 1146 NA
- // 1145 NA
- 1144,
- 1143,
- 1142,
- 1141,
- 1140,
- // 1139 NA
- // 1138 NA
- 1137,
- 1136,
- // 1135 NA
- // 1134 NA
- // 1133 NA
- 1132,
- // 1131 NA
- // 1130 NA
- // 1129 NA
- // 1128 NA
- // 1127 NA
- 1126,
- // 1125 NA
- // 1124 NA
- 1123,
- // 1122 NA
- 1121,
- 1120,
- 1119,
- 1118,
- 1117,
- 1116,
- // 1115 NA
- 1114,
- 1113,
- 1112,
- 1111,
- 1110,
- // 1109 NA
- 1108,
- 1107,
- // 1106 NA
- 1105,
- // 1104 NA
- // 1103 NA
- 1102,
- 1101,
- // 1100 NA
- // 1099 NA
- // 1098 NA
- // 1097 NA
- 1096,
- // 1095 NA
- 1094,
- 1093,
- 1092,
- 1091,
- 1090,
- 1089,
- 1088,
- 1087,
- 1086,
- 1085,
- 1084,
- // 1083 NA
- // 1082 NA
- 1081,
- // 1080 NA
- // 1079 NA
- // 1078 NA
- // 1077 NA
- 1076,
- 1075,
- // 1074 NA
- // 1073 NA
- 1072,
- 1071,
- // 1070 NA
- // 1069 NA
- 1068,
- // 1067 NA
- // 1066 NA
- 1065,
- 1064,
- // 1063 NA
- // 1062 NA
- 1061,
- // 1060 NA
- 1059,
- // 1058 NA
- 1057,
- 1056,
- 1055,
- 1054,
- 1053,
- 1052,
- 1051,
- 1050,
- 1049,
- 1048,
- 1047,
- 1046,
- // 1045 NA
- // 1044 NA
- // 1043 NA
- 1042,
- 1041,
- // 1040 NA
- // 1039 NA
- // 1038 NA
- 1037,
- 1036,
- 1035,
- 1034,
- // 1033 NA
- 1032,
- // 1031 NA
- 1030,
- 1029,
- // 1028 NA
- 1027,
- // 1026 NA
- // 1025 NA
- // 1024 NA
- // 1023 NA
- // 1022 NA
- // 1021 NA
- // 1020 NA
- // 1019 NA
- 1018,
- 1017,
- // 1016 NA
- 1015,
- // 1014 NA
- 1013,
- // 1012 NA
- // 1011 NA
- // 1010 NA
- // 1009 NA
- // 1008 NA
- 1007,
- 1006,
- // 1005 NA
- // 1004 NA
- // 1003 NA
- // 1002 NA
- 1001,
- 1000,
- // 999 NA
- 998,
- // 997 NA
- // 996 NA
- // 995 NA
- // 994 NA
- // 993 NA
- // 992 NA
- 991,
- // 990 NA
- 989,
- // 988 NA
- // 987 NA
- // 986 NA
- // 985 NA
- 984,
- // 983 NA
- // 982 NA
- 981,
- 980,
- // 979 NA
- 978,
- 977,
- // 976 NA
- 975,
- 974,
- 973,
- 972,
- // 971 NA
- // 970 NA
- // 969 NA
- // 968 NA
- // 967 NA
- // 966 NA
- // 965 NA
- // 964 NA
- 963,
- // 962 NA
- 961,
- // 960 NA
- // 959 NA
- 958,
- 957,
- // 956 NA
- 955,
- // 954 NA
- 953,
- 952,
- 951,
- 950,
- 949,
- // 948 NA
- // 947 NA
- 946,
- 945,
- 944,
- // 943 NA
- 942,
- 941,
- // 940 NA
- 939,
- // 938 NA
- 937,
- 936,
- // 935 NA
- // 934 NA
- 933,
- 932,
- // 931 NA
- // 930 NA
- 929,
- // 928 NA
- // 927 NA
- 926,
- 925,
- // 924 NA
- // 923 NA
- 922,
- // 921 NA
- // 920 NA
- // 919 NA
- // 918 NA
- // 917 NA
- 916,
- 915,
- // 914 NA
- // 913 NA
- 912,
- // 911 NA
- // 910 NA
- // 909 NA
- // 908 NA
- // 907 NA
- // 906 NA
- // 905 NA
- 904,
- 903,
- // 902 NA
- 901,
- // 900 NA
- // 899 NA
- 898,
- // 897 NA
- 896,
- 895,
- // 894 NA
- 893,
- // 892 NA
- 891,
- // 890 NA
- 889,
- 888,
- 887,
- // 886 NA
- 885,
- // 884 NA
- 883,
- 882,
- 881,
- // 880 NA
- 879,
- 878,
- 877,
- // 876 NA
- // 875 NA
- // 874 NA
- // 873 NA
- // 872 NA
- 871,
- 870,
- // 869 NA
- 868,
- // 867 NA
- // 866 NA
- // 865 NA
- // 864 NA
- // 863 NA
- // 862 NA
- // 861 NA
- // 860 NA
- 859,
- 858,
- 857,
- 856,
- // 855 NA
- // 854 NA
- 853,
- // 852 NA
- // 851 NA
- // 850 NA
- 849,
- 848,
- 847,
- // 846 NA
- 845,
- 844,
- 843,
- // 842 NA
- // 841 NA
- // 840 NA
- // 839 NA
- // 838 NA
- // 837 NA
- 836,
- 835,
- 834,
- 833,
- 832,
- 831,
- 830,
- // 829 NA
- 828,
- // 827 NA
- 826,
- 825,
- // 824 NA
- 823,
- 822,
- // 821 NA
- 820,
- 819,
- 818,
- 817,
- 816,
- 815,
- 814,
- 813,
- // 812 NA
- 811,
- 810,
- 809,
- // 808 NA
- 807,
- 806,
- 805,
- // 804 NA
- 803,
- 802,
- 801,
- 800,
- 799,
- 798,
- // 797 NA
- // 796 NA
- 795,
- // 794 NA
- 793,
- 792,
- 791,
- 790,
- 789,
- // 788 NA
- 787,
- 786,
- 785,
- 784,
- // 783 NA
- 782,
- 781,
- 780,
- 779,
- 778,
- // 777 NA
- 776,
- 775,
- 774,
- 773,
- // 772 NA
- 771,
- // 770 NA
- 769,
- 768,
- // 767 NA
- // 766 NA
- 765,
- 764,
- // 763 NA
- // 762 NA
- // 761 NA
- 760,
- // 759 NA
- 758,
- // 757 NA
- // 756 NA
- 755,
- 754,
- 753,
- // 752 NA
- // 751 NA
- // 750 NA
- 749,
- 748,
- 747,
- 746,
- 745,
- // 744 NA
- 743,
- 742,
- 741,
- 740,
- 739,
- // 738 NA
- 737,
- 736,
- // 735 NA
- 734,
- // 733 NA
- 732,
- // 731 NA
- // 730 NA
- 729,
- // 728 NA
- // 727 NA
- // 726 NA
- // 725 NA
- // 724 NA
- 723,
- 722,
- 721,
- // 720 NA
- 719,
- 718,
- 717,
- 716,
- 715,
- 714,
- 713,
- 712,
- 711,
- 710,
- 709,
- 708,
- 707,
- 706,
- // 705 NA
- 704,
- // 703 NA
- 702,
- // 701 NA
- 700,
- 699,
- 698,
- 697,
- 696,
- 695,
- 694,
- 693,
- // 692 NA
- // 691 NA
- 690,
- 689,
- 688,
- // 687 NA
- 686,
- 685,
- // 684 NA
- // 683 NA
- 682,
- // 681 NA
- 680,
- // 679 NA
- // 678 NA
- // 677 NA
- // 676 NA
- 675,
- // 674 NA
- 673,
- 672,
- 671,
- 670,
- // 669 NA
- 668,
- 667,
- // 666 NA
- 665,
- // 664 NA
- // 663 NA
- 662,
- // 661 NA
- 660,
- 659,
- 658,
- // 657 NA
- 656,
- 655,
- 654,
- 653,
- // 652 NA
- 651,
- // 650 NA
- 649,
- // 648 NA
- // 647 NA
- 646,
- 645,
- // 644 NA
- 643,
- 642,
- // 641 NA
- 640,
- 639,
- // 638 NA
- 637,
- 636,
- 635,
- 634,
- 633,
- // 632 NA
- 631,
- 630,
- 629,
- // 628 NA
- // 627 NA
- // 626 NA
- // 625 NA
- // 624 NA
- 623,
- // 622 NA
- // 621 NA
- // 620 NA
- // 619 NA
- // 618 NA
- 617,
- 616,
- 615,
+ 652,
+ // 651,
+ // 650,
+ // 649,
+ // 648,
+ // 647,
+ // 646,
+ // 645,
+ // 644,
+ // 643,
+ // 642,
+ // 641,
+ // 640,
+ // 639,
+ // 638,
+ // 637,
+ // 636,
+ // 635,
+ // 634,
+ // 633,
+ // 632,
+ // 631,
+ // 630,
+ // 629,
+ // 628,
+ // 627,
+ // 626,
+ // 625,
+ // 624,
+ // 623,
+ // 622,
+ // 621,
+ // 620,
+ // 619,
+ 618,
+ // 617,
+ // 616,
+ // 615,
614,
- 613,
- 612,
- // 611 NA
- // 610 NA
- 609,
- 608,
- // 607 NA
- 606,
+ // 613,
+ // 612,
+ // 611,
+ // 610,
+ // 609,
+ // 608,
+ 607,
+ // 606,
605,
- 604,
- 603,
- 602,
- 601,
- 600,
- 599,
- 598,
- 597,
- // 596 NA
- 595,
- 594,
- 593,
- // 592 NA
- // 591 NA
- 590,
- // 589 NA
- 588,
- 587,
- // 586 NA
- 585,
- // 584 NA
- // 583 NA
- 582,
- // 581 NA
- 580,
- 579,
- 578,
- 577,
- 576,
- 575,
- 574,
- 573,
- 572,
- // 571 NA
- // 570 NA
- 569,
- 568,
- 567,
- 566,
- 565,
- // 564 NA
- 563,
- 562,
+ // 604,
+ // 603,
+ // 602,
+ // 601,
+ // 600,
+ // 599,
+ // 598,
+ // 597,
+ // 596,
+ // 595,
+ // 594,
+ // 593,
+ // 592,
+ // 591,
+ // 590,
+ // 589,
+ // 588,
+ // 587,
+ // 586,
+ // 585,
+ // 584,
+ // 583,
+ // 582,
+ // 581,
+ // 580,
+ // 579,
+ // 578,
+ // 577,
+ // 576,
+ // 575,
+ // 574,
+ // 573,
+ // 572,
+ 571,
+ // 570,
+ // 569,
+ // 568,
+ // 567,
+ // 566,
+ // 565,
+ // 564,
+ // 563,
+ // 562,
561,
- // 560 NA
- 559,
- // 558 NA
- // 557 NA
- // 556 NA
- // 555 NA
+ // 560,
+ // 559,
+ // 558,
+ // 557,
+ // 556,
+ 555,
554,
553,
552,
- 551,
+ // 551,
550,
- 549,
- // 548 NA
- 547,
- 546,
- 545,
- // 544 NA
- 543,
- 542,
- 541,
- // 540 NA
- 539,
- 538,
- 537,
- 536,
- 535,
- // 534 NA
- 533,
- 532,
- 531,
- 530,
- 529,
- 528,
- 527,
- 526,
- 525,
- 524,
- // 523 NA
- // 522 NA
- 521,
- 520,
- 519,
- 518,
- 517,
- 516,
- 515,
- 514,
- 513,
- // 512 NA
- // 511 NA
- // 510 NA
- // 509 NA
- 508,
- // 507 NA
- // 506 NA
- // 505 NA
- // 504 NA
- 503,
+ // 549,
+ // 548,
+ // 547,
+ // 546,
+ // 545,
+ // 544,
+ // 543,
+ // 542,
+ // 541,
+ // 540,
+ // 539,
+ // 538,
+ // 537,
+ // 536,
+ // 535,
+ // 534,
+ // 533,
+ // 532,
+ // 531,
+ // 530,
+ // 529,
+ // 528,
+ // 527,
+ // 526,
+ // 525,
+ // 524,
+ // 523,
+ // 522,
+ // 521,
+ // 520,
+ // 519,
+ // 518,
+ // 517,
+ // 516,
+ // 515,
+ // 514,
+ // 513,
+ // 512,
+ // 511,
+ // 510,
+ // 509,
+ // 508,
+ // 507,
+ // 506,
+ // 505,
+ // 504,
+ // 503,
502,
- // 501 NA
- 500,
+ // 501,
+ // 500,
499,
- // 498 NA
- 497,
- // 496 NA
- // 495 NA
- 494,
- 493,
- 492,
- 491,
- 490,
- 489,
- 488,
+ // 498,
+ // 497,
+ // 496,
+ // 495,
+ // 494,
+ // 493,
+ // 492,
+ // 491,
+ // 490,
+ // 489,
+ // 488,
487,
486,
485,
- // 484 NA
+ // 484,
483,
- // 482 NA
- // 481 NA
- // 480 NA
- // 479 NA
+ 482,
+ // 481,
+ // 480,
+ // 479,
478,
477,
- // 476 NA
- // 475 NA
- 474,
- 473,
- 472,
- // 471 NA
- 470,
- // 469 NA
- 468,
- 467,
- 466,
- // 465 NA
- // 464 NA
- 463,
- 462,
- // 461 NA
- // 460 NA
- // 459 NA
- 458,
+ // 476,
+ // 475,
+ // 474,
+ // 473,
+ // 472,
+ // 471,
+ // 470,
+ // 469,
+ // 468,
+ // 467,
+ // 466,
+ 465,
+ // 464,
+ // 463,
+ // 462,
+ 461,
+ // 460,
+ 459,
+ // 458,
457,
- 456,
- 455,
- 454,
- // 453 NA
- 452,
- // 451 NA
- 450,
- 449,
- // 448 NA
- 447,
- 446,
- 445,
- 444,
- // 443 NA
- 442,
- 441,
- 440,
- 439,
- 438,
- 437,
- 436,
- 435,
- 434,
- 433,
- // 432 NA
- // 431 NA
- // 430 NA
- // 429 NA
- // 428 NA
- 427,
- // 426 NA
- 425,
- // 424 NA
- 423,
- 422,
- 421,
- // 420 NA
- 419,
- 418,
- 417,
- 416,
- 415,
- 414,
- // 413 NA
- // 412 NA
- 411,
- 410,
- // 409 NA
+ // 456,
+ // 455,
+ // 454,
+ 453,
+ // 452,
+ // 451,
+ // 450,
+ // 449,
+ // 448,
+ // 447,
+ // 446,
+ // 445,
+ // 444,
+ // 443,
+ // 442,
+ // 441,
+ // 440,
+ // 439,
+ // 438,
+ // 437,
+ // 436,
+ // 435,
+ // 434,
+ // 433,
+ // 432,
+ // 431,
+ // 430,
+ // 429,
+ // 428,
+ // 427,
+ // 426,
+ // 425,
+ // 424,
+ // 423,
+ // 422,
+ // 421,
+ // 420,
+ // 419,
+ // 418,
+ // 417,
+ // 416,
+ // 415,
+ // 414,
+ // 413,
+ // 412,
+ // 411,
+ // 410,
+ // 409,
408,
407,
- 406,
- 405,
- // 404 NA
- // 403 NA
- // 402 NA
- // 401 NA
+ // 406,
+ // 405 NA
+ // 404,
+ // 403,
+ // 402,
+ // 401,
// 400 NA
- // 399 NA
- // 398 NA
- 397,
- 396,
- 395,
- // 394 NA
- // 393 NA
- 392,
- 391,
+ // 399,
+ // 398,
+ // 397,
+ // 396,
+ // 395,
+ // 394,
+ 393,
+ // 392,
+ // 391,
390,
- 389,
+ // 389,
388,
- 387,
- 386,
- // 385 NA
- // 384 NA
- 383,
- 382,
- 381,
- // 380 NA
- 379,
+ // 387,
+ // 386,
+ // 385,
+ // 384,
+ // 383,
+ // 382,
+ // 381,
+ // 380,
+ // 379,
378,
377,
376,
- 375,
- 374,
- 373,
- 372,
- 371,
- 370,
- 369,
- 368,
- 367,
- // 366 NA
- 365,
- 364,
- // 363 NA
- 362,
- 361,
+ // 375,
+ // 374,
+ // 373,
+ // 372,
+ // 371,
+ // 370,
+ // 369,
+ // 368,
+ // 367,
+ // 366,
+ // 365,
+ // 364,
+ // 363,
+ // 362,
+ // 361,
360,
- 359,
- 358,
- 357,
- // 356 NA
- 355,
- // 354 NA
+ // 359,
+ // 358,
+ // 357,
+ // 356,
+ // 355,
+ // 354,
353,
- 352,
- 351,
- 350,
- 349,
- 348,
+ // 352,
+ // 351,
+ // 350,
+ // 349,
+ // 348,
347,
- 346,
+ // 346,
345,
- 344,
+ // 344,
343,
- // 342 NA
+ // 342,
341,
- // 340 NA
- 339,
- 338,
- 337,
- 336,
- 335,
- 334,
- // 333 NA
- // 332 NA
+ // 340,
+ // 339,
+ // 338,
+ // 337,
+ // 336,
+ // 335,
+ // 334,
+ // 333,
+ // 332,
331,
- 330,
- 329,
- 328,
- 327,
- // 326 NA
- 325,
- 324,
- 323,
- // 322 NA
- // 321 NA
- 320,
- // 319 NA
- 318,
- 317,
- // 316 NA
- 315,
- 314,
- 313,
- 312,
- 311,
- 310,
- 309,
- 308,
- // 307 NA
- 306,
- 305,
- // 304 NA
- 303,
- 302,
- 301,
- // 300 NA
- // 299 NA
- 298,
+ // 330,
+ // 329,
+ // 328,
+ // 327,
+ // 326,
+ // 325,
+ // 324,
+ // 323,
+ 322,
+ // 321,
+ // 320,
+ 319,
+ // 318,
+ // 317,
+ // 316,
+ // 315,
+ // 314,
+ // 313,
+ // 312,
+ // 311,
+ // 310,
+ // 309,
+ // 308,
+ 307,
+ // 306,
+ // 305,
+ // 304,
+ // 303,
+ // 302,
+ // 301,
+ // 300,
+ // 299,
+ // 298,
297,
- 296,
- 295,
- 294,
- 293,
- 292,
- 291,
- 290,
- 289,
- 288,
- // 287 NA
- 286,
- 285,
- 284,
- // 283 NA
- 282,
- 281,
+ // 296,
+ // 295,
+ // 294,
+ // 293,
+ // 292,
+ // 291,
+ // 290,
+ // 289,
+ // 288 NA
+ // 287,
+ // 286,
+ // 285 NA
+ // 284 NA
+ // 283,
+ // 282,
+ // 281 NA
280,
- 279,
- 278,
- 277,
- 276,
+ // 279 NA
+ // 278 NA
+ // 277 NA
+ // 276 NA
275,
274,
// 273 NA
- 272,
+ // 272 NA
// 271 NA
// 270 NA
- 269,
- 268,
- 267,
+ // 269 NA
+ // 268 NA
+ // 267 NA
266,
- 265,
- 264,
- // 263 NA
- 262,
- 261,
- 260,
- // 259 NA
- // 258 NA
+ // 265,
+ // 264,
+ // 263,
+ // 262,
+ // 261,
+ // 260 NA
+ 259,
+ // 258,
// 257 NA
- 256,
- // 255 NA
- // 254 NA
- 253,
- // 252 NA
- 251,
- // 250 NA
- 249,
- 248,
- 247,
+ // 256,
+ // 255,
+ // 254,
+ // 253,
+ // 252,
+ // 251,
+ 250,
+ // 249 NA
+ // 248,
+ // 247,
// 246 NA
- 245,
- // 244 NA
+ // 245,
+ // 244,
243,
- 242,
- 241,
- 240,
- 239,
- // 238 NA
- 237,
- 236,
- 235,
- 234,
- 233,
- 232,
- 231,
- 230,
+ // 242,
+ // 241 NA
+ // 240 NA
+ // 239 NA
+ // 238,
+ // 237,
+ // 236,
+ // 235,
+ // 234,
+ // 233,
+ // 232 NA
+ // 231,
+ // 230,
229,
- // 228 NA
- // 227 NA
- 226,
- // 225 NA
- // 224 NA
- // 223 NA
- // 222 NA
- 221,
- 220,
+ // 228,
+ // 227,
+ // 226,
+ // 225,
+ // 224,
+ 223,
+ // 222,
+ // 221 NA
+ // 220,
219,
- 218,
+ // 218,
// 217 NA
- // 216 NA
- 215,
- // 214 NA
- 213,
- // 212 NA
- 211,
- 210,
- 209,
- // 208 NA
- 207,
- // 206 NA
+ // 216,
+ // 215,
+ // 214,
+ // 213 NA
+ // 212,
+ // 211 NA
+ // 210,
+ // 209,
+ 208,
+ // 207,
+ // 206,
205,
- 204,
- 203,
- // 202 NA
- 201,
- // 200 NA
- 199,
- // 198 NA
- // 197 NA
- // 196 NA
- // 195 NA
- // 194 NA
- 193,
- 192,
- 191,
- // 190 NA
- // 189 NA
- // 188 NA
- 187,
- 186,
- // 185 NA
- 184,
- // 183 NA
- // 182 NA
- 181,
- // 180 NA
- // 179 NA
+ // 204,
+ // 203 NA
+ // 202,
+ // 201,
+ // 200,
+ // 199 NA
+ // 198,
+ // 197,
+ // 196,
+ 195,
+ // 194,
+ // 193 NA
+ // 192 NA
+ // 191 NA
+ 190,
+ // 189,
+ // 188,
+ // 187 NA
+ // 186,
+ // 185,
+ // 184,
+ // 183,
+ // 182,
+ // 181,
+ // 180,
+ 179,
178,
- // 177 NA
- // 176 NA
- // 175 NA
- // 174 NA
- 173,
+ 177,
+ 176,
+ // 175,
+ // 174,
+ // 173 NA
172,
- 171,
- 170,
- 169,
- // 168 NA
+ // 171,
+ // 170,
+ // 169,
+ 168,
167,
- 166,
- 165,
- // 164 NA
+ // 166,
+ // 165,
+ // 164,
// 163 NA
// 162 NA
// 161 NA
- 160,
+ // 160,
159,
158,
- 157,
+ // 157,
156,
- 155,
- 154,
- 153,
- 152,
- 151,
+ // 155,
+ // 154,
+ // 153,
+ // 152 NA
+ // 151,
150,
- 149,
- 148,
- 147,
- 146,
- 145,
- 144,
- 143,
- 142,
- 141,
- 140,
- 139,
- 138,
- 137,
+ // 149,
+ // 148,
+ // 147,
+ // 146,
+ // 145 NA
+ // 144 NA
+ // 143,
+ // 142,
+ // 141,
+ // 140,
+ // 139 NA
+ // 138 NA
+ // 137,
136,
135,
- 134,
- 133,
- 132,
- 131,
- 130,
- 129,
- 128,
+ // 134,
+ // 133,
+ // 132,
+ // 131,
+ // 130 NA
+ // 129 NA
+ // 128,
127,
- 126,
- 125,
- 124,
- 123,
- 122,
+ // 126,
+ // 125,
+ // 124,
+ // 123 NA
+ // 122 NA
121,
- 120,
- 119,
- 118,
- 117,
+ // 120 NA
+ // 119,
+ // 118,
+ // 117 NA
116,
- 115,
- 114,
- 113,
- 112,
- 111,
+ // 115 NA
+ // 114 NA
+ // 113 NA
+ // 112,
+ // 111,
110,
- 109,
- 108,
- 107,
- 106,
- 105,
- 104,
- 103,
- 102,
- 101,
- 100,
+ // 109 NA
+ // 108 NA
+ // 107 NA
+ // 106,
+ // 105 NA
+ // 104,
+ // 103 NA
+ // 102,
+ // 101,
+ // 100,
99,
- 98,
- 97,
- 96,
- 95,
- 94,
- 93,
- 92,
- 91,
- 90,
- 89,
- 88,
- 87,
- 86,
+ // 98 NA
+ // 97 NA
+ // 96,
+ // 95 NA
+ // 94 NA
+ // 93 NA
+ // 92,
+ // 91,
+ // 90,
+ // 89 NA
+ // 88,
+ // 87 NA
+ // 86,
85,
84,
83,
- 82,
- 81,
- 80,
+ // 82 NA
+ // 81,
+ // 80 NA
79,
78,
- 77,
- 76,
- 75,
- 74,
- 73,
- 72,
- 71,
- 70,
- 69,
+ // 77 NA
+ // 76 NA
+ // 75,
+ // 74,
+ // 73,
+ // 72 NA
+ // 71 NA
+ // 70 NA
+ // 69,
68,
- 67,
+ // 67 NA
66,
- 65,
+ // 65 NA
64,
- 63,
- 62,
- 61,
+ // 63,
+ // 62,
+ // 61 NA
60,
- 59,
+ // 59 NA
58,
57,
56,
- 55,
- 54,
+ // 55 NA
+ // 54 NA
53,
- 52,
- 51,
- 50,
+ // 52,
+ // 51 NA
+ // 50 NA
49,
- 48,
+ // 48 NA
47,
- 46,
- 45,
- 44,
+ // 46,
+ // 45 NA
+ // 44,
43,
42,
41,
40,
- 39,
- 38,
+ // 39 NA
+ // 38,
37,
- 36,
+ // 36 NA
35,
- 34,
+ // 34,
33,
32,
- 31,
- 30,
- 29,
- 28,
- 27,
+ // 31,
+ // 30 NA
+ // 29 NA
+ // 28 NA
+ // 27 NA
26,
- 25,
- 24,
- 23,
- 22,
- 21,
- 20,
+ // 25,
+ // 24 NA
+ // 23,
+ // 22 NA
+ // 21,
+ // 20,
19,
- 18,
+ // 18,
17,
- 16,
- 15,
- 14,
- 13,
- 12,
- 11,
- 10,
- 9,
+ // 16 NA
+ // 15 NA
+ // 14 NA
+ // 13 NA
+ // 12,
+ // 11 NA
+ // 10 NA
+ // 9 NA
8,
- 7,
+ // 7 NA
6,
- 5,
+ // 5 NA
4,
3,
2,
@@ -2709,7 +993,7 @@ void intro_message(int colon)
static char *(lines[]) = {
N_(NVIM_VERSION_LONG),
"",
- N_("by Bram Moolenaar et al."),
+ N_("by al."),
N_("Nvim is open source and freely distributable"),
N_("https://neovim.io/community"),
"",