Fix #130 - Proper cleanup of on-demand loading triggers
This commit is contained in:
parent
48514768c2
commit
044c3a67c4
32
plug.vim
32
plug.vim
|
@ -99,6 +99,7 @@ function! plug#begin(...)
|
||||||
let g:plug_home = home
|
let g:plug_home = home
|
||||||
let g:plugs = {}
|
let g:plugs = {}
|
||||||
let g:plugs_order = []
|
let g:plugs_order = []
|
||||||
|
let s:triggers = {}
|
||||||
|
|
||||||
call s:define_commands()
|
call s:define_commands()
|
||||||
return 1
|
return 1
|
||||||
|
@ -156,6 +157,7 @@ function! plug#end()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if has_key(plug, 'on')
|
if has_key(plug, 'on')
|
||||||
|
let s:triggers[name] = { 'map': [], 'cmd': [] }
|
||||||
for cmd in s:to_a(plug.on)
|
for cmd in s:to_a(plug.on)
|
||||||
if cmd =~ '^<Plug>.\+'
|
if cmd =~ '^<Plug>.\+'
|
||||||
if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i'))
|
if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i'))
|
||||||
|
@ -166,10 +168,14 @@ function! plug#end()
|
||||||
\ mode, cmd, map_prefix, string(cmd), string(name), key_prefix)
|
\ mode, cmd, map_prefix, string(cmd), string(name), key_prefix)
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
elseif !exists(':'.cmd)
|
call add(s:triggers[name].map, cmd)
|
||||||
execute printf(
|
elseif cmd =~ '^[A-Z]'
|
||||||
\ 'command! -nargs=* -range -bang %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)',
|
if !exists(':'.cmd)
|
||||||
\ cmd, string(cmd), string(name))
|
execute printf(
|
||||||
|
\ 'command! -nargs=* -range -bang %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)',
|
||||||
|
\ cmd, string(cmd), string(name))
|
||||||
|
endif
|
||||||
|
call add(s:triggers[name].cmd, cmd)
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
|
@ -324,8 +330,23 @@ function! plug#load(...)
|
||||||
return 1
|
return 1
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:remove_triggers(name)
|
||||||
|
if !has_key(s:triggers, a:name)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
for cmd in s:triggers[a:name].cmd
|
||||||
|
execute 'delc' cmd
|
||||||
|
endfor
|
||||||
|
for map in s:triggers[a:name].map
|
||||||
|
execute 'unmap' map
|
||||||
|
execute 'iunmap' map
|
||||||
|
endfor
|
||||||
|
call remove(s:triggers, a:name)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:lod(names, types)
|
function! s:lod(names, types)
|
||||||
for name in a:names
|
for name in a:names
|
||||||
|
call s:remove_triggers(name)
|
||||||
let s:loaded[name] = 1
|
let s:loaded[name] = 1
|
||||||
endfor
|
endfor
|
||||||
call s:reorg_rtp()
|
call s:reorg_rtp()
|
||||||
|
@ -346,14 +367,11 @@ function! s:lod_ft(pat, names)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:lod_cmd(cmd, bang, l1, l2, args, name)
|
function! s:lod_cmd(cmd, bang, l1, l2, args, name)
|
||||||
execute 'delc' a:cmd
|
|
||||||
call s:lod([a:name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
|
call s:lod([a:name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
|
||||||
execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
|
execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:lod_map(map, name, prefix)
|
function! s:lod_map(map, name, prefix)
|
||||||
execute 'unmap' a:map
|
|
||||||
execute 'iunmap' a:map
|
|
||||||
call s:lod([a:name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
|
call s:lod([a:name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
|
||||||
let extra = ''
|
let extra = ''
|
||||||
while 1
|
while 1
|
||||||
|
|
|
@ -1103,6 +1103,41 @@ Execute (#114 Should not contain empty path in &rtp):
|
||||||
Assert &rtp !~ '^,', 'Comma prefix'
|
Assert &rtp !~ '^,', 'Comma prefix'
|
||||||
Assert &rtp !~ ',$', 'Comma suffix'
|
Assert &rtp !~ ',$', 'Comma suffix'
|
||||||
|
|
||||||
|
**********************************************************************
|
||||||
|
Execute (#130 Proper cleanup of on-demand loading triggers):
|
||||||
|
augroup PlugLOD
|
||||||
|
autocmd!
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
" Cleared on command
|
||||||
|
call plug#begin('$TMPDIR/plugged')
|
||||||
|
Plug 'junegunn/vim-emoji', { 'on': ['EmojiCommand', 'EmojiCommand2', '<Plug>(EmojiMapping)'] }
|
||||||
|
call plug#end()
|
||||||
|
PlugInstall | q
|
||||||
|
|
||||||
|
Assert exists(':EmojiCommand'), 'EmojiCommand not defined'
|
||||||
|
Assert exists(':EmojiCommand2'), 'EmojiCommand2 not defined'
|
||||||
|
Assert !empty(mapcheck('<Plug>(EmojiMapping)')), '<Plug>(EmojiMapping) not defined'
|
||||||
|
|
||||||
|
silent! EmojiCommand
|
||||||
|
|
||||||
|
Assert !exists(':EmojiCommand'), 'EmojiCommand defined'
|
||||||
|
Assert !exists(':EmojiCommand2'), 'EmojiCommand2 defined'
|
||||||
|
Assert empty(mapcheck('<Plug>(EmojiMapping)')), '<Plug>(EmojiMapping) defined'
|
||||||
|
|
||||||
|
" Cleared on FileType
|
||||||
|
call plug#begin('$TMPDIR/plugged')
|
||||||
|
Plug 'junegunn/vim-emoji', { 'on': ['EmojiCommandExtra', '<Plug>(EmojiMappingExtra)'], 'for': ['emoji'] }
|
||||||
|
call plug#end()
|
||||||
|
|
||||||
|
Assert exists(':EmojiCommandExtra'), 'EmojiCommandExtra not defined'
|
||||||
|
Assert !empty(mapcheck('<Plug>(EmojiMappingExtra)')), '<Plug>(EmojiMappingExtra) not defined'
|
||||||
|
|
||||||
|
setf emoji
|
||||||
|
|
||||||
|
Assert !exists(':EmojiCommandExtra'), 'EmojiCommandExtra defined'
|
||||||
|
Assert empty(mapcheck('<Plug>(EmojiMappingExtra)')), '<Plug>(EmojiMappingExtra) defined'
|
||||||
|
|
||||||
Execute (Cleanup):
|
Execute (Cleanup):
|
||||||
silent! call system('rm -rf '.temp_plugged)
|
silent! call system('rm -rf '.temp_plugged)
|
||||||
silent! call system('rm -rf '.temp_plugged)
|
silent! call system('rm -rf '.temp_plugged)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user