nerdtree

A tree explorer plugin for vim.
Index Commits Files Refs
commit 891f0ed3a27eb4c8a9b27bc2a22bb5861855dcb1
parent e93bf0632b114107f2d2f3d50e6b1823c7402cd7
Author: marty <martin_grenfell@msn.com>
Date:   Wed, 19 Aug 2009 02:05:36 +1200

make the git menu work and put it under a submenu

Diffstat:
Mnerdtree_plugin/git_menu.vim | 82++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
1 file changed, 54 insertions(+), 28 deletions(-)
diff --git a/nerdtree_plugin/git_menu.vim b/nerdtree_plugin/git_menu.vim
@@ -21,12 +21,41 @@ if exists("g:loaded_nerdtree_git_menu")
 endif
 let g:loaded_nerdtree_git_menu = 1
 
-call NERDTreeAddMenuItem({
+call NERDTreeAddMenuSeparator({'isActiveCallback': 'NERDTreeGitMenuEnabled'})
+let s:menu = NERDTreeAddMenuItem({
             \ 'text': '(g)it menu',
             \ 'shortcut': 'g',
             \ 'isActiveCallback': 'NERDTreeGitMenuEnabled',
             \ 'callback': 'NERDTreeGitMenu' })
 
+call NERDTreeAddMenuItem({
+            \ 'text': 'git (a)dd',
+            \ 'shortcut': 'a',
+            \ 'isActiveCallback': 'NERDTreeGitMenuEnabled',
+            \ 'callback': 'NERDTreeGitAdd',
+            \ 'parent': s:menu })
+
+call NERDTreeAddMenuItem({
+            \ 'text': 'git (c)heckout',
+            \ 'shortcut': 'c',
+            \ 'isActiveCallback': 'NERDTreeGitMenuEnabled',
+            \ 'callback': 'NERDTreeGitCheckout',
+            \ 'parent': s:menu })
+
+call NERDTreeAddMenuItem({
+            \ 'text': 'git (m)v',
+            \ 'shortcut': 'm',
+            \ 'isActiveCallback': 'NERDTreeGitMenuEnabled',
+            \ 'callback': 'NERDTreeGitMove',
+            \ 'parent': s:menu })
+
+call NERDTreeAddMenuItem({
+            \ 'text': 'git (r)m',
+            \ 'shortcut': 'r',
+            \ 'isActiveCallback': 'NERDTreeGitMenuEnabled',
+            \ 'callback': 'NERDTreeGitRemove',
+            \ 'parent': s:menu })
+
 function! NERDTreeGitMenuEnabled()
     return isdirectory(s:GitRepoPath())
 endfunction
@@ -35,37 +64,29 @@ function! s:GitRepoPath()
     return b:NERDTreeRoot.path.str(0) . ".git"
 endfunction
 
-function! NERDTreeGitMenu()
+function! NERDTreeGitMove()
     let node = g:NERDTreeFileNode.GetSelected()
-
     let path = node.path
-    let parent = path.getParent()
-
-    let prompt = "NERDTree Git Menu\n" .
-       \ "==========================================================\n".
-       \ "Select the desired operation:                             \n" .
-       \ " (a) - git add\n".
-       \ " (c) - git checkout\n".
-       \ " (m) - git mv\n".
-       \ " (r) - git rm\n"
-
-    echo prompt
+    let p = path.strForOS(1)
+    call s:promptCommand('mv ', p . ' ' . p, 'file')
+endfunction
 
-    let choice = nr2char(getchar())
+function! NERDTreeGitAdd()
+    let node = g:NERDTreeFileNode.GetSelected()
+    let path = node.path
+    call s:promptCommand('add ', path.strForOS(1), 'file')
+endfunction
 
-    if choice ==# "a"
-        call s:promptCommand('add ', path.strForOS(1), 'file')
-    elseif choice ==# "c"
-        call s:promptCommand('checkout ', path.strForOS(1), 'file')
-    elseif choice ==# "m"
-        let p = path.strForOS(1)
-        call s:promptCommand('mv ', p . ' ' . p, 'file')
-    elseif choice ==# "r"
-        call s:promptCommand('rm ', path.strForOS(1), 'file')
-    endif
+function! NERDTreeGitRemove()
+    let node = g:NERDTreeFileNode.GetSelected()
+    let path = node.path
+    call s:promptCommand('rm ', path.strForOS(1), 'file')
+endfunction
 
-    call node.parent.refresh()
-    call NERDTreeRender()
+function! NERDTreeGitCheckout()
+    let node = g:NERDTreeFileNode.GetSelected()
+    let path = node.path
+    call s:promptCommand('checkout ', path.strForOS(1), 'file')
 endfunction
 
 function! s:promptCommand(sub_command, cmd_tail_default, complete)
@@ -73,11 +94,16 @@ function! s:promptCommand(sub_command, cmd_tail_default, complete)
     let extra_options .= ' --work-tree=' . b:NERDTreeRoot.path.str(0) . ' '
     let base = "git" . extra_options . a:sub_command
 
+    let node = g:NERDTreeFileNode.GetSelected()
+
     let cmd_tail = input(":!" . base,  a:cmd_tail_default, a:complete)
     if cmd_tail != ''
         let output = system(base . cmd_tail)
         redraw!
-        if v:shell_error != 0
+        if v:shell_error == 0
+            call node.parent.refresh()
+            call NERDTreeRender()
+        else
             echo output
         endif
     else