aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/autoload/health/nvim.vim2
-rw-r--r--runtime/autoload/health/provider.vim17
-rw-r--r--runtime/autoload/provider.vim20
-rw-r--r--runtime/autoload/provider/clipboard.vim13
-rw-r--r--runtime/autoload/provider/node.vim11
-rw-r--r--runtime/autoload/provider/pythonx.vim9
-rw-r--r--runtime/doc/api.txt44
-rw-r--r--runtime/doc/channel.txt12
-rw-r--r--runtime/doc/develop.txt6
-rw-r--r--runtime/doc/eval.txt6
-rw-r--r--runtime/doc/vim_diff.txt1
-rw-r--r--runtime/plugin/health.vim9
12 files changed, 65 insertions, 85 deletions
diff --git a/runtime/autoload/health/nvim.vim b/runtime/autoload/health/nvim.vim
index 58033f0405..017c047ef4 100644
--- a/runtime/autoload/health/nvim.vim
+++ b/runtime/autoload/health/nvim.vim
@@ -174,7 +174,7 @@ function! s:check_terminal() abort
\ .(empty(kbs_entry) ? '? (not found)' : kdch1_entry))
endif
for env_var in ['XTERM_VERSION', 'VTE_VERSION', 'TERM_PROGRAM', 'COLORTERM', 'SSH_TTY']
- if !exists('$'.env_var)
+ if exists('$'.env_var)
call health#report_info(printf("$%s='%s'", env_var, eval('$'.env_var)))
endif
endfor
diff --git a/runtime/autoload/health/provider.vim b/runtime/autoload/health/provider.vim
index 39e592c471..83dee043a0 100644
--- a/runtime/autoload/health/provider.vim
+++ b/runtime/autoload/health/provider.vim
@@ -370,10 +370,11 @@ function! s:check_python(version) abort
let python_bin = ''
endif
- " Check if $VIRTUAL_ENV is active
- let virtualenv_inactive = 0
+ " Check if $VIRTUAL_ENV is active.
if exists('$VIRTUAL_ENV')
+ let virtualenv_inactive = 0
+
if !empty(pyenv)
let pyenv_prefix = resolve(s:trim(s:system([pyenv, 'prefix'])))
if $VIRTUAL_ENV != pyenv_prefix
@@ -382,13 +383,13 @@ function! s:check_python(version) abort
elseif !empty(pyname) && exepath(pyname) !~# '^'.$VIRTUAL_ENV.'/'
let virtualenv_inactive = 1
endif
- endif
- if virtualenv_inactive
- call health#report_warn(
- \ '$VIRTUAL_ENV exists but appears to be inactive. '
- \ . 'This could lead to unexpected results.',
- \ [ 'If you are using Zsh, see: http://vi.stackexchange.com/a/7654/5229' ])
+ if virtualenv_inactive
+ call health#report_warn(
+ \ '$VIRTUAL_ENV exists but appears to be inactive. '
+ \ . 'This could lead to unexpected results.',
+ \ [ 'If you are using Zsh, see: http://vi.stackexchange.com/a/7654' ])
+ endif
endif
" Diagnostic output
diff --git a/runtime/autoload/provider.vim b/runtime/autoload/provider.vim
deleted file mode 100644
index e6514f5ba8..0000000000
--- a/runtime/autoload/provider.vim
+++ /dev/null
@@ -1,20 +0,0 @@
-" Common functionality for providers
-
-let s:stderr = {}
-
-function! provider#stderr_collector(chan_id, data, event)
- let stderr = get(s:stderr, a:chan_id, [''])
- let stderr[-1] .= a:data[0]
- call extend(stderr, a:data[1:])
- let s:stderr[a:chan_id] = stderr
-endfunction
-
-function! provider#clear_stderr(chan_id)
- if has_key(s:stderr, a:chan_id)
- call remove(s:stderr, a:chan_id)
- endif
-endfunction
-
-function! provider#get_stderr(chan_id)
- return get(s:stderr, a:chan_id, [])
-endfunction
diff --git a/runtime/autoload/provider/clipboard.vim b/runtime/autoload/provider/clipboard.vim
index 6454a01c2a..e5a6e4748a 100644
--- a/runtime/autoload/provider/clipboard.vim
+++ b/runtime/autoload/provider/clipboard.vim
@@ -7,7 +7,7 @@ let s:clipboard = {}
" When caching is enabled, store the jobid of the xclip/xsel process keeping
" ownership of the selection, so we know how long the cache is valid.
-let s:selection = { 'owner': 0, 'data': [], 'on_stderr': function('provider#stderr_collector') }
+let s:selection = { 'owner': 0, 'data': [], 'stderr_buffered': v:true }
function! s:selection.on_exit(jobid, data, event) abort
" At this point this nvim instance might already have launched
@@ -16,12 +16,10 @@ function! s:selection.on_exit(jobid, data, event) abort
let self.owner = 0
endif
if a:data != 0
- let stderr = provider#get_stderr(a:jobid)
echohl WarningMsg
- echomsg 'clipboard: error invoking '.get(self.argv, 0, '?').': '.join(stderr)
+ echomsg 'clipboard: error invoking '.get(self.argv, 0, '?').': '.join(self.stderr)
echohl None
endif
- call provider#clear_stderr(a:jobid)
endfunction
let s:selections = { '*': s:selection, '+': copy(s:selection) }
@@ -142,12 +140,13 @@ function! s:clipboard.set(lines, regtype, reg) abort
return 0
end
- let selection = s:selections[a:reg]
- if selection.owner > 0
+ if s:selections[a:reg].owner > 0
" The previous provider instance should exit when the new one takes
" ownership, but kill it to be sure we don't fill up the job table.
- call jobstop(selection.owner)
+ call jobstop(s:selections[a:reg].owner)
end
+ let s:selections[a:reg] = copy(s:selection)
+ let selection = s:selections[a:reg]
let selection.data = [a:lines, a:regtype]
let argv = split(s:copy[a:reg], " ")
let selection.argv = argv
diff --git a/runtime/autoload/provider/node.vim b/runtime/autoload/provider/node.vim
index 4e737fb51c..3dde18022e 100644
--- a/runtime/autoload/provider/node.vim
+++ b/runtime/autoload/provider/node.vim
@@ -3,7 +3,7 @@ if exists('g:loaded_node_provider')
endif
let g:loaded_node_provider = 1
-let s:job_opts = {'rpc': v:true, 'on_stderr': function('provider#stderr_collector')}
+let s:job_opts = {'rpc': v:true, 'stderr_buffered': v:true}
function! s:is_minimum_version(version, min_major, min_minor) abort
if empty(a:version)
@@ -73,19 +73,18 @@ function! provider#node#Require(host) abort
call add(args, provider#node#Prog())
try
- let channel_id = jobstart(args, s:job_opts)
+ let job = copy(s:job_opts)
+ let channel_id = jobstart(args, job)
if rpcrequest(channel_id, 'poll') ==# 'ok'
return channel_id
endif
catch
echomsg v:throwpoint
echomsg v:exception
- for row in provider#get_stderr(channel_id)
+ for row in job.stderr
echomsg row
endfor
endtry
- finally
- call provider#clear_stderr(channel_id)
endtry
throw remote#host#LoadErrorForHost(a:host.orig_name, '$NVIM_NODE_LOG_FILE')
endfunction
@@ -115,7 +114,7 @@ let s:err = ''
let s:prog = provider#node#Detect()
if empty(s:prog)
- let s:err = 'Cannot find the "neovim" node package. Try :CheckHealth'
+ let s:err = 'Cannot find the "neovim" node package. Try :checkhealth'
endif
call remote#host#RegisterPlugin('node-provider', 'node', [])
diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim
index 7285ed43ea..1c77eabe23 100644
--- a/runtime/autoload/provider/pythonx.vim
+++ b/runtime/autoload/provider/pythonx.vim
@@ -5,7 +5,7 @@ endif
let s:loaded_pythonx_provider = 1
-let s:job_opts = {'rpc': v:true, 'on_stderr': function('provider#stderr_collector')}
+let s:job_opts = {'rpc': v:true, 'stderr_buffered': v:true}
function! provider#pythonx#Require(host) abort
let ver = (a:host.orig_name ==# 'python') ? 2 : 3
@@ -21,18 +21,17 @@ function! provider#pythonx#Require(host) abort
endfor
try
- let channel_id = jobstart(args, s:job_opts)
+ let job = copy(s:job_opts)
+ let channel_id = jobstart(args, job)
if rpcrequest(channel_id, 'poll') ==# 'ok'
return channel_id
endif
catch
echomsg v:throwpoint
echomsg v:exception
- for row in provider#get_stderr(channel_id)
+ for row in job.stderr
echomsg row
endfor
- finally
- call provider#clear_stderr(channel_id)
endtry
throw remote#host#LoadErrorForHost(a:host.orig_name,
\ '$NVIM_PYTHON_LOG_FILE')
diff --git a/runtime/doc/api.txt b/runtime/doc/api.txt
index 6c2a3a8632..fd6918de43 100644
--- a/runtime/doc/api.txt
+++ b/runtime/doc/api.txt
@@ -512,27 +512,27 @@ nvim_parse_expression({expr}, {flags}, {highlight})
[start_col, end_col)).
Return:~
- AST: top-level dictionary holds keys "error": Dictionary
- with error, present only if parser saw some error.
- Contains the following keys: "message": String, error
- message in printf format, translated. Must contain exactly
- one "%.*s". "arg": String, error message argument. "len":
- Amount of bytes successfully parsed. With flags equal to
- "" that should be equal to the length of expr string.
- @note: “Sucessfully parsed” here means “participated in
- AST creation”, not “till the first error”. "ast": AST,
- either nil or a dictionary with these keys: "type": node
- type, one of the value names from ExprASTNodeType
- stringified without "kExprNode" prefix. "start": a pair
- [line, column] describing where node is “started” where
- "line" is always 0 (will not be 0 if you will be using
- nvim_parse_viml() on e.g. ":let", but that is not present
- yet). Both elements are Integers. "len": “length” of the
- node. This and "start" are there for debugging purposes
- primary (debugging parser and providing debug
- information). "children": a list of nodes described in
- top/"ast". There always is zero, one or two children, key
- will not be present if node has no children. Maximum
+ AST: top-level dictionary with these keys: "error":
+ Dictionary with error, present only if parser saw some
+ error. Contains the following keys: "message": String,
+ error message in printf format, translated. Must contain
+ exactly one "%.*s". "arg": String, error message argument.
+ "len": Amount of bytes successfully parsed. With flags
+ equal to "" that should be equal to the length of expr
+ string. @note: “Sucessfully parsed” here means
+ “participated in AST creation”, not “till the first
+ error”. "ast": AST, either nil or a dictionary with these
+ keys: "type": node type, one of the value names from
+ ExprASTNodeType stringified without "kExprNode" prefix.
+ "start": a pair [line, column] describing where node is
+ “started” where "line" is always 0 (will not be 0 if you
+ will be using nvim_parse_viml() on e.g. ":let", but that
+ is not present yet). Both elements are Integers. "len":
+ “length” of the node. This and "start" are there for
+ debugging purposes primary (debugging parser and providing
+ debug information). "children": a list of nodes described
+ in top/"ast". There always is zero, one or two children,
+ key will not be present if node has no children. Maximum
number of children may be found in node_maxchildren array.
Local values (present only for certain nodes): "scope": a
single Integer, specifies scope for "Option" and
@@ -1047,4 +1047,4 @@ nvim_ui_try_resize({width}, {height}) *nvim_ui_try_resize()*
nvim_ui_set_option({name}, {value}) *nvim_ui_set_option()*
TODO: Documentation
- vim:tw=78:ts=8:ft=help:norl: \ No newline at end of file
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/channel.txt b/runtime/doc/channel.txt
index c94c64eb84..eb2bac6fce 100644
--- a/runtime/doc/channel.txt
+++ b/runtime/doc/channel.txt
@@ -4,9 +4,9 @@
NVIM REFERENCE MANUAL by Thiago de Arruda
-Nvim's facilities for async io *channel*
+Nvim asynchronous IO *channel*
- Type <M-]> to see the table of contents.
+ Type |gO| to see the table of contents.
==============================================================================
1. Introduction *channel-intro*
@@ -43,7 +43,7 @@ bytes. Additionally, for a job channel using rpc, bytes can still be
read over its stderr. Similarily, only bytes can be written to nvim's own stderr.
*channel-callback* *buffered*
- *on_stdout* *on_stderr* *on_stdin* *on_data*
+ *E5210* *on_stdout* *on_stderr* *on_stdin* *on_data*
A callback function `on_{stream}` will be invoked with data read from the
channel. By default, the callback will be invoked immediately when data is
available, to facilitate interactive communication. The same callback will
@@ -52,7 +52,11 @@ Alternatively the `{stream}_buffered` option can be set to invoke the callback
only when the underlying stream reaches EOF, and will then be passed in
complete output. This is helpful when only the complete output is useful, and
not partial data. Futhermore if `{stream}_buffered` is set but not a callback,
-the data is saved in the options dict, with the stream name as key.
+the data is saved in the options dict, with the stream name as key. For this
+to work a new options dict must be used for each opened channel. If a script
+uses a global `s:job_opts` dict, it can be copied with |copy()| before supplying
+it to |jobstart()|. If a dict is reused, so that the dict key already is
+occupied, error `E5210` will be raised.
- The arguments passed to the callback function are:
diff --git a/runtime/doc/develop.txt b/runtime/doc/develop.txt
index 36826e2479..4e77f40035 100644
--- a/runtime/doc/develop.txt
+++ b/runtime/doc/develop.txt
@@ -270,9 +270,9 @@ External UIs are expected to implement these common features:
- Send the "super" key (Windows key, Apple key) as a |<D-| chord.
Implementation ~
-- Options can be monitored for changes by the |OptionSet| autocmd. E.g. if the
- user sets the 'guifont' option, this autocmd notifies channel 42: >
- autocmd OptionSet guifont call rpcnotify(42, 'option-changed', 'guifont', &guifont)
+- UI-related options ('guifont', 'ambiwidth', …) are published in the
+ "option_set" |ui-global| event. The event is triggered when the UI first
+ connects to Nvim and whenever an option is changed by the user or a plugin.
vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 0b50340dee..a9474b58a3 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -5493,7 +5493,7 @@ matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
sets buffer line boundaries to redraw screen. It is supposed
to be used when fast match additions and deletions are
required, for example to highlight matching parentheses.
-
+ *E5030* *E5031*
The list {pos} can contain one of these items:
- A number. This whole line will be highlighted. The first
line has number 1.
@@ -5507,6 +5507,10 @@ matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
- A list with three numbers, e.g., [23, 11, 3]. As above, but
the third number gives the length of the highlight in bytes.
+ Entries with zero and negative line numbers are silently
+ ignored, as well as entries with negative column numbers and
+ lengths.
+
The maximum number of positions is 8.
Example: >
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index 7061f01316..9643777975 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -70,6 +70,7 @@ Providers
Ruby plugins |provider-ruby|
Shared data |shada|
Embedded terminal |terminal|
+VimL parser |nvim_parse_expression()|
XDG base directories |xdg|
USER EXPERIENCE ~
diff --git a/runtime/plugin/health.vim b/runtime/plugin/health.vim
index e3482cb0fe..66ae8fb239 100644
--- a/runtime/plugin/health.vim
+++ b/runtime/plugin/health.vim
@@ -1,8 +1 @@
-function! s:complete(lead, _line, _pos) abort
- return sort(filter(map(globpath(&runtimepath, 'autoload/health/*', 1, 1),
- \ 'fnamemodify(v:val, ":t:r")'),
- \ 'empty(a:lead) || v:val[:strlen(a:lead)-1] ==# a:lead'))
-endfunction
-
-command! -nargs=* -complete=customlist,s:complete CheckHealth
- \ call health#check([<f-args>])
+autocmd CmdUndefined CheckHealth checkhealth