mirror of
https://github.com/preservim/nerdtree.git
synced 2025-11-09 03:43:50 -05:00
add another api callback to determine whether menu items should appear
this way we can e.g. not show the git submenu unless a git repo is actually present
This commit is contained in:
@@ -429,7 +429,6 @@ endfunction
|
|||||||
"CLASS: MenuCallback {{{2
|
"CLASS: MenuCallback {{{2
|
||||||
"============================================================
|
"============================================================
|
||||||
let s:MenuCallback = {}
|
let s:MenuCallback = {}
|
||||||
|
|
||||||
"FUNCTION: MenuCallback.All() {{{3
|
"FUNCTION: MenuCallback.All() {{{3
|
||||||
function! s:MenuCallback.All()
|
function! s:MenuCallback.All()
|
||||||
if !exists("s:menuCallbacks")
|
if !exists("s:menuCallbacks")
|
||||||
@@ -438,16 +437,58 @@ function! s:MenuCallback.All()
|
|||||||
return s:menuCallbacks
|
return s:menuCallbacks
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: MenuCallback.Create(text, shortcut, callback) {{{3
|
"FUNCTION: MenuCallback.AllEnabledCallbacks() {{{3
|
||||||
function! s:MenuCallback.Create(text, shortcut, callback)
|
function! s:MenuCallback.AllEnabledCallbacks()
|
||||||
|
let toReturn = []
|
||||||
|
for i in s:MenuCallback.All()
|
||||||
|
if i.enabled()
|
||||||
|
call add(toReturn, i)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return toReturn
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"FUNCTION: MenuCallback.FindByShortcut(shortcut) {{{3
|
||||||
|
function! s:MenuCallback.FindByShortcut(shortcut)
|
||||||
|
for i in s:MenuCallback.All()
|
||||||
|
if i.shortcut ==# a:shortcut
|
||||||
|
return i
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return {}
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"FUNCTION: MenuCallback.Create(options) {{{3
|
||||||
|
function! s:MenuCallback.Create(options)
|
||||||
let newCallback = {}
|
let newCallback = {}
|
||||||
let newCallback = copy(self)
|
let newCallback = copy(self)
|
||||||
let newCallback.text = a:text
|
|
||||||
let newCallback.shortcut = a:shortcut
|
let shortcut = a:options['shortcut']
|
||||||
let newCallback.callback = a:callback
|
let callback = a:options['callback']
|
||||||
|
|
||||||
|
|
||||||
|
let newCallback.text = a:options['text']
|
||||||
|
let newCallback.shortcut = a:options['shortcut']
|
||||||
|
let newCallback.callback = a:options['callback']
|
||||||
|
if has_key(a:options, 'check_to_enable_callback')
|
||||||
|
let newCallback.check_to_enable_callback = a:options['check_to_enable_callback']
|
||||||
|
endif
|
||||||
call add(s:MenuCallback.All(), newCallback)
|
call add(s:MenuCallback.All(), newCallback)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
"FUNCTION: MenuCallback.enabled() {{{3
|
||||||
|
function! s:MenuCallback.enabled()
|
||||||
|
if has_key(self, "check_to_enable_callback")
|
||||||
|
return {self.check_to_enable_callback}()
|
||||||
|
endif
|
||||||
|
return 1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"FUNCTION: MenuCallback.execute() {{{3
|
||||||
|
function! s:MenuCallback.execute()
|
||||||
|
call {self.callback}()
|
||||||
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: MenuCallback.ShowMenu() {{{3
|
"FUNCTION: MenuCallback.ShowMenu() {{{3
|
||||||
function! s:MenuCallback.ShowMenu()
|
function! s:MenuCallback.ShowMenu()
|
||||||
let curNode = s:TreeFileNode.GetSelected()
|
let curNode = s:TreeFileNode.GetSelected()
|
||||||
@@ -459,22 +500,19 @@ function! s:MenuCallback.ShowMenu()
|
|||||||
let prompt = "NERDTree Menu\n" .
|
let prompt = "NERDTree Menu\n" .
|
||||||
\ "==========================================================\n"
|
\ "==========================================================\n"
|
||||||
|
|
||||||
for i in s:MenuCallback.All()
|
for i in s:MenuCallback.AllEnabledCallbacks()
|
||||||
let prompt .= i.text . "\n"
|
let prompt .= i.text . "\n"
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
echo prompt
|
echo prompt
|
||||||
|
|
||||||
let choice = nr2char(getchar())
|
let callback = s:MenuCallback.FindByShortcut(nr2char(getchar()))
|
||||||
|
if !empty(callback) && callback.enabled()
|
||||||
for i in s:MenuCallback.All()
|
redraw
|
||||||
if choice ==# i.shortcut
|
call callback.execute()
|
||||||
exec "call " . i.callback . "()"
|
|
||||||
return
|
|
||||||
endif
|
endif
|
||||||
endfor
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
endfunction
|
||||||
|
|
||||||
"CLASS: TreeFileNode {{{2
|
"CLASS: TreeFileNode {{{2
|
||||||
"This class is the parent of the TreeDirNode class and constitures the
|
"This class is the parent of the TreeDirNode class and constitures the
|
||||||
@@ -2388,8 +2426,8 @@ function! NERDTreeGetCurrentPath()
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! NERDTreeAddMenuItem(text, shortcut, callback)
|
function! NERDTreeAddMenuItem(options)
|
||||||
call s:MenuCallback.Create(a:text, a:shortcut, a:callback)
|
call s:MenuCallback.Create(a:options)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! NERDTreeRender()
|
function! NERDTreeRender()
|
||||||
|
|||||||
Reference in New Issue
Block a user