diff --git a/nerdtree_plugin/cxx_class_menu.vim b/nerdtree_plugin/cxx_class_menu.vim new file mode 100644 index 0000000..17b78a7 --- /dev/null +++ b/nerdtree_plugin/cxx_class_menu.vim @@ -0,0 +1,66 @@ +" ============================================================================ +" File: fs_menu.vim +" Description: plugin for the NERD Tree that provides a file system menu +" Maintainer: Martin Grenfell +" Last Change: 17 July, 2009 +" License: This program is free software. It comes without any warranty, +" to the extent permitted by applicable law. You can redistribute +" it and/or modify it under the terms of the Do What The Fuck You +" Want To Public License, Version 2, as published by Sam Hocevar. +" See http://sam.zoy.org/wtfpl/COPYING for more details. +" +" ============================================================================ +if exists("g:loaded_nerdtree_cxx_class_menu") + finish +endif +let g:loaded_nerdtree_cxx_class_menu = 1 + + +call NERDTreeAddMenuItem({'text': 'create C++ header/class (p)air', 'shortcut': 'p', 'callback': 'NERDTreeAddCxxClass'}) + +"FUNCTION: s:echo(msg){{{1 +function! s:echo(msg) + redraw + echomsg "NERDTree: " . a:msg +endfunction + +"FUNCTION: s:echoWarning(msg){{{1 +function! s:echoWarning(msg) + echohl warningmsg + call s:echo(a:msg) + echohl normal +endfunction + +"FUNCTION: NERDTreeAddNode(){{{1 +function! NERDTreeAddCxxClass() + let curDirNode = g:NERDTreeDirNode.GetSelected() + + let newNodeName = input("Create a C++ class\n". + \ "==========================================================\n". + \ "Create a new C++ .h/.cpp file pair with the given name\n" . + \ "", "", "file") + + if newNodeName ==# '' + call s:echo("Node Creation Aborted.") + return + endif + + try + let newPathPrefix = curDirNode.path.str() . g:NERDTreePath.Slash() . newNodeName + let newPathH = g:NERDTreePath.Create(newPathPrefix . ".h") + let newPathCpp = g:NERDTreePath.Create(newPathPrefix . ".cpp") + let parentNode = b:NERDTreeRoot.findNode(newPathH.getParent()) + + let newTreeNodeH = g:NERDTreeFileNode.New(newPathH) + let newTreeNodeCpp = g:NERDTreeFileNode.New(newPathCpp) + if parentNode.isOpen || !empty(parentNode.children) + call parentNode.addChild(newTreeNodeH, 1) + call parentNode.addChild(newTreeNodeCpp, 1) + call NERDTreeRender() + call newTreeNodeH.putCursorHere(1, 0) + endif + catch /^NERDTree/ + call s:echoWarning("Node Not Created.") + endtry +endfunction +