diff options
Diffstat (limited to 'runtime/plugin/rplugin.vim')
| -rw-r--r-- | runtime/plugin/rplugin.vim | 75 |
1 files changed, 62 insertions, 13 deletions
diff --git a/runtime/plugin/rplugin.vim b/runtime/plugin/rplugin.vim index b4b03032b3..122d8d47f8 100644 --- a/runtime/plugin/rplugin.vim +++ b/runtime/plugin/rplugin.vim @@ -1,16 +1,65 @@ if exists('g:loaded_remote_plugins') finish endif -let g:loaded_remote_plugins = 1 - -command! UpdateRemotePlugins call remote#host#UpdateRemotePlugins() - -augroup nvim-rplugin - autocmd! - autocmd FuncUndefined * - \ call remote#host#LoadRemotePluginsEvent( - \ 'FuncUndefined', expand('<amatch>')) - autocmd CmdUndefined * - \ call remote#host#LoadRemotePluginsEvent( - \ 'CmdUndefined', expand('<amatch>')) -augroup END +let g:loaded_remote_plugins = '/path/to/manifest' + +" Get the path to the rplugin manifest file. +function! s:GetManifestPath() abort + let manifest_base = '' + + if exists('$NVIM_RPLUGIN_MANIFEST') + return fnamemodify($NVIM_RPLUGIN_MANIFEST, ':p') + endif + + let dest = stdpath('data') + if !empty(dest) + if !isdirectory(dest) + call mkdir(dest, 'p', 0700) + endif + let manifest_base = dest + endif + + return manifest_base.'/rplugin.vim' +endfunction + +" Old manifest file based on known script locations. +function! s:GetOldManifestPaths() abort + let prefix = exists('$MYVIMRC') + \ ? $MYVIMRC + \ : matchstr(get(split(execute('scriptnames'), '\n'), 0, ''), '\f\+$') + let origpath = fnamemodify(expand(prefix, 1), ':h') + \.'/.'.fnamemodify(prefix, ':t').'-rplugin~' + if !has('win32') + return [origpath] + endif + " Windows used to use $APPLOCALDATA/nvim but stdpath('data') is + " $XDG_DATA_DIR/nvim-data + let pseudostdpath = exists('$LOCALAPPDATA') ? '$LOCALAPPDATA' : '~/AppData/Local' + let pseudostdpath = fnamemodify(expand(pseudostdpath), ':p') + return [substitute(pseudostdpath, '[/\\]\=$', '/', '') . 'nvim/rplugin.vim', origpath] +endfunction + +function! s:GetManifest() abort + let manifest = s:GetManifestPath() + if !filereadable(manifest) + " Check if an old manifest file exists and move it to the new location. + for old_manifest in s:GetOldManifestPaths() + if filereadable(old_manifest) + call rename(old_manifest, manifest) + break + endif + endfor + endif + return manifest +endfunction + +function! s:LoadRemotePlugins() abort + let g:loaded_remote_plugins = s:GetManifest() + if filereadable(g:loaded_remote_plugins) + execute 'source' fnameescape(g:loaded_remote_plugins) + endif +endfunction + +command! -bar UpdateRemotePlugins call remote#host#UpdateRemotePlugins() + +call s:LoadRemotePlugins() |