commit b09e0fbfa453b322f1a6b42b324d17d2c3450b23
parent 402fea69023394f4c3f281f509d352612de22cf2
Author: Martin Grenfell <martin_grenfell@msn.com>
Date: Wed, 24 Dec 2008 00:52:00 +1300
refactor the initNerdTreeMirror function
Diffstat:
1 file changed, 34 insertions(+), 27 deletions(-)
diff --git a/plugin/NERD_tree.vim b/plugin/NERD_tree.vim
@@ -1803,6 +1803,8 @@ function! s:initNerdTreeInPlace(dir)
endfunction
" FUNCTION: s:initNerdTreeMirror() {{{2
function! s:initNerdTreeMirror()
+
+ "get the names off all the nerd tree buffers
let treeBufNames = []
for i in range(1, tabpagenr("$"))
let nextName = s:tabpagevar(i, 'NERDTreeBufName')
@@ -1810,47 +1812,41 @@ function! s:initNerdTreeMirror()
call add(treeBufNames, nextName)
endif
endfor
+ let treeBufNames = s:unique(treeBufNames)
- let trees = {}
- for i in treeBufNames
- let treeRoot = getbufvar(i, "NERDTreeRoot")
- let trees[treeRoot.path.strForOS(0)] = i
- endfor
+ "map the option names (that the user will be prompted with) to the nerd
+ "tree buffer names
+ let options = {}
+ let i = 0
+ while i < len(treeBufNames)
+ let bufName = treeBufNames[i]
+ let treeRoot = getbufvar(bufName, "NERDTreeRoot")
+ let options[i+1 . '. ' . treeRoot.path.strForOS(0) . ' (buf name: ' . bufName . ')'] = bufName
+ let i = i + 1
+ endwhile
+ "work out which tree to mirror, if there is more than 1 then ask the user
let bufferName = ''
- if len(keys(trees)) > 1
- let options = insert(keys(trees), 'Select a tree to mirror:', 0)
- let i = 1
- while i < len(options)
- let options[i] = i . ' ' . options[i]
- let i += 1
- endwhile
-
- let choice = inputlist(options)
-
+ if len(keys(options)) > 1
+ let choice = inputlist(sort(keys(options)))
if choice < 1 || choice > len(options) || choice == ''
return
endif
-
- let bufferName = trees[keys(trees)[choice-1]]
- elseif len(keys(trees)) == 1
- let bufferName = values(trees)[0]
+ let bufferName = options[keys(options)[choice-1]]
+ elseif len(keys(options)) == 1
+ let bufferName = values(options)[0]
else
- return s:initNerdTree('')
+ call s:echo("No trees to mirror")
+ return
endif
- if s:treeExistsForTab()
- if s:isTreeOpen()
- call s:closeTree()
- endif
+ if s:treeExistsForTab() && s:isTreeOpen()
+ call s:closeTree()
endif
let t:NERDTreeBufName = bufferName
-
-
call s:createTreeWin()
exec 'buffer ' . bufferName
-
endfunction
" FUNCTION: s:tabpagevar(tabnr, var) {{{2
function! s:tabpagevar(tabnr, var)
@@ -1879,6 +1875,17 @@ endfunction
function! s:treeExistsForTab()
return exists("t:NERDTreeBufName")
endfunction
+" Function: s:unique(list) {{{2
+" returns a:list without duplicates
+function! s:unique(list)
+ let uniqlist = []
+ for elem in a:list
+ if index(uniqlist, elem) == -1
+ let uniqlist += [elem]
+ endif
+ endfor
+ return uniqlist
+endfunction
" SECTION: Public Functions {{{1
"============================================================
"Returns the node that the cursor is currently on.