<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>syntax_checkers/cucumber.vim</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -27,7 +27,7 @@ CONTENTS                                                   *NERDTree-contents*
             2.2.2.Bookmark commands...........|NERDTreeBookmarkCommands|
             2.2.3.Invalid bookmarks...........|NERDTreeInvalidBookmarks|
         2.3.NERD tree mappings................|NERDTreeMappings|
-        2.4.The NERDT tree menu...............|NERDTreeMenu|
+        2.4.The NERD tree menu................|NERDTreeMenu|
     3.Options.................................|NERDTreeOptions|
         3.1.Option summary....................|NERDTreeOptionSummary|
         3.2.Option details....................|NERDTreeOptionDetails|
@@ -1060,10 +1060,10 @@ NERDTreeRender()                                            *NERDTreeRender()*
 The author of the NERD tree is a terrible terrible monster called Martyzilla
 who gobbles up small children with milk and sugar for breakfast.
 
-He can be reached at martin_grenfell at msn.com. He would love to hear from
-you, so feel free to send him suggestions and/or comments about this plugin.
-Don't be shy --- the worst he can do is slaughter you and stuff you in the
-fridge for later ;)
+He can be reached at martin.grenfell at gmail dot com. He would love to hear
+from you, so feel free to send him suggestions and/or comments about this
+plugin.  Don't be shy --- the worst he can do is slaughter you and stuff you in
+the fridge for later ;)
 
 The latest stable versions can be found at
     http://www.vim.org/scripts/script.php?script_id=1658
@@ -1089,6 +1089,9 @@ The latest dev versions are on github
       thanks to Aggelos Orfanakos for the patch.
     - fix a bug when using the x mapping on the tree root, thanks to Bryan
       Venteicher for the patch.
+    - fix a bug where the cursor position/window size of the nerd tree buffer
+      wasnt being stored on closing the window, thanks to Richard Hart.
+    - fix a bug where NERDTreeMirror would mirror the wrong tree
 
 3.1.1
     - fix a bug where a non-listed no-name buffer was getting created every
@@ -1182,6 +1185,7 @@ just downloaded pr0n instead.
     Lucas S. Buchala
     Curtis Harvey
     Guillaume Duranceau
+    Richard Hart (hates)
 
 ==============================================================================
 8. License                                                   *NERDTreeLicense*</diff>
      <filename>doc/NERD_tree.txt</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
 &quot; ============================================================================
 &quot; File:        exec_menuitem.vim
 &quot; Description: plugin for NERD Tree that provides an execute file menu item
-&quot; Maintainer:  Martin Grenfell &lt;martin_grenfell at msn dot com&gt;
-&quot; Last Change: 6 Sep, 2009
+&quot; Maintainer:  Martin Grenfell &lt;martin.grenfell at gmail dot com&gt;
+&quot; Last Change: 22 July, 2009
 &quot; License:     This program is free software. It comes without any warranty,
 &quot;              to the extent permitted by applicable law. You can redistribute
 &quot;              it and/or modify it under the terms of the Do What The Fuck You</diff>
      <filename>nerdtree_plugin/exec_menuitem.vim</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
 &quot; ============================================================================
 &quot; File:        fs_menu.vim
 &quot; Description: plugin for the NERD Tree that provides a file system menu
-&quot; Maintainer:  Martin Grenfell &lt;martin_grenfell at msn dot com&gt;
-&quot; Last Change: 6 Sep, 2009
+&quot; Maintainer:  Martin Grenfell &lt;martin.grenfell at gmail dot com&gt;
+&quot; Last Change: 17 July, 2009
 &quot; License:     This program is free software. It comes without any warranty,
 &quot;              to the extent permitted by applicable law. You can redistribute
 &quot;              it and/or modify it under the terms of the Do What The Fuck You
@@ -85,7 +85,7 @@ function! NERDTreeMoveNode()
     let newNodePath = input(&quot;Rename the current node\n&quot; .
                           \ &quot;==========================================================\n&quot; .
                           \ &quot;Enter the new path for the node:                          \n&quot; .
-                          \ &quot;&quot;, curNode.path.str()
+                          \ &quot;&quot;, curNode.path.str())
 
     if newNodePath ==# ''
         call s:echo(&quot;Node Renaming Aborted.&quot;)</diff>
      <filename>nerdtree_plugin/fs_menu.vim</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
 &quot; ============================================================================
 &quot; File:        NERD_tree.vim
 &quot; Description: vim global plugin that provides a nice tree explorer
-&quot; Maintainer:  Martin Grenfell &lt;martin_grenfell at msn dot com&gt;
-&quot; Last Change: 6 Sep, 2009
+&quot; Maintainer:  Martin Grenfell &lt;martin.grenfell at gmail dot com&gt;
+&quot; Last Change: 9 October, 2009
 &quot; License:     This program is free software. It comes without any warranty,
 &quot;              to the extent permitted by applicable law. You can redistribute
 &quot;              it and/or modify it under the terms of the Do What The Fuck You
@@ -10,7 +10,7 @@
 &quot;              See http://sam.zoy.org/wtfpl/COPYING for more details.
 &quot;
 &quot; ============================================================================
-let s:NERD_tree_version = '3.1.1'
+let s:NERD_tree_version = '4.0.0'
 
 &quot; SECTION: Script init stuff {{{1
 &quot;============================================================
@@ -80,7 +80,12 @@ endif
 let s:NERDTreeSortStarIndex = index(g:NERDTreeSortOrder, '*')
 
 if !exists('g:NERDTreeStatusline')
-    let g:NERDTreeStatusline = &quot;%{b:NERDTreeRoot.path.str()}&quot;
+
+    &quot;the exists() crap here is a hack to stop vim spazzing out when
+    &quot;loading a session that was created with an open nerd tree. It spazzes
+    &quot;because it doesnt store b:NERDTreeRoot (its a b: var, and its a hash)
+    let g:NERDTreeStatusline = &quot;%{exists('b:NERDTreeRoot')?b:NERDTreeRoot.path.str():''}&quot;
+
 endif
 call s:initVariable(&quot;g:NERDTreeWinPos&quot;, &quot;left&quot;)
 call s:initVariable(&quot;g:NERDTreeWinSize&quot;, 31)
@@ -156,7 +161,7 @@ command! -n=0 -bar NERDTreeMirror call s:initNerdTreeMirror()
 &quot;============================================================
 augroup NERDTree
     &quot;Save the cursor position whenever we close the nerd tree
-    exec &quot;autocmd BufWinLeave *&quot;. s:NERDTreeBufName .&quot; call &lt;SID&gt;saveScreenState()&quot;
+    exec &quot;autocmd BufWinLeave &quot;. s:NERDTreeBufName .&quot;* call &lt;SID&gt;saveScreenState()&quot;
     &quot;cache bookmarks when vim loads
     autocmd VimEnter * call s:Bookmark.CacheBookmarks(0)
 
@@ -456,7 +461,6 @@ endfunction
 
 &quot;FUNCTION: KeyMap.Create(options) {{{3
 function! s:KeyMap.Create(options)
-    let newKeyMap = {}
     let newKeyMap = copy(self)
     let newKeyMap.key = a:options['key']
     let newKeyMap.quickhelpText = a:options['quickhelpText']
@@ -470,7 +474,11 @@ let s:MenuController = {}
 &quot;create a new menu controller that operates on the given menu items
 function! s:MenuController.New(menuItems)
     let newMenuController =  copy(self)
-    let newMenuController.menuItems = a:menuItems
+    if a:menuItems[0].isSeparator()
+        let newMenuController.menuItems = a:menuItems[1:-1]
+    else
+        let newMenuController.menuItems = a:menuItems
+    endif
     return newMenuController
 endfunction
 
@@ -507,9 +515,7 @@ function! s:MenuController._echoPrompt()
 
     for i in range(0, len(self.menuItems)-1)
         if self.selection == i
-            echohl todo
             echo &quot;&gt; &quot; . self.menuItems[i].text
-            echohl normal
         else
             echo &quot;  &quot; . self.menuItems[i].text
         endif
@@ -1040,7 +1046,6 @@ function! s:TreeFileNode.New(path)
     if a:path.isDirectory
         return s:TreeDirNode.New(a:path)
     else
-        let newTreeNode = {}
         let newTreeNode = copy(self)
         let newTreeNode.path = a:path
         let newTreeNode.parent = {}
@@ -1795,9 +1800,9 @@ function! s:Path.cacheDisplayString()
 endfunction
 &quot;FUNCTION: Path.changeToDir() {{{3
 function! s:Path.changeToDir()
-    let dir = self.strForCd()
+    let dir = self.str({'format': 'Cd'})
     if self.isDirectory ==# 0
-        let dir = self.getParent().strForCd()
+        let dir = self.getParent().str({'format': 'Cd'})
     endif
 
     try
@@ -1941,7 +1946,7 @@ endfunction
 function! s:Path.delete()
     if self.isDirectory
 
-        let cmd = g:NERDTreeRemoveDirCmd . self.str('escape': 1})
+        let cmd = g:NERDTreeRemoveDirCmd . self.str({'escape': 1})
         let success = system(cmd)
 
         if v:shell_error != 0
@@ -2009,7 +2014,12 @@ endfunction
 &quot;Return:
 &quot;a new Path object
 function! s:Path.getParent()
-    let path = '/'. join(self.pathSegments[0:-2], '/')
+    if s:running_windows
+        let path = self.drive . '\' . join(self.pathSegments[0:-2], '\')
+    else
+        let path = '/'. join(self.pathSegments[0:-2], '/')
+    endif
+
     return s:Path.New(path)
 endfunction
 &quot;FUNCTION: Path.getLastPathComponent(dirSlash) {{{3
@@ -2243,11 +2253,7 @@ endfunction
 &quot;
 &quot; returns a string that can be used with :cd
 function! s:Path._strForCd()
-    if s:running_windows
-        return self.str()
-    else
-        return self.str({'escape': 1})
-    endif
+    return escape(self.str(), s:escape_chars)
 endfunction
 &quot;FUNCTION: Path._strForEdit() {{{3
 &quot;
@@ -2262,6 +2268,8 @@ function! s:Path._strForEdit()
         let cwd = tolower(getcwd())
     endif
 
+    let p = escape(p, s:escape_chars)
+
     let cwd = cwd . s:Path.Slash()
 
     &quot;return a relative path if we can
@@ -2421,7 +2429,7 @@ function! s:initNerdTree(name)
     &quot;if instructed to, then change the vim CWD to the dir the NERDTree is
     &quot;inited in
     if g:NERDTreeChDirMode != 0
-        exec 'cd ' . path.strForCd()
+        call path.changeToDir()
     endif
 
     if s:treeExistsForTab()
@@ -2544,7 +2552,7 @@ function! s:initNerdTreeMirror()
             return
         endif
 
-        let bufferName = options[keys(options)[choice-1]]
+        let bufferName = options[sort(keys(options))[choice-1]]
     elseif len(keys(options)) ==# 1
         let bufferName = values(options)[0]
     else
@@ -2652,7 +2660,7 @@ function! s:centerView()
     endif
 endfunction
 &quot;FUNCTION: s:closeTree() {{{2
-&quot;Closes the NERD tree window
+&quot;Closes the primary NERD tree window for this tab
 function! s:closeTree()
     if !s:isTreeOpen()
         throw &quot;NERDTree.NoTreeFoundError: no NERDTree is open&quot;
@@ -2663,7 +2671,7 @@ function! s:closeTree()
         close
         call s:exec(&quot;wincmd p&quot;)
     else
-        :q
+        close
     endif
 endfunction
 
@@ -3345,10 +3353,10 @@ function! s:toggle(dir)
     if s:treeExistsForTab()
         if !s:isTreeOpen()
             call s:createTreeWin()
-            call s:restoreScreenState()
             if !&amp;hidden
                 call s:renderView()
             endif
+            call s:restoreScreenState()
         else
             call s:closeTree()
         endif
@@ -3574,7 +3582,7 @@ function! s:closeTreeWindow()
         exec &quot;buffer &quot; . b:NERDTreePreviousBuf
     else
         if winnr(&quot;$&quot;) &gt; 1
-            wincmd c
+            call s:closeTree()
         else
             call s:echo(&quot;Cannot close last window&quot;)
         endif
@@ -3920,7 +3928,7 @@ function! s:upDir(keepState)
         endif
 
         if g:NERDTreeChDirMode ==# 2
-            exec 'cd ' . b:NERDTreeRoot.path.strForCd()
+            call b:NERDTreeRoot.path.changeToDir()
         endif
 
         call s:renderView()</diff>
      <filename>plugin/NERD_tree.vim</filename>
    </modified>
    <modified>
      <diff>@@ -19,7 +19,7 @@ let g:loaded_syntastic_plugin = 1
 
 let s:running_windows = has(&quot;win16&quot;) || has(&quot;win32&quot;) || has(&quot;win64&quot;)
 
-if !exists(&quot;g:syntastic_enable_signs&quot;)
+if !exists(&quot;g:syntastic_enable_signs&quot;) || !has('signs')
     let g:syntastic_enable_signs = 0
 endif
 
@@ -31,6 +31,10 @@ if !exists(&quot;g:syntastic_quiet_warnings&quot;)
     let g:syntastic_quiet_warnings = 0
 endif
 
+if !exists(&quot;g:syntastic_disabled_filetypes&quot;)
+    let g:syntastic_disabled_filetypes = []
+endif
+
 &quot;load all the syntax checkers
 runtime! syntax_checkers/*.vim
 
@@ -58,17 +62,16 @@ endfunction
 &quot;
 &quot;depends on a function called SyntaxCheckers_{&amp;ft}_GetLocList() existing
 &quot;elsewhere
-&quot;
-&quot;saves and restores some settings that the syntax checking function may wish
-&quot;to screw with if it uses :lmake!
 function! s:CacheErrors()
     let b:syntastic_loclist = []
 
-    for ft in split(&amp;ft, '\.')
-        if exists(&quot;*SyntaxCheckers_&quot;. ft .&quot;_GetLocList&quot;) &amp;&amp; filereadable(expand(&quot;%&quot;))
-            let b:syntastic_loclist = extend(b:syntastic_loclist, SyntaxCheckers_{ft}_GetLocList())
-        endif
-    endfor
+    if filereadable(expand(&quot;%&quot;))
+        for ft in split(&amp;ft, '\.')
+            if s:Checkable(ft)
+                let b:syntastic_loclist = extend(b:syntastic_loclist, SyntaxCheckers_{ft}_GetLocList())
+            endif
+        endfor
+    endif
 endfunction
 
 &quot;return true if there are cached errors/warnings for this buf
@@ -92,9 +95,11 @@ function! s:ErrorsForType(type)
     return filter(copy(b:syntastic_loclist), 'v:val[&quot;type&quot;] ==# &quot;' . a:type . '&quot;')
 endfunction
 
-&quot;use &gt;&gt; to display syntax errors in the sign column
-sign define SyntasticError text=&gt;&gt; texthl=error
-sign define SyntasticWarning text=&gt;&gt; texthl=todo
+if g:syntastic_enable_signs
+    &quot;use &gt;&gt; to display syntax errors in the sign column
+    sign define SyntasticError text=&gt;&gt; texthl=error
+    sign define SyntasticWarning text=&gt;&gt; texthl=todo
+endif
 
 &quot;start counting sign ids at 5000, start here to hopefully avoid conflicting
 &quot;with any other code that places signs (not sure if this precaution is
@@ -146,7 +151,11 @@ endfunction
 function! s:ShowLocList()
     if exists(&quot;b:syntastic_loclist&quot;)
         call setloclist(0, b:syntastic_loclist)
+        let num = winnr()
         lopen
+        if num != winnr()
+            wincmd p
+        endif
     endif
 endfunction
 
@@ -225,4 +234,31 @@ function! SyntasticMake(options)
     return errors
 endfunction
 
+function! s:Checkable(ft)
+    return exists(&quot;*SyntaxCheckers_&quot;. a:ft .&quot;_GetLocList&quot;) &amp;&amp;
+                \ index(g:syntastic_disabled_filetypes, a:ft) == -1
+endfunction
+
+command! -nargs=? SyntasticEnable call s:Enable(&lt;f-args&gt;)
+command! -nargs=? SyntasticDisable call s:Disable(&lt;f-args&gt;)
+
+&quot;disable syntax checking for the given filetype (defaulting to current ft)
+function! s:Disable(...)
+    let ft = a:0 ? a:1 : &amp;filetype
+
+    if !empty(ft) &amp;&amp; index(g:syntastic_disabled_filetypes, ft) == -1
+        call add(g:syntastic_disabled_filetypes, ft)
+    endif
+endfunction
+
+&quot;enable syntax checking for the given filetype (defaulting to current ft)
+function! s:Enable(...)
+    let ft = a:0 ? a:1 : &amp;filetype
+
+    let i = index(g:syntastic_disabled_filetypes, ft)
+    if i != -1
+        call remove(g:syntastic_disabled_filetypes, i)
+    endif
+endfunction
+
 &quot; vim: set et sts=4 sw=4:</diff>
      <filename>plugin/syntastic.vim</filename>
    </modified>
    <modified>
      <diff>@@ -20,7 +20,7 @@ if !executable(&quot;ruby&quot;) || !executable(&quot;cat&quot;)
 endif
 
 function! SyntaxCheckers_eruby_GetLocList()
-    let makeprg='cat '. expand(&quot;%&quot;) . ' \| ruby -e &quot;require \&quot;erb\&quot;; puts ERB.new(ARGF.read, nil, \&quot;-\&quot;).src&quot; \| ruby -c'
+    let makeprg='cat '. expand(&quot;%&quot;) . ' \| RUBYOPT= ruby -e &quot;require \&quot;erb\&quot;; puts ERB.new(ARGF.read, nil, \&quot;-\&quot;).src&quot; \| RUBYOPT= ruby -c'
     let errorformat='%-GSyntax OK,%E-:%l: syntax error\, %m,%Z%p^,%W-:%l: warning: %m,%Z%p^,%-C%.%#'
     let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
 </diff>
      <filename>syntax_checkers/eruby.vim</filename>
    </modified>
    <modified>
      <diff>@@ -25,8 +25,7 @@ function! SyntaxCheckers_haml_GetLocList()
         &quot;haml only outputs the first error, so parse it ourselves
         let line = substitute(output, '^Syntax error on line \(\d*\):.*', '\1', '')
         let msg = substitute(output, '^Syntax error on line \d*:\(.*\)', '\1', '')
-        &quot;return [{'lnum' : line, 'text' : msg, 'bufnr': bufnr(&quot;&quot;), 'type': 'E' }]
-        return [{'lnum' : line, 'text' : msg, 'bufnr': bufnr(&quot;&quot;)}]
+        return [{'lnum' : line, 'text' : msg, 'bufnr': bufnr(&quot;&quot;), 'type': 'E' }]
     endif
     return []
 endfunction</diff>
      <filename>syntax_checkers/haml.vim</filename>
    </modified>
    <modified>
      <diff>@@ -21,6 +21,6 @@ endif
 
 function! SyntaxCheckers_javascript_GetLocList()
     let makeprg = &quot;jsl -nologo -nofilelisting -nosummary -nocontext -process %&quot;
-    let errorformat='%W%f(%l): lint warning: %m,%-Z%p^,%E%f(%l): SyntaxError: %m,%-Z%p^,%-G'
+    let errorformat='%W%f(%l): lint warning: %m,%-Z%p^,%W%f(%l): warning: %m,%-Z%p^,%E%f(%l): SyntaxError: %m,%-Z%p^,%-G'
     return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
 endfunction</diff>
      <filename>syntax_checkers/javascript.vim</filename>
    </modified>
    <modified>
      <diff>@@ -20,7 +20,7 @@ if !executable(&quot;ruby&quot;)
 endif
 
 function! SyntaxCheckers_ruby_GetLocList()
-    let makeprg = 'ruby -w -c %'
+    let makeprg = 'RUBYOPT= ruby -w -c %'
     let errorformat =  '%-GSyntax OK,%E%f:%l: syntax error\, %m,%Z%p^,%W%f:%l: warning: %m,%Z%p^,%-C%.%#'
 
     return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })</diff>
      <filename>syntax_checkers/ruby.vim</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>nerdtree_plugin/git_menu.vim</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>534f158e8fbe76bd40b37ebf5c569b8cf9f8a437</id>
    </parent>
  </parents>
  <author>
    <name>marty</name>
    <email>martin_grenfell@msn.com</email>
  </author>
  <url>http://github.com/scrooloose/vimfiles/commit/e8375a7ceedd53633f8f73fc87044695d7dd8f67</url>
  <id>e8375a7ceedd53633f8f73fc87044695d7dd8f67</id>
  <committed-date>2009-10-18T15:01:07-07:00</committed-date>
  <authored-date>2009-10-18T14:59:42-07:00</authored-date>
  <message>latest nerdtree and syntastic haxx</message>
  <tree>75ee519f37797d5bb7a91c762e8b96b965706549</tree>
  <committer>
    <name>marty</name>
    <email>martin_grenfell@msn.com</email>
  </committer>
</commit>
