changeset 519:d50452846776

updated for version 7.0145
author vimboss
date Sat, 10 Sep 2005 19:22:57 +0000
parents 100bdadd7667
children 07134f5e78da
files runtime/autoload/netrw.vim runtime/doc/eval.txt runtime/doc/fold.txt runtime/doc/insert.txt runtime/doc/options.txt runtime/doc/pi_netrw.txt runtime/doc/tags runtime/plugin/NetrwPlugin.vim runtime/syntax/netrwlist.vim src/gui.c src/screen.c src/version.h
diffstat 12 files changed, 694 insertions(+), 337 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,8 +1,8 @@
 " netrw.vim: Handles file transfer and remote directory listing across a network
 "            AUTOLOAD PORTION
-" Last Change:	Aug 19, 2005
+" Date:		Sep 09, 2005
+" Version:	69
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" Version:	65
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
 " Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
@@ -17,7 +17,17 @@
 "  But be doers of the Word, and not only hearers, deluding your own selves {{{1
 "  (James 1:22 RSV)
 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-let s:keepcpo= &cpo
+
+" Exception for &cp: {{{1
+if &cp
+  finish
+endif
+if v:version < 700
+ echohl WarningMsg | echo "***netrw*** you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw" | echohl None
+ finish
+endif
+let g:loaded_netrw = "v69"
+let s:keepcpo      = &cpo
 set cpo&vim
 " call Decho("doing autoload/netrw.vim")
 
@@ -90,8 +100,10 @@ if !exists("g:netrw_sort_direction")
  " alternative: reverse  (z y x ...)
  let g:netrw_sort_direction= "normal"
 endif
-if !exists("g:netrw_longlist") || g:netrw_longlist == 0
+if !exists("g:netrw_longlist")
  let g:netrw_longlist= 0
+endif
+if g:netrw_longlist == 0 || g:netrw_longlist == 2
  let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
 else
  let g:netrw_longlist= 1
@@ -275,8 +287,9 @@ fun! netrw#NetRead(...)
  
   " get name of a temporary file and set up shell-quoting character
   let tmpfile= tempname()
+  let tmpfile= substitute(tmpfile,'\','/','ge')
   if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
-   echohl Error | echo "***netrw*** your ".substitute(tmpfile,'[^/]\+$','','e')." directory is missing!"
+   echohl Error | echo "***netrw*** your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!"
    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 "   call Dret("NetRead")
    return
@@ -661,11 +674,7 @@ fun! s:NetGetFile(readcmd, fname, method
 "   call Dredir("ls!","starting buffer list")
 
    " rename the current buffer to the temp file (ie. fname)
-   if v:version < 700
-    exe "file ".fname
-   else
-    keepalt exe "file ".fname
-   endif
+   keepalt exe "file ".fname
 "   call Dredir("ls!","after renaming current buffer to <".fname.">")
 
    " edit temporary file
@@ -673,11 +682,7 @@ fun! s:NetGetFile(readcmd, fname, method
 "   call Dredir("ls!","after editing temporary file")
 
    " rename buffer back to remote filename
-   if v:version < 700
-    exe "file ".rfile
-   else
-    keepalt exe "file ".rfile
-   endif
+   keepalt exe "file ".rfile
 "   call Dredir("ls!","renaming buffer back to remote filename<".rfile.">")
    let line1 = 1
    let line2 = line("$")
@@ -1015,7 +1020,8 @@ endfun
 "  g:netrw_list_cmd has a string, HOSTNAME, that needs to be substituted
 "  with the requested remote hostname first.
 fun! s:NetBrowse(dirname)
-"  call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".g:netrw_longlist)
+  if !exists("w:netrw_longlist")|let w:netrw_longlist= g:netrw_longlist|endif
+"  call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".w:netrw_longlist)
 
   if exists("s:netrw_skipbrowse")
    unlet s:netrw_skipbrowse
@@ -1127,7 +1133,8 @@ fun! s:NetBrowse(dirname)
 "   call Decho("new path<".path.">")
 
    " remote-read the requested file into current buffer
-   enew!
+   keepjumps keepalt enew!
+   set ma
 "   call Decho("exe file .method."://".user.machine."/".escape(path,s:netrw_cd_escape))
    exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape)
    exe "silent doau BufReadPre ".fname
@@ -1138,7 +1145,7 @@ fun! s:NetBrowse(dirname)
    " save certain window-oriented variables into buffer-oriented variables
    call s:BufWinVars()
    call s:NetOptionRestore()
-   setlocal nonu nomod noma
+   setlocal nomod
 
 "   call Dret("NetBrowse : file<".fname.">")
    return
@@ -1162,7 +1169,7 @@ fun! s:NetBrowse(dirname)
    endif
   else
 "   call Decho("generate a new buffer")
-   enew!
+   keepjumps keepalt enew!
   endif
 
   " rename file to reflect where its from
@@ -1178,15 +1185,20 @@ fun! s:NetBrowse(dirname)
 
   " set up buffer-local mappings
 "  call Decho("set up buffer-local mappings")
-  nnoremap <buffer> <silent> <cr>	:exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
+  nnoremap <buffer> <silent> <cr>	:call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
   nnoremap <buffer> <silent> <c-l>	:call <SID>NetRefresh(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr>
   nnoremap <buffer> <silent> a		:let g:netrw_hide=(g:netrw_hide+1)%3<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
-  nnoremap <buffer> <silent> b		:<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
-  nnoremap <buffer> <silent> B		:<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr>
+  if w:netrw_longlist != 2
+   nnoremap <buffer> <silent> b		:<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
+   nnoremap <buffer> <silent> B		:<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr>
+  endif
+  nnoremap <buffer> <silent> Nb		:<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
+  nnoremap <buffer> <silent> NB		:<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
   nnoremap <buffer> <silent> <c-h>	:call <SID>NetHideEdit(0)<cr>
   nnoremap <buffer> <silent> i		:call <SID>NetLongList(0)<cr>
   nnoremap <buffer> <silent> o		:call <SID>NetSplit(0)<cr>
+  nnoremap <buffer> <silent> O		:call <SID>NetObtain()<cr>
   nnoremap <buffer> <silent> q		:<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr>
   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
   nnoremap <buffer> <silent> s		:call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
@@ -1194,14 +1206,14 @@ fun! s:NetBrowse(dirname)
   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
   nnoremap <buffer> <silent> v		:call <SID>NetSplit(1)<cr>
-  nnoremap <buffer> <silent> x		:exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
-  nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
-  exe 'nnoremap <buffer> <silent> <del>	:exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
+  nnoremap <buffer> <silent> x		:call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
+  nnoremap <buffer> <silent> <2-leftmouse>	:call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
+  exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
   exe 'nnoremap <buffer> <silent> d	:call <SID>NetMakeDir("'.user.machine.'")<cr>'
-  exe 'nnoremap <buffer> <silent> D	:exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
+  exe 'nnoremap <buffer> <silent> D	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
   exe 'vnoremap <buffer> <silent> D	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
-  exe 'nnoremap <buffer> <silent> R	:exe "norm! 0"<bar>call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
+  exe 'nnoremap <buffer> <silent> R	:call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
   exe 'vnoremap <buffer> <silent> R	:call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
   nnoremap <buffer> ?			:he netrw-browse-cmds<cr>
   setlocal ma nonu nowrap
@@ -1209,7 +1221,7 @@ fun! s:NetBrowse(dirname)
   " Set up the banner
 "  call Decho("set up the banner: sortby<".g:netrw_sort_by."> method<".method.">")
   keepjumps put ='\" ==========================================================================='
-  keepjumps put ='\" Netrw Remote Directory Listing'
+  keepjumps put ='\" Netrw Remote Directory Listing                                 (netrw '.g:loaded_netrw.')'
   keepjumps put ='\"   '.bufname
   let w:netrw_bannercnt = 7
   let sortby            = g:netrw_sort_by
@@ -1246,7 +1258,7 @@ fun! s:NetBrowse(dirname)
    call s:NetBrowseFtpCmd(path,listcmd)
    keepjumps 1d
 
-   if !g:netrw_longlist
+   if w:netrw_longlist == 0 || w:netrw_longlist == 2
     " shorten the listing
 "    call Decho("generate short listing")
     exe "keepjumps ".w:netrw_bannercnt
@@ -1255,6 +1267,7 @@ fun! s:NetBrowse(dirname)
     if g:netrw_ftp_browse_reject != ""
      exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
     endif
+    silent! keepjumps %s/\r$//e
 
     " if there's no ../ listed, then put ./ and ../ in
     let line1= line(".")
@@ -1269,9 +1282,9 @@ fun! s:NetBrowse(dirname)
     keepjumps norm! 0
 
     " more cleanup
-    exe 'keepjumps silent! '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
-    exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
-    exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
+    exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
+    exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
+    exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
    endif
 
   else
@@ -1305,7 +1318,7 @@ fun! s:NetBrowse(dirname)
     call s:NetrwListHide()
    endif
 
-   if g:netrw_longlist
+   if w:netrw_longlist == 1
     " do a long listing; these substitutions need to be done prior to sorting
 "    call Decho("manipulate long listing")
 
@@ -1328,33 +1341,34 @@ fun! s:NetBrowse(dirname)
     keepjumps norm! 0
     endif
 
-    exe 'keepjumps silent '.w:netrw_bannercnt.',$s/ -> .*$//e'
-    exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
-    exe w:netrw_bannercnt
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e'
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
+    exe 'silent keepjumps '.w:netrw_bannercnt
    endif
 
    if line("$") >= w:netrw_bannercnt
     if g:netrw_sort_by =~ "^n"
      call s:SetSort()
-     if v:version < 700
-      exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
-     elseif g:netrw_sort_direction =~ 'n'
-      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
+     if g:netrw_sort_direction =~ 'n'
+      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
      else
-      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
+      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
+     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
     endif
-    if g:netrw_longlist
-     " shorten the list to keep its width <= 80 characters
-     exe "keepjumps silent ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
+    if w:netrw_longlist == 1
+     " shorten the list to keep its width <= winwidth characters
+     exe "silent keepjumps ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
     endif
    endif
   endif
 
-  " cleanup any windows mess at end-of-line
-  keepjumps silent! %s/\r$//e
-  exe "keepjumps ".w:netrw_bannercnt
+  call s:NetrwWideListing()
+  if line("$") >= w:netrw_bannercnt
+   " place cursor on the top-left corner of the file listing
+   exe "keepjumps ".w:netrw_bannercnt
+   norm! 0
+  endif
 
   call s:NetOptionRestore()
   setlocal nomod noma nonu
@@ -1412,7 +1426,19 @@ fun! s:NetGetWord()
 "  call Dfunc("NetGetWord() line#".line("."))
   call s:UseBufWinVars()
 
+  " insure that w:netrw_longlist is set up
+  if !exists("w:netrw_longlist")
+   if exists("g:netrw_longlist")
+    let w:netrw_longlist= g:netrw_longlist
+   else
+    let w:netrw_longlist= 0
+   endif
+  endif
+
   if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
+   " Active Banner support
+"   call Decho("active banner handling")
+   norm! 0
    let dirname= "./"
    let curline= getline(".")
    if curline =~ '"\s*Sorted by\s'
@@ -1431,14 +1457,40 @@ fun! s:NetGetWord()
     let s:netrw_skipbrowse= 1
     echo 'Pressing "a" also works'
    elseif line("$") > w:netrw_bannercnt
-    exe w:netrw_bannercnt
+    exe 'silent keepjumps '.w:netrw_bannercnt
    endif
+
+  elseif w:netrw_longlist == 0
+"   call Decho("thin column handling")
+   norm! 0
+   let dirname= getline(".")
+
+  elseif w:netrw_longlist == 1
+"   call Decho("long column handling")
+   norm! 0
+   let dirname= substitute(getline("."),'^\(\%(\S\+\s\)*\S\+\).\{-}$','\1','e')
+
   else
+"   call Decho("obtain word from wide listing")
    let dirname= getline(".")
-   if dirname =~ '\t'
-    let dirname= substitute(dirname,'\t.*$','','e')
+
+   if !exists("b:netrw_cpf")
+    let b:netrw_cpf= 0
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
+"    call Decho("computed cpf")
    endif
+
+   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
+"   call Decho("virtcol=".virtcol(".")." cpf=".b:netrw_cpf." bannercnt=".w:netrw_bannercnt." filestart=".filestart)
+"   call Decho("1: dirname<".dirname.">")
+   if filestart > 0|let dirname= substitute(dirname,'^.\{'.filestart.'}','','')|endif
+"   call Decho("2: dirname<".dirname.">")
+   let dirname   = substitute(dirname,'^\(.\{'.b:netrw_cpf.'}\).*$','\1','e')
+"   call Decho("3: dirname<".dirname.">")
+   let dirname   = substitute(dirname,'\s\+$','','e')
+"   call Decho("4: dirname<".dirname.">")
   endif
+
 "  call Dret("NetGetWord <".dirname.">")
   return dirname
 endfun
@@ -1646,7 +1698,7 @@ fun! s:NetBrowseX(fname,remote)
    " create a local copy
    let fname= tempname().".".exten
 "   call Decho("create a local copy of <".a:fname."> as <".fname.">")
-   exe "keepjumps silent bot 1new ".a:fname
+   exe "silent keepjumps bot 1new ".a:fname
    set bh=delete
    exe "w! ".fname
    q
@@ -1717,13 +1769,15 @@ fun! s:NetBrowseFtpCmd(path,cmd)
   let curline= w:netrw_bannercnt+1
   exe "silent! keepjumps ".curline.",$d"
 
-   ".........................................
-  if w:netrw_method == 2 || w:netrw_method == 5
+  ".........................................
+  if w:netrw_method == 2 || w:netrw_method == 5 
    " ftp + <.netrc>:  Method #2
    if a:path != ""
     put ='cd '.a:path
+"    call Decho("ftp:  cd ".a:path)
    endif
    exe "put ='".a:cmd."'"
+"   call Decho("ftp:  ".a:cmd)
 "    redraw!|call inputsave()|call input("Pausing...")|call inputrestore()
    if exists("g:netrw_port") && g:netrw_port != ""
 "    call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
@@ -1769,14 +1823,14 @@ fun! s:NetBrowseFtpCmd(path,cmd)
 
   " cleanup for Windows
   if has("win32") || has("win95") || has("win64") || has("win16")
-   keepjumps silent!! %s/\r$//e
+   silent! keepjumps! %s/\r$//e
   endif
   if a:cmd == "dir"
    " infer directory/link based on the file permission string
-   keepjumps silent! g/d\%([-r][-w][-x]\)\{3}/s@$@/@
-   keepjumps silent! g/l\%([-r][-w][-x]\)\{3}/s/$/@/
-   if !g:netrw_longlist
-    exe "keepjumps silent! ".curline.',$s/^\%(\S\+\s\+\)\{8}//e'
+   silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@
+   silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/
+   if w:netrw_longlist == 0 || w:netrw_longlist == 2
+    exe "silent! keepjumps ".curline.',$s/^\%(\S\+\s\+\)\{8}//e'
    endif
   endif
 
@@ -1814,9 +1868,9 @@ fun! s:NetrwListHide()
    " Prune the list by hiding any files which match
 "   call Decho("pruning <".hide."> listhide<".listhide.">")
    if g:netrw_hide == 1
-    exe 'keepjumps silent '.w:netrw_bannercnt.',$g~'.hide.'~d'
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g~'.hide.'~d'
    elseif g:netrw_hide == 2
-    exe 'keepjumps silent '.w:netrw_bannercnt.',$v~'.hide.'~d'
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$v~'.hide.'~d'
    endif
   endwhile
 
@@ -1866,20 +1920,25 @@ endfun
 " ---------------------------------------------------------------------
 "  NetLongList: {{{2
 fun! s:NetLongList(mode)
-"  call Dfunc("NetLongList(mode=".a:mode.") netrw_longlist=".g:netrw_longlist)
-  call netrw#NetSavePosn()
-
-  if g:netrw_longlist != 0
-   " turn long listing off
-"   call Decho("turn long listing off")
-   let g:netrw_longlist = 0
+"  call Dfunc("NetLongList(mode=".a:mode.") netrw_longlist=".w:netrw_longlist)
+  let fname            = s:NetGetWord()
+  let w:netrw_longlist = (w:netrw_longlist + 1) % 3
+"  call Decho("fname<".fname.">")
+
+  if w:netrw_longlist == 0
+   " use one column listing
+"   call Decho("use one column list")
    let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
 
+  elseif w:netrw_longlist == 1
+   " use long list
+"   call Decho("use long list")
+   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
+
   else
-   " turn long listing on
-"   call Decho("turn long listing on")
-   let g:netrw_longlist = 1
-   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
+   " give wide list
+"   call Decho("use wide list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
   endif
   setlocal ma
 
@@ -1893,9 +1952,65 @@ fun! s:NetLongList(mode)
    silent call s:LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,"./"))
   endif
 
-  call netrw#NetRestorePosn()
-
-"  call Dret("NetLongList : g:netrw_longlist=".g:netrw_longlist)
+  " keep cursor on the filename
+  silent keepjumps $
+  if fname =~ '/$'
+   silent call search('\%(^\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bW')
+  else
+   silent call search('\%(^\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bW')
+  endif
+
+"  call Dret("NetLongList : w:netrw_longlist=".w:netrw_longlist)
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwWideListing: {{{2
+fun! s:NetrwWideListing()
+"  call Dfunc("NetrwWideListing()")
+
+  if w:netrw_longlist == 2
+   " look for longest filename (cpf=characters per filename)
+   " cpf: characters per file
+   " fpl: files per line
+   " fpc: files per column
+   set ma
+   let b:netrw_cpf= 0
+   if line("$") >= w:netrw_bannercnt
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
+  else
+"   call Dret("NetrwWideListing")
+   return
+  endif
+"   call Decho("max file strlen+1=".b:netrw_cpf)
+   let b:netrw_cpf= b:netrw_cpf + 1
+
+   " determine qty files per line (fpl)
+   let w:netrw_fpl= winwidth(0)/b:netrw_cpf
+"   call Decho("fpl= ".winwidth(0)."/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
+
+   " make wide display
+   exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^.*$/\=printf("%-'.b:netrw_cpf.'s",submatch(0))/'
+   let fpc         = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
+   let newcolstart = w:netrw_bannercnt + fpc
+   let newcolend   = newcolstart + fpc - 1
+"   call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]")
+   while line("$") >= newcolstart
+    if newcolend > line("$") | let newcolend= line("$") | endif
+    let newcolqty= newcolend - newcolstart
+    exe newcolstart
+    if newcolqty == 0
+     exe "silent keepjumps norm! 0\<c-v>$hx".w:netrw_bannercnt."G$p"
+    else
+     exe "silent keepjumps norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p'
+    endif
+    exe "silent keepjumps ".newcolstart.','.newcolend.'d'
+    exe 'silent keepjumps '.w:netrw_bannercnt
+   endwhile
+   exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
+   set noma nomod
+  endif
+
+"  call Dret("NetrwWideListing")
 endfun
 
 " ---------------------------------------------------------------------
@@ -2023,7 +2138,7 @@ fun! s:NetBookmarkDir(chg,curdir)
   if exists("w:netrw_bannercnt") && line(".") <= w:netrw_bannercnt
    " looks like a "b" was pressed while in the banner region
    if line("$") > w:netrw_bannercnt
-    exe w:netrw_bannercnt
+    exe 'silent keepjumps '.w:netrw_bannercnt
    endif
    echo ""
 "  call Dret("NetBookmarkDir - ignoring")
@@ -2119,6 +2234,121 @@ fun! s:NetBookmarkDir(chg,curdir)
 "  call Dret("NetBookmarkDir")
 endfun
 
+" ---------------------------------------------------------------------
+" NetObtain: obtain file under cursor (for remote browsing support) {{{2
+fun! s:NetObtain()
+  if !exists("s:netrw_users_stl")
+   let s:netrw_users_stl= &stl
+  endif
+  let fname= expand("<cWORD>")
+  exe 'set stl=%f\ %h%m%r%=Obtaining\ '.escape(fname,' ')
+  redraw!
+
+"  call Dfunc("NetObtain() method=".w:netrw_method)
+  if exists("w:netrw_method") && w:netrw_method =~ '[235]'
+   if executable("ftp")
+    let curdir = expand("%")
+    let path   = substitute(curdir,'ftp://[^/]\+/','','e')
+    let curline= line(".")
+    let endline= line("$")+1
+    set ma
+    keepjumps $
+
+    ".........................................
+    if w:netrw_method == 2
+     " ftp + <.netrc>: Method #2
+     if path != ""
+      put ='cd '.path
+"      call Decho("ftp:  cd ".path)
+     endif
+     put ='get '.fname
+"     call Decho("ftp:  get ".fname)
+     if exists("g:netrw_port") && g:netrw_port != ""
+"      call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
+      exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
+     else
+"      call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
+      exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
+     endif
+
+   ".........................................
+  elseif w:netrw_method == 3
+   " ftp + machine,id,passwd,filename: Method #3
+    setlocal ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+"     call Decho('ftp:  open '.g:netrw_machine.' '.g:netrw_port)
+    else
+     put ='open '.g:netrw_machine
+"     call Decho('ftp:  open '.g:netrw_machine
+    endif
+ 
+    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+     put =g:netrw_uid
+     put =g:netrw_passwd
+"     call Decho('ftp:  g:netrw_uid')
+"     call Decho('ftp:  g:netrw_passwd')
+    else
+     put ='user '.g:netrw_uid.' '.g:netrw_passwd
+"     call Decho('user '.g:netrw_uid.' '.g:netrw_passwd)
+    endif
+ 
+   if a:path != ""
+    put ='cd '.a:path
+"    call Decho('cd '.a:path)
+   endif
+   exe "put ='".a:cmd."'"
+"   call Decho("ftp:  ".a:cmd)
+ 
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+"    call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
+    exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i -n"
+   
+    ".........................................
+    else
+      echo "***warning*** unable to comply with your request<" . choice . ">"
+    endif
+    " restore
+    exe "silent! ".endline.",$d"
+    exe "keepjumps ".curline
+    set noma nomod
+   else
+    if !exists("g:netrw_quiet")
+     echohl Error | echo "***netrw*** this system doesn't support ftp" | echohl None
+     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+    endif
+"    call Dret("NetObtain")
+    return
+   endif
+
+  ".........................................
+  else
+   " scp: Method#4
+   if exists("g:netrw_port") && g:netrw_port != ""
+    let useport= " -P ".g:netrw_port
+   else
+    let useport= ""
+   endif
+   if g:netrw_cygwin == 1
+    let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+"    call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(fname,' ?&')." .")
+    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(fname,' ?&')." ."
+   else
+"    call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(fname,' ?&')." .")
+    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(fname,' ?&')." ."
+   endif
+  endif
+
+  " restore status line
+  let &stl= s:netrw_users_stl
+  redraw!
+
+"  call Dret("NetObtain")
+endfun
+
 " ==========================================
 "  Local Directory Browsing Support:    {{{1
 " ==========================================
@@ -2138,6 +2368,7 @@ endfun
 " ---------------------------------------------------------------------
 " DirBrowse: supports local file/directory browsing {{{2
 fun! netrw#DirBrowse(dirname)
+  if !exists("w:netrw_longlist")|let w:netrw_longlist= g:netrw_longlist|endif
 "  call Dfunc("DirBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr()." sortby=".g:netrw_sort_by)
 "  call Dredir("ls!")
 
@@ -2181,18 +2412,10 @@ fun! netrw#DirBrowse(dirname)
 
   " get cleared buffer
   if bufnum < 0 || !bufexists(bufnum)
-   if v:version < 700
-    enew!
-   else
-    keepalt enew!
-   endif
+   keepjumps keepalt enew!
 "   call Decho("enew buffer")
   else
-   if v:version < 700
-    exe "b ".bufnum
-   else
-    exe "keepalt b ".bufnum
-   endif
+   exe "keepalt b ".bufnum
    if exists("s:last_sort_by") && g:netrw_sort_by == s:last_sort_by
     if getline(2) =~ '^" Directory Listing '
      if !g:netrw_keepdir
@@ -2246,11 +2469,7 @@ fun! netrw#DirBrowse(dirname)
 
   " make this buffer not-a-file, modifiable, not line-numbered, etc
   setlocal bh=hide bt=nofile nobl ma nonu
-  if v:version < 700
-   silent! %d
-  else
-   keepalt silent! %d
-  endif
+  keepalt silent! %d
 
   " ---------------------------
   "  Perform Directory Listing:
@@ -2260,18 +2479,23 @@ fun! netrw#DirBrowse(dirname)
 
   " set up all the maps
 "  call Decho("Setting up local browser maps")
-  nnoremap <buffer> <silent> <cr>	:exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
+  nnoremap <buffer> <silent> <cr>	:call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
   nnoremap <buffer> <silent> <c-l>	:set ma<bar>%d<bar>call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<bar>redraw!<cr>
   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'../'))<cr>
   nnoremap <buffer> <silent> a		:let g:netrw_hide=(g:netrw_hide+1)%3<bar>exe "norm! 0"<bar>call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr>
-  nnoremap <buffer> <silent> b		:<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
-  nnoremap <buffer> <silent> B		:<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
+  if w:netrw_longlist != 2
+   nnoremap <buffer> <silent> b		:<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> B		:<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
+  endif
+  nnoremap <buffer> <silent> Nb		:<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
+  nnoremap <buffer> <silent> NB		:<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
   nnoremap <buffer> <silent> c		:exe "cd ".b:netrw_curdir<cr>
   nnoremap <buffer> <silent> d		:call <SID>NetMakeDir("")<cr>
   nnoremap <buffer> <silent> <c-h>	:call <SID>NetHideEdit(1)<cr>
   nnoremap <buffer> <silent> i		:call <SID>NetLongList(1)<cr>
   nnoremap <buffer> <silent> o		:call <SID>NetSplit(2)<cr>
-  nnoremap <buffer> <silent> p		:exe "norm! 0"<bar>call <SID>LocalPreview(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),1))<cr>
+  nnoremap <buffer> <silent> O		:call <SID>LocalObtain()<cr>
+  nnoremap <buffer> <silent> p		:call <SID>LocalPreview(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),1))<cr>
   nnoremap <buffer> <silent> q		:<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<cr>
   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr>
   nnoremap <buffer> <silent> s		:call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
@@ -2279,15 +2503,15 @@ fun! netrw#DirBrowse(dirname)
   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
   nnoremap <buffer> <silent> v		:call <SID>NetSplit(3)<cr>
-  nnoremap <buffer> <silent> x		:exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)<cr>
-  nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
+  nnoremap <buffer> <silent> x		:call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)"<cr>
+  nnoremap <buffer> <silent> <2-leftmouse>	:call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
   nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
   nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
-  exe 'nnoremap <buffer> <silent> <del>	:exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
+  exe 'nnoremap <buffer> <silent> <del>	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
   exe 'vnoremap <buffer> <silent> <del>	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
-  exe 'nnoremap <buffer> <silent> D	:exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
+  exe 'nnoremap <buffer> <silent> D	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
   exe 'vnoremap <buffer> <silent> D	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
-  exe 'nnoremap <buffer> <silent> R	:exe "norm! 0"<bar>call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
+  exe 'nnoremap <buffer> <silent> R	:call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
   exe 'vnoremap <buffer> <silent> R	:call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
   exe 'nnoremap <buffer> <silent> <Leader>m :call <SID>NetMakeDir("")<cr>'
   nnoremap <buffer> ?			:he netrw-dir<cr>
@@ -2357,30 +2581,30 @@ fun! netrw#DirBrowse(dirname)
     if g:netrw_sort_by =~ "^n"
      call s:SetSort()
 
-     if v:version < 700
-      exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
-     elseif g:netrw_sort_direction =~ 'n'
-      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
+     if g:netrw_sort_direction =~ 'n'
+      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
      else
-      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
+      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
+     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
 
     else
-     if v:version < 700
-      exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
-     elseif g:netrw_sort_direction =~ 'n'
-      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
+     if g:netrw_sort_direction =~ 'n'
+      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
      else
-      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
+      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
+     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
     endif
 
    endif
   endif
+
+  call s:NetrwWideListing()
   if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
-   exe w:netrw_bannercnt
+   " place cursor on the top-left corner of the file listing
+   exe 'silent '.w:netrw_bannercnt
+   norm! 0
   endif
 
   " record previous current directory
@@ -2427,6 +2651,7 @@ fun! s:LocalBrowseList()
 "  call Decho("filelist<".filelist.">")
   endif
   let filelist= substitute(filelist,'\n\{2,}','\n','ge')
+  let filelist= substitute(filelist,'\','/','ge')
 
 "  call Decho("dirname<".dirname.">")
 "  call Decho("dirnamelen<".dirnamelen.">")
@@ -2453,14 +2678,10 @@ fun! s:LocalBrowseList()
 "   call Decho("filename<".filename.">")
 "   call Decho("pfile   <".pfile.">")
 
-   if g:netrw_longlist
+   if w:netrw_longlist == 1
     let sz   = getfsize(filename)
-    if v:version <= 700
-     let fsz  = strpart("               ",1,15-strlen(sz)).sz
-     let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
-    else
-     let pfile= printf('%-'.g:netrw_maxfilenamelen.'s%15d%s',pfile,sz,getftime(filename))
-    endif
+    let fsz  = strpart("               ",1,15-strlen(sz)).sz
+    let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
 "    call Decho("sz=".sz." fsz=".fsz)
    endif
 
@@ -2490,7 +2711,7 @@ fun! s:LocalBrowseList()
   endwhile
   
   " cleanup any windows mess at end-of-line
-  keepjumps silent! %s/\r$//e
+  silent! keepjumps %s/\r$//e
   setlocal ts=32
 
 "  call Dret("LocalBrowseList")
@@ -2521,6 +2742,7 @@ fun! s:LocalBrowseChgDir(dirname,newdir,
 "    call Decho("dirname<".dirname."> netrw_cd_escape<".s:netrw_cd_escape.">")
 "    call Decho("about to edit<".escape(dirname,s:netrw_cd_escape).">")
     exe "e! ".escape(dirname,s:netrw_cd_escape)
+    set ma nomod
    endif
 
   elseif newdir == './'
@@ -2620,11 +2842,11 @@ fun! s:LocalBrowseRm(path) range
       if errcode != 0
        if has("unix")
 "        call Decho("3rd attempt to remove directory<".rmfile.">")
-	call system("rm ".rmfile)
+call system("rm ".rmfile)
         if v:shell_error != 0 && !exists("g:netrw_quiet")
          echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
          call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-	endif
+endif
        elseif !exists("g:netrw_quiet")
         echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
         call inputsave()|call input("Press <cr> to continue")|call inputrestore()
@@ -2695,6 +2917,24 @@ fun! s:LocalBrowseRename(path) range
 endfun
 
 " ---------------------------------------------------------------------
+" LocalObtain: copy selected file to current working directory {{{2
+fun! s:LocalObtain()
+"  call Dfunc("LocalObtain()")
+  if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
+   let fname= expand("<cWORD>")
+   let fcopy= readfile(b:netrw_curdir."/".fname,"b")
+   call writefile(fcopy,getcwd()."/".fname,"b")
+  elseif !exists("b:netrw_curdir")
+   echohl Error | echo "***netrw*** local browsing directory doesn't exist!"
+   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+  else
+   echohl Error | echo "***netrw*** local browsing directory and current directory are identical"
+   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+  endif
+"  call Dret("LocalObtain")
+endfun
+
+" ---------------------------------------------------------------------
 " LocalPreview: {{{2
 fun! s:LocalPreview(path) range
 "  call Dfunc("LocalPreview(path<".a:path.">)")
@@ -2778,7 +3018,7 @@ fun! netrw#Explore(indx,dosplit,style,..
   elseif a:1 =~ '\*\*/' || a:indx < 0
    " Nexplore Pexplore -or-  Explore **/...
 
-   if has("path_extra") && v:version >= 700
+   if has("path_extra")
     if !exists("w:netrw_explore_indx")
      let w:netrw_explore_indx= 0
     endif
@@ -2804,8 +3044,8 @@ fun! netrw#Explore(indx,dosplit,style,..
 
     " NetrwStatusLine support
     let w:netrw_explore_indx= indx
-    if !exists("s:netrw_explore_stl")
-     let s:netrw_explore_stl= &stl
+    if !exists("s:netrw_users_stl")
+     let s:netrw_users_stl= &stl
     endif
     set stl=%f\ %h%m%r%=%{NetrwStatusLine()}
 "    call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
@@ -2832,9 +3072,7 @@ fun! netrw#Explore(indx,dosplit,style,..
 "    call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
 
    else
-    if v:version < 700
-     echohl WarningMsg | echo "***netrw*** you need vim version 7.0 or later for Exploring with **!" | echohl None
-    elseif !exists("g:netrw_quiet")
+    if !exists("g:netrw_quiet")
      echohl WarningMsg | echo "***netrw*** your vim needs the +path_extra feature for Exploring with **!" | echohl None | echohl None
     endif
     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
@@ -2854,7 +3092,8 @@ endfun
 fun! NetrwStatusLine()
 "  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".")
   if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr(".") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
-   let &stl= s:netrw_explore_stl
+   " restore user's status line
+   let &stl= s:netrw_users_stl
    if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
    if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
    return ""
@@ -2940,7 +3179,7 @@ fun! s:NetMethod(choice)  " globals: met
   " scp://user@hostname/...path-to-file
   elseif match(a:choice,scpurm) == 0
 "   call Decho("scp://...")
-   let b:netrw_method = 4
+   let b:netrw_method  = 4
    let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
    let g:netrw_port    = substitute(a:choice,scpurm,'\2',"")
    let b:netrw_fname   = substitute(a:choice,scpurm,'\3',"")
@@ -2973,7 +3212,7 @@ fun! s:NetMethod(choice)  " globals: met
   " ftp://[user@]hostname[[:#]port]/...path-to-file
   elseif match(a:choice,ftpurm) == 0
 "   call Decho("ftp://...")
-   let userid	     = substitute(a:choice,ftpurm,'\2',"")
+   let userid	      = substitute(a:choice,ftpurm,'\2',"")
    let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
    let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
    let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
@@ -3107,6 +3346,12 @@ fun! NetUserPass(...)
 "  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
   let g:netrw_passwd=a:2
  endif
+
+ " surround password with double-quotes if it contains embedded blanks
+ if g:netrw_passwd !~ '^"' && g:netrw_passwd =~ ' '
+  let g:netrw_passwd= '"'.g:netrw_passwd.'"'
+ endif
+
 "  call Dret("NetUserPass")
 endfun
 
@@ -3158,27 +3403,26 @@ endfun
 fun! s:NetOptionRestore()
 "  call Dfunc("NetOptionRestore()")
   if !exists("w:netoptionsave")
-"   call Dret("NetOptionRestore : netoptionsave=".w:netoptionsave)
+"   call Dret("NetOptionRestore : w:netoptionsave doesn't exist")
    return
   endif
   unlet w:netoptionsave
  
-  let &ai	= w:aikeep
-  if has("netbeans_intg") || has("sun_workshop")
-   let &acd     = w:acdkeep
+  if exists("w:aikeep")| let &ai= w:aikeep|endif
+  if (has("netbeans_intg") || has("sun_workshop")) && exists("w:acdkeep")
+   let &acd= w:acdkeep
+   unlet w:acdkeep
   endif
-  let &cin	= w:cinkeep
-  let &cino	= w:cinokeep
-  let &com	= w:comkeep
-  let &cpo	= w:cpokeep
-  if exists("w:dirkeep")
-   exe "lcd ".w:dirkeep
-  endif
-  let &gd	= w:gdkeep
-  let &report   = w:repkeep
-  let &tw	= w:twkeep
+  if exists("w:cinkeep") |let &cin    = w:cinkeep |unlet w:cinkeep |endif
+  if exists("w:cinokeep")|let &cino   = w:cinokeep|unlet w:cinokeep|endif
+  if exists("w:comkeep") |let &com    = w:comkeep |unlet w:comkeep |endif
+  if exists("w:cpokeep") |let &cpo    = w:cpokeep |unlet w:cpokeep |endif
+  if exists("w:dirkeep") |exe "lcd ".w:dirkeep    |unlet w:dirkeep |endif
+  if exists("w:gdkeep")  |let &gd     = w:gdkeep  |unlet w:gdkeep  |endif
+  if exists("w:repkeep") |let &report = w:repkeep |unlet w:repkeep |endif
+  if exists("w:twkeep")  |let &tw     = w:twkeep  |unlet w:twkeep  |endif
   if exists("w:swfkeep")
-   if &directory == ""
+   if &directory == "" && exists("w:swfkeep")
     " user hasn't specified a swapfile directory;
     " netrw will temporarily make the swapfile
     " directory the current local one.
@@ -3190,17 +3434,6 @@ fun! s:NetOptionRestore()
    endif
    unlet w:swfkeep
   endif
-  unlet w:aikeep
-  unlet w:cinkeep
-  unlet w:cinokeep
-  unlet w:comkeep
-  unlet w:cpokeep
-  unlet w:gdkeep
-  unlet w:repkeep
-  unlet w:twkeep
-  if exists("w:dirkeep")
-   unlet w:dirkeep
-  endif
  
 "  call Dret("NetOptionRestore")
 endfun
@@ -3212,7 +3445,7 @@ endfun
 "               example and as a fix for a Windows 95 problem: in my
 "               experience, win95's ftp always dumped four blank lines
 "               at the end of the transfer.
-if has("win95") && g:netrw_win95ftp
+if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
  fun! NetReadFixup(method, line1, line2)
 "   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
    if method == 3   " ftp (no <.netrc>)
@@ -3276,7 +3509,7 @@ endif
 "          front.  An "*" pattern handles the default priority.
 fun! s:SetSort()
 "  call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
-  if g:netrw_longlist
+  if w:netrw_longlist == 1
    let seqlist  = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
   else
    let seqlist  = g:netrw_sort_sequence
@@ -3313,14 +3546,14 @@ fun! s:SetSort()
     return
    endif
    if seq == '*'
-    exe 'keepjumps silent '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
    else
-    exe 'keepjumps silent '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
    endif
    let priority = priority + 1
   endwhile
 
-  exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
+  exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
 
 "  call Dret("SetSort")
 endfun
@@ -3366,6 +3599,7 @@ endfun
 "   UseBufWinVars() get around that.
 fun! s:BufWinVars()
 "  call Dfunc("BufWinVars()")
+  if exists("w:netrw_longlist")       |let b:netrw_longlist        = w:netrw_longlist       |endif
   if exists("w:netrw_bannercnt")      |let b:netrw_bannercnt       = w:netrw_bannercnt      |endif
   if exists("w:netrw_method")         |let b:netrw_method          = w:netrw_method         |endif
   if exists("w:netrw_prvdir")         |let b:netrw_prvdir          = w:netrw_prvdir         |endif
@@ -3383,6 +3617,7 @@ endfun
 "              Matching function to BufferWinVars()
 fun! s:UseBufWinVars()
 "  call Dfunc("UseBufWinVars()")
+  if exists("b:netrw_longlist")        && !exists("w:netrw_longlist")       |let w:netrw_longlist        = b:netrw_longlist       |endif
   if exists("b:netrw_bannercnt")       && !exists("w:netrw_bannercnt")      |let w:netrw_bannercnt       = b:netrw_bannercnt      |endif
   if exists("b:netrw_method")          && !exists("w:netrw_method")         |let w:netrw_method          = b:netrw_method         |endif
   if exists("b:netrw_prvdir")          && !exists("w:netrw_prvdir")         |let w:netrw_prvdir          = b:netrw_prvdir         |endif
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Sep 09
+*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Sep 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -2957,6 +2957,21 @@ inputdialog({prompt} [, {text} [, {cance
 		Hitting <Enter> works like pressing the OK button.  Hitting
 		<Esc> works like pressing the Cancel button.
 
+inputlist({textlist})					*inputlist()*
+		{textlist} must be a list of strings.  This list is displayed,
+		one string per line.  The user will be prompted to enter a
+		number, which is returned.
+		The user can also select an item by clicking on it with the
+		mouse.  For the first string 0 is returned.  When clicking
+		above the first item a negative number is returned.  When
+		clicking on the prompt one more than the length of {textlist}
+		is returned.
+		Make sure {textlist} has less then 'lines' entries, otherwise
+		it won't work.  It's a good idea to put the entry number at
+		the start of the string.  Example: >
+			let color = inputlist(['Select color:', '1. red',
+				\ '2. green', '3. blue'])
+
 inputrestore()						*inputrestore()*
 		Restore typeahead that was saved with a previous inputsave().
 		Should be called the same number of times inputsave() is
@@ -4299,7 +4314,7 @@ taglist({expr})							*taglist()*
 		located by Vim. Refer to |tags-file-format| for the format of
 		the tags file generated by the different ctags tools.
 
-							*tagfiles*
+							*tagfiles()*
 tagfiles()	Returns a List with the file names used to search for tags for
 		the current buffer.  This is the 'tags' option expanded.
 
--- a/runtime/doc/fold.txt
+++ b/runtime/doc/fold.txt
@@ -1,4 +1,4 @@
-*fold.txt*      For Vim version 7.0aa.  Last change: 2005 Mar 29
+*fold.txt*      For Vim version 7.0aa.  Last change: 2005 Sep 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -512,7 +512,8 @@ FOLDCOLUMN						*fold-foldcolumn*
 
 'foldcolumn' is a number, which sets the width for a column on the side of the
 window to indicate folds.  When it is zero, there is no foldcolumn.  A normal
-value is 4 or 5.  The minimal useful value is 2.  The maximum is 12.
+value is 4 or 5.  The minimal useful value is 2, although 1 still provides
+some information.  The maximum is 12.
 
 An open fold is indicated with a column that has a '-' at the top and '|'
 characters below it.  This column stops where the open fold stops.  When folds
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.0aa.  Last change: 2005 Sep 01
+*insert.txt*    For Vim version 7.0aa.  Last change: 2005 Sep 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -888,6 +888,7 @@ Completion is done by a function that ca
 'occultfunc' option.  This is to be used for filetype-specific completion.
 
 See the 'completefunc' help for how the function is called and an example.
+For remarks about specific filetypes see |compl-occult-filetypes|.
 
 							*i_CTRL-X_CTRL-O*
 CTRL-X CTRL-O		Guess what kind of item is in front of the cursor and
@@ -947,6 +948,37 @@ CTRL-P			Find previous match for words t
 			copy the words following the previous expansion in
 			other contexts unless a double CTRL-X is used.
 
+
+Filetype-specific remarks for occult completion	    *compl-occult-filetypes*
+
+C							*ft-c-occult*
+
+Completion requires a tags file.  You should use Exuberant ctags, because it
+adds extra information that is needed for completion.  You can find it here:
+http://ctags.sourceforge.net/
+For version 5.5.4 you need to add a patch that adds the "typename:" field:
+ftp://ftp.vim.org/pub/vim/unstable/patches/ctags-5.5.4.patch
+
+If you want to complete system functions you can do something like this.  Use
+ctags to generate a tags file for all the system header files: >
+	% ctags -R -f ~/.vim/systags /usr/include /usr/local/include
+In your vimrc file add this tags file to the 'tags' option: >
+	set tags+=~/.vim/systags
+
+When using CTRL-X CTRL-O after a name without any "." or "->" it is completed
+from the tags file directly.  This works for any identifier, also function
+names.  If you want to complete a local variable name, which does not appear
+in the tags file, use CTRL-P instead.
+
+When using CTRL-X CTRL-O after something that has "." or "->" Vim will attempt
+to recognize the type of the variable and figure out what members it has.
+This means only members valid for the variable will be listed.
+
+Vim doesn't include a C compiler, only the most obviously formatted
+declarations are recognized.  Preprocessor stuff may cause confusion.
+When the same structure name appears in multiple places all possible members
+are included.
+
 ==============================================================================
 8. Insert mode commands					*inserting*
 
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.0aa.  Last change: 2005 Sep 08
+*options.txt*	For Vim version 7.0aa.  Last change: 2005 Sep 10
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -560,12 +560,20 @@ is entered, this is almost like having g
 present, the options are copied from the currently active buffer when the
 buffer is created.
 
-Not all options are supported in all versions.  To test if option "foo" can be
-used with ":set" use "exists('&foo')".  This doesn't mean the value is
-actually remembered and works.  Some options are hidden, which means that you
-can set them but the value is not remembered.  To test if option "foo" is
-really supported use "exists('+foo')".
-
+Hidden options						*hidden-options*
+
+Not all options are supported in all versions.  This depends on the supported
+features and sometimes on the system.  A remark about this is in curly braces
+below.  When an option is not supported it may still be set without getting an
+error, this is called a hidden option.  You can't get the value of a hidden
+option though, it is not stored.
+
+To test if option "foo" can be used with ":set" use something like this: >
+	if exists('&foo')
+This also returns true for a hidden option.  To test if option "foo" is really
+supported use something like this: >
+	if exists('+foo')
+<
 							*E355*
 A jump table for the options with a short description can be found at |Q_op|.
 
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,4 +1,4 @@
-*pi_netrw.txt*  For Vim version 7.0.  Last change: Aug 15, 2005
+*pi_netrw.txt*  For Vim version 7.0.  Last change: Sep 07, 2005
 
 
 		VIM REFERENCE MANUAL    by Charles E. Campbell, Jr.
@@ -25,7 +25,7 @@ 3.  Activation..........................
 4.  Transparent File Transfer............................|netrw-transparent|
 5.  Ex Commands..........................................|netrw-ex|
 6.  Variables and Options................................|netrw-var|
-7.  Directory Browser....................................|netrw-browse| {{{1
+7.  Directory Browsing...................................|netrw-browse| {{{1
       Maps...............................................|netrw-maps|
       Exploring..........................................|netrw-explore-cmds|
       Quick Reference Commands Table.....................|netrw-browse-cmds|
@@ -35,11 +35,12 @@ 7.  Directory Browser...................
       Refreshing The Listing.............................|netrw-ctrl-l|
       Going Up...........................................|netrw--|
       Browsing...........................................|netrw-cr|
-      Long Vs Short Listing..............................|netrw-i|
+      Obtaining A File...................................|netrw-O|
+      Thin, Long, and Wide Listings......................|netrw-i|
       Making A New Directory.............................|netrw-d|
       Deleting Files Or Directories......................|netrw-delete|
       Renaming Files Or Directories......................|netrw-move|
-      Hiding Files Or Directories........................|g:netrw-a|
+      Hiding Files Or Directories........................|netrw-a|
       Edit File Or Directory Hiding List.................|netrw-h|
       Browsing With A Horizontally Split Window..........|netrw-o|
       Preview Window.....................................|netrw-p|
@@ -51,10 +52,10 @@ 7.  Directory Browser...................
       Browsing With A Vertically Split Window............|netrw-v|
       Customizing Browsing With A User Function..........|netrw-x|
       Making The Browsing Directory The Current Directory|netrw-c|
-      Bookmarking A Directory............................|netrw-b|
-      Changing To A Bookmarked Directory.................|netrw-B|
+      Bookmarking A Directory............................|netrw-b| |netrw-Nb|
+      Changing To A Bookmarked Directory.................|netrw-B| |netrw-NB|
       Listing Bookmarks And History......................|netrw-q|
-      Improving Directory Browsing.......................|netrw-list-hack| }}}1
+      Improving Directory Browsing.......................|netrw-listhack| }}}1
 8.  Problems and Fixes...................................|netrw-problems|
 9.  Debugging............................................|netrw-debug|
 10. History..............................................|netrw-history|
@@ -193,8 +194,8 @@ file using root-relative paths, use the 
 2. Network-Oriented File Transfer				*netrw-xfer*
 
 Network-oriented file transfer under Vim is implemented by a VimL-based script
-(<netrw.vim>) using plugin techniques.  It currently supports both reading
-and writing across networks using rcp, scp, ftp or ftp+<.netrc>, scp, fetch,
+(<netrw.vim>) using plugin techniques.  It currently supports both reading and
+writing across networks using rcp, scp, ftp or ftp+<.netrc>, scp, fetch,
 dav/cadaver, rsync, or sftp.
 
 http is currently supported read-only via use of wget or fetch.
@@ -205,24 +206,23 @@ FileReadCmd, BufWriteCmd) to intercept r
 
 	ex. vim ftp://hostname/path/to/file
 <
-The characters preceding the colon specify the protocol to use;
-in the example, its ftp.  The <netrw.vim> script then formulates
-a command or a series of commands (typically ftp) which it issues
-to an external program (ftp, scp, etc) which does the actual file
-transfer/protocol.  Files are read from/written to a temporary file
-(under Unix/Linux, /tmp/...) which the <netrw.vim> script will
-clean up.
+The characters preceding the colon specify the protocol to use; in the
+example, its ftp.  The <netrw.vim> script then formulates a command or a
+series of commands (typically ftp) which it issues to an external program
+(ftp, scp, etc) which does the actual file transfer/protocol.  Files are read
+from/written to a temporary file (under Unix/Linux, /tmp/...) which the
+<netrw.vim> script will clean up.
 
-One may modify any protocol's implementing external application
-by setting a variable (ex. scp uses the variable g:netrw_scp_cmd,
-which is defaulted to "scp -q").
+One may modify any protocol's implementing external application by setting a
+variable (ex. scp uses the variable g:netrw_scp_cmd, which is defaulted to
+"scp -q").
 
 Ftp, an old protocol, seems to be blessed by numerous implementations.
-Unfortunately, some implementations are noisy (ie., add junk to the end
-of the file).  Thus, concerned users may decide to write a NetReadFixup()
-function that will clean up after reading with their ftp.  Some Unix systems
-(ie., FreeBSD) provide a utility called "fetch" which uses the ftp protocol
-but is not noisy and more convenient, actually, for <netrw.vim> to use.
+Unfortunately, some implementations are noisy (ie., add junk to the end of the
+file).  Thus, concerned users may decide to write a NetReadFixup() function
+that will clean up after reading with their ftp.  Some Unix systems (ie.,
+FreeBSD) provide a utility called "fetch" which uses the ftp protocol but is
+not noisy and more convenient, actually, for <netrw.vim> to use.
 Consequently, if "fetch" is executable, it will be used to do reads for
 ftp://... (and http://...) .  See |netrw-var| for more about this.
 
@@ -331,8 +331,8 @@ The script attempts to get passwords for
 a built-in Vim function.  See |netrw-uidpass| for how to change the password
 after one has set it.
 
-Unfortunately there doesn't appear to be a way for netrw to feed a password
-to scp.  Thus every transfer via scp will require re-entry of the password.
+Unfortunately there doesn't appear to be a way for netrw to feed a password to
+scp.  Thus every transfer via scp will require re-entry of the password.
 
 
 ==============================================================================
@@ -340,8 +340,8 @@ 3. Activation						*netrw-activate*
 
 Network-oriented file transfers are available by default whenever
 |'nocompatible'| mode is enabled.  The <netrw.vim> file resides in your
-system's vim-plugin directory and is sourced automatically whenever you
-bring up vim.
+system's vim-plugin directory and is sourced automatically whenever you bring
+up vim.
 
 
 ==============================================================================
@@ -376,7 +376,7 @@ additional commands available.
 :Nread {netfile} {netfile}...
 		Read the {netfile} after the current line.
 
-									*netrw-uidpass*
+								*netrw-uidpass*
 :call NetUserPass()
 		If b:netrw_uid and b:netrw_passwd don't exist,
 		this function query the user for them.
@@ -426,7 +426,7 @@ behavior.  These variables typically may
 	g:netrw_silent          =0 transfers done normally
 	                        =1 transfers done silently
         g:netrw_uid             Holds current user-id for ftp.
-                                =1 use alternate ftp          (user uid password)
+                                =1 use alternate ftp         (user uid password)
                                 (see |netrw-options|)
         g:netrw_use_nt_rcp      =0 don't use WinNT/2K/XP's rcp (default)
                                 =1 use WinNT/2K/XP's rcp, binary mode
@@ -480,12 +480,12 @@ variables listed below, and may be modif
     -------------------------------------------------------------------------
 <
 								*netrw-ftp*
-The first two options both help with certain ftp's that give trouble otherwise.
-In order to best understand how to use these options if ftp is giving you
-troubles, a bit of discussion follows on how netrw does ftp reads.
+The first two options both help with certain ftp's that give trouble
+otherwise.  In order to best understand how to use these options if ftp is
+giving you troubles, a bit of discussion follows on how netrw does ftp reads.
 
-The g:netrw_..._cmd variables specify the external program to use handle
-the associated protocol (rcp, ftp, etc), plus any options.
+The g:netrw_..._cmd variables specify the external program to use handle the
+associated protocol (rcp, ftp, etc), plus any options.
 
 The g:netrw_list_cmd's HOSTNAME entry will be changed via substitution with
 whatever the current request is for a hostname.
@@ -518,8 +518,8 @@ userid and password.  The transferred fi
 The temporary file is then read into the main editing session window that
 requested it and the temporary file deleted.
 
-If your ftp doesn't accept the "user" command and immediately just demands
-a userid, then try putting "let netrw_ftp=1" in your <.vimrc>.
+If your ftp doesn't accept the "user" command and immediately just demands a
+userid, then try putting "let netrw_ftp=1" in your <.vimrc>.
 
 								*netrw-cadaver*
 To handle the SSL certificate dialog for untrusted servers, one may pull
@@ -546,12 +546,12 @@ messages) you may write a NetReadFixup(t
       endif
     endfunction
 >
-The NetReadFixup() function will be called if it exists and thus allows
-you to customize your reading process.  As a further example, <netrw.vim>
-contains just such a function to handle Windows 95 ftp.  For whatever
-reason, Windows 95's ftp dumps four blank lines at the end of a transfer,
-and so it is desirable to automate their removal.  Here's some code taken
-from <netrw.vim> itself:
+The NetReadFixup() function will be called if it exists and thus allows you to
+customize your reading process.  As a further example, <netrw.vim> contains
+just such a function to handle Windows 95 ftp.  For whatever reason, Windows
+95's ftp dumps four blank lines at the end of a transfer, and so it is
+desirable to automate their removal.  Here's some code taken from <netrw.vim>
+itself:
 >
     if has("win95") && g:netrw_win95ftp
      fun! NetReadFixup(method, line1, line2)
@@ -564,7 +564,7 @@ from <netrw.vim> itself:
 >
 
 ==============================================================================
-7. Directory Browser	*netrw-browse* *netrw-dir* *netrw-list* *netrw-help*
+7. Directory Browsing	*netrw-browse* *netrw-dir* *netrw-list* *netrw-help*
 
 MAPS   								*netrw-maps*
      ?................Help.......................................|netrw-help|
@@ -731,7 +731,7 @@ NETRW BROWSER VARIABLES					*netrw-brows
 INTRODUCTION TO DIRECTORY BROWSING			*netrw-browse-intro*
 
 Netrw supports the browsing of directories on the local system and on remote
-hosts, including generating listing directories, entering directories, editing
+hosts, including listing files and directories, entering directories, editing
 files therein, deleting files/directories, making new directories, and moving
 (renaming) files and directories.  The Netrw browser generally implements the
 previous explorer maps and commands for remote directories, although details
@@ -742,13 +742,15 @@ ftp.  The protocol in the url, if it is 
 in its remote browsing.  Any other protocol will be used for file transfers,
 but otherwise the ssh protocol will be used to do remote directory browsing.
 
-To enter the netrw directory browser, simply attempt to read a "file" with a
+To use Netrw's remote directory browser, simply attempt to read a "file" with a
 trailing slash and it will be interpreted as a request to list a directory:
 
 	vim [protocol]://[user@]hostname/path/
 
-If you'd like to avoid entering the password in for directory listings, scp,
-ssh interaction, etc, see |netrw-list-hack|.
+For local directories, the trailing slash is not required.
+
+If you'd like to avoid entering the password in for remote directory listings
+with ssh or scp, see |netrw-listhack|.
 
 				*netrw-explore*  *netrw-pexplore*
 				*netrw-hexplore* *netrw-sexplore*
@@ -782,7 +784,8 @@ By default, these commands use the curre
 may explicitly provide a directory (path) to use.
 
 (Following needs v7.0 or later)			*netrw-starstar*
-When Explore, Sexplore, Hexplore, or Vexplore are used like
+When Explore, Sexplore, Hexplore, or Vexplore are used with a **,
+such as:
 >
 	:Explore **/filename_pattern
 <
@@ -796,7 +799,8 @@ The directory display is updated to show
 matching file.  One may then proceed to the next (or previous) matching files'
 directories by using Nexplore or Pexplore, respectively.  If your console or
 gui produces recognizable shift-up or shift-down sequences, then you'll likely
-find the following mappings convenient:
+find using shift-downarrow and shift-uparrow convenient.  They're mapped by
+netrw:
 
 	<s-down>  == Nexplore, and
 	<s-up>    == Pexplore.
@@ -821,11 +825,12 @@ refresh a local directory by using ":e .
 
 GOING UP						*netrw--*
 
-To go up a directory, press - or his the <cr> when atop the ../ directory
+To go up a directory, press - or press the <cr> when atop the ../ directory
 entry in the listing.
 
-Netrw will modify the command in |g:netrw_list_cmd| to perform the directory
-listing operation.  By default the command is:
+Netrw will use the command in |g:netrw_list_cmd| to perform the directory
+listing operation after changing HOSTNAME to the host specified by the
+user-provided url.  By default netrw provides the command as:
 
 	ssh HOSTNAME ls -FLa
 
@@ -840,23 +845,51 @@ BROWSING 							*netrw-cr*
 Browsing is simple: move the cursor onto a file or directory of interest.
 Hitting the <cr> (the return key) will select the file or directory.
 Directories will themselves be listed, and files will be opened using the
-protocol given in the original read request.
+protocol given in the original read request.  
+
+  CAVEAT: There are three forms of listing (see |netrw-i|).  Netrw assumes
+  that two or more spaces delimit filenames and directory names for the long
+  and wide listing formats.  Thus, if your filename or directory name has two
+  or more spaces embedded in it, or any trailing spaces, then you'll need to
+  use the "thin" format to select it.
+
+
+OBTAINING A FILE						*netrw-O*
+
+When browsing a remote directory, one may obtain a file under the cursor (ie.
+get a copy on your local machine, but not edit it) by pressing the O key.
+Only ftp and scp are supported for this operation (but since these two are
+available for browsing, that shouldn't be a problem).
 
 
-LONG VS SHORT LISTING						*netrw-i*
+THIN, LONG, AND WIDE LISTINGS					*netrw-i*
+
+The "i" map cycles between the thin, long, and wide listing formats.
 
 The short listing format gives just the files' and directories' names.
+
 The long listing is either based on the "ls" command via ssh for remote
-directories or displays the filename, file size (in bytes), and the
-time and date of last modification for local directories.
+directories or displays the filename, file size (in bytes), and the time and
+date of last modification for local directories.  With the long listing
+format, netrw is not able to recognize filenames which have trailing spaces.
+Use the thin listing format for such files.
+
+The wide listing format has a multi-column display of the various files in the
+netrw current directory, rather like the Unix "ls" presents.  In this mode the
+"b" and "B" maps are not available; instead, use Nb (|netrw-Nb|) and NB
+(|netrw-NB|).  The wide listing format uses two or more contiguous spaces to
+delineate filenames; when using that format, netrw won't be able to recognize
+or use filenames which have two or more contiguous spaces embedded in the name
+or any trailing spaces.  The thin listing format will, however, work with such
+files.
 
 
 MAKING A NEW DIRECTORY						*netrw-d*
 
-With the "d" map one may make a new directory either remotely (which
-depends on the global variable g:netrw_mkdir_cmd) or locally (which depends on
-the global variable g:netrw_local_mkdir).  Netrw will issue a request for the
-new directory's name.  A bare <CR> at that point will abort the making of the
+With the "d" map one may make a new directory either remotely (which depends
+on the global variable g:netrw_mkdir_cmd) or locally (which depends on the
+global variable g:netrw_local_mkdir).  Netrw will issue a request for the new
+directory's name.  A bare <CR> at that point will abort the making of the
 directory.  Attempts to make a local directory that already exists (as either
 a file or a directory) will be detected, reported on, and ignored.
 
@@ -864,12 +897,12 @@ a file or a directory) will be detected,
 DELETING FILES OR DIRECTORIES			*netrw-delete* *netrw-D*
 
 Deleting/removing files and directories involves moving the cursor to the
-file/directory to be deleted and pressing "D".  Directories must be empty first
-before they can be successfully removed.  If the directory is a softlink to a
-directory, then netrw will make two requests to remove the directory before
-succeeding.  Netrw will ask for confirmation before doing the removal(s).
-You may select a range of lines with the "V" command (visual selection),
-and then pressing "D".
+file/directory to be deleted and pressing "D".  Directories must be empty
+first before they can be successfully removed.  If the directory is a softlink
+to a directory, then netrw will make two requests to remove the directory
+before succeeding.  Netrw will ask for confirmation before doing the
+removal(s).  You may select a range of lines with the "V" command (visual
+selection), and then pressing "D".
 
 The g:netrw_rm_cmd, g:netrw_rmf_cmd, and g:netrw_rmdir_cmd variables are used
 to control the attempts to remove files and directories.  The g:netrw_rm_cmd
@@ -904,19 +937,19 @@ One may rename a block of files and dire
 the V (|linewise-visual|).
 
 
-HIDING FILES OR DIRECTORIES				*g:netrw-a* *netrw-a*
+HIDING FILES OR DIRECTORIES				*netrw-a*
 
-Netrw's browsing facility allows one to use the hiding list in one of
-three ways: ignore it, hide files which match, and show only those files
-which match.  The "a" map allows the user to cycle about these three ways.
+Netrw's browsing facility allows one to use the hiding list in one of three
+ways: ignore it, hide files which match, and show only those files which
+match.  The "a" map allows the user to cycle about these three ways.
 
-The g:netrw_list_hide variable holds a comma delimited list of patterns
-(ex. \.obj) which specify the hiding list. (also see |netrw-h|)  To
-set the hiding list, use the <c-h> map.  As an example, to hide files
-which begin with a ".", one may use the <c-h> map to set the hiding
-list to '^\..*' (or one may put  let g:netrw_list_hide= '^\..*' in
-one's <.vimrc>).  One may then use the "a" key to show all files,
-hide matching files, or to show only the matching files.
+The g:netrw_list_hide variable holds a comma delimited list of patterns (ex.
+\.obj) which specify the hiding list. (also see |netrw-h|)  To set the hiding
+list, use the <c-h> map.  As an example, to hide files which begin with a ".",
+one may use the <c-h> map to set the hiding list to '^\..*' (or one may put
+let g:netrw_list_hide= '^\..*' in one's <.vimrc>).  One may then use the "a"
+key to show all files, hide matching files, or to show only the matching
+files.
 
 
 EDIT FILE OR DIRECTORY HIDING LIST		*netrw-h* *netrw-edithide*
@@ -924,7 +957,8 @@ EDIT FILE OR DIRECTORY HIDING LIST		*net
 The "<ctrl-h>" map brings up a requestor allowing the user to change the
 file/directory hiding list.  The hiding list consists of one or more patterns
 delimited by commas.  Files and/or directories satisfying these patterns will
-either be hidden (ie. not shown) or be the only ones displayed (see |netrw-a|).
+either be hidden (ie. not shown) or be the only ones displayed (see
+|netrw-a|).
 
 
 BROWSING WITH A HORIZONTALLY SPLIT WINDOW		*netrw-o* *netrw-horiz*
@@ -933,9 +967,9 @@ Normally one enters a file or directory 
 allows one to open a new window to hold the new directory listing or file.  A
 horizontal split is used.  (for vertical splitting, see |netrw-v|)
 
-Normally, the o key splits the window horizontally with the new window
-and cursor at the top.  To change to splitting the window horizontally
-with the new window and cursor at the bottom, have
+Normally, the o key splits the window horizontally with the new window and
+cursor at the top.  To change to splitting the window horizontally with the
+new window and cursor at the bottom, have
 
 	let g:netrw_alto = 1
 
@@ -944,30 +978,30 @@ in your <.vimrc>.
 
 PREVIEW WINDOW					*netrw-p* *netrw-preview*
 
-One may use a preview window (currently only for local browsing) by using
-the "p" key when the cursor is atop the desired filename to be previewed.
+One may use a preview window (currently only for local browsing) by using the
+"p" key when the cursor is atop the desired filename to be previewed.
 
 
 SELECTING SORTING STYLE				*netrw-s* *netrw-sort*
 
-One may select the sorting style by name, time, or (file) size.  The
-"s" map allows one to circulate amongst the three choices; the directory
-listing will automatically be refreshed to reflect the selected style.
+One may select the sorting style by name, time, or (file) size.  The "s" map
+allows one to circulate amongst the three choices; the directory listing will
+automatically be refreshed to reflect the selected style.
 
 
 EDITING THE SORTING SEQUENCE		*netrw-S* *netrw-sortsequence*
 
-When "Sorted by" is name, one may specify priority via the sorting
-sequence (g:netrw_sort_sequence).  The sorting sequence typically
-prioritizes the name-listing by suffix, although any pattern will do.
-Patterns are delimited by commas.  The default sorting sequence is:
+When "Sorted by" is name, one may specify priority via the sorting sequence
+(g:netrw_sort_sequence).  The sorting sequence typically prioritizes the
+name-listing by suffix, although any pattern will do.  Patterns are delimited
+by commas.  The default sorting sequence is:
 >
 	[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$
 <
-The lone * is where all filenames not covered by one of the other
-patterns will end up.  One may change the sorting sequence by modifying
-the g:netrw_sort_sequence variable (either manually or in your <.vimrc>)
-or by using the "S" map.
+The lone * is where all filenames not covered by one of the other patterns
+will end up.  One may change the sorting sequence by modifying the
+g:netrw_sort_sequence variable (either manually or in your <.vimrc>) or by
+using the "S" map.
 
 
 REVERSING SORTING ORDER			*netrw-r* *netrw-reverse*
@@ -994,20 +1028,20 @@ q map to list both the bookmarks and his
 
 BROWSING WITH A VERTICALLY SPLIT WINDOW				*netrw-v*
 
-Normally one enters a file or directory using the <cr>.  However, the "v"
-map allows one to open a new window to hold the new directory listing or
-file.  A vertical split is used.  (for horizontal splitting, see |netrw-o|)
+Normally one enters a file or directory using the <cr>.  However, the "v" map
+allows one to open a new window to hold the new directory listing or file.  A
+vertical split is used.  (for horizontal splitting, see |netrw-o|)
 
-Normally, the v key splits the window vertically with the new window
-and cursor at the left.  To change to splitting the window vertically
-with the new window and cursor at the right, have
+Normally, the v key splits the window vertically with the new window and
+cursor at the left.  To change to splitting the window vertically with the new
+window and cursor at the right, have
 
 	let g:netrw_altv = 1
 
 in your <.vimrc>.
 
 
-CUSTOMIZING BROWSING WITH A USER FUNCTION		*netrw-x* *netrw-handler*
+CUSTOMIZING BROWSING WITH A USER FUNCTION	*netrw-x* *netrw-handler*
 
 One may "enter" a file with a special handler, thereby firing up a browser or
 other application, for example, on a file by hitting the "x" key.  The special
@@ -1019,9 +1053,9 @@ handler varies:
   * otherwise the NetrwFileHandler plugin is used.
 
 The file's suffix is used by these various approaches to determine an
-appropriate application to use to "handle" these files.  Such things
-as OpenOffice (*.sfx), visualization (*.jpg, *.gif, etc), and PostScript
-(*.ps, *.eps) can be handled.
+appropriate application to use to "handle" these files.  Such things as
+OpenOffice (*.sfx), visualization (*.jpg, *.gif, etc), and PostScript (*.ps,
+*.eps) can be handled.
 
 The NetrwFileHandler applies a user-defined function to a file, based on its
 extension.  Of course, the handler function must exist for it to be called!
@@ -1046,12 +1080,12 @@ g:netrw_keepdir to 0 (say, in your <.vim
 currently browsed directory be the current directory.
 
 With the default setting for g:netrw_keepdir, in order to make the two
-directories the same, use the "c" map (just type c).  That map will set
-the current directory to the current browsing directory.
+directories the same, use the "c" map (just type c).  That map will set the
+current directory to the current browsing directory.
 
 
 BOOKMARKING A DIRECTORY		*netrw-b* *netrw-bookmark* *netrw-bookmarks*
-
+							*netrw-Nb*
 One may easily "bookmark" a directory by using >
 
 	{cnt}b
@@ -1060,15 +1094,21 @@ Any count may be used.  One may use vimi
 between vim sessions.  See |netrw-B| for how to return to a bookmark and
 |netrw-q| for how to list them.
 
+When wide listing is in use (see |netrw-i|), then the b map is not available;
+instead, use {cnt}Nb.
 
-CHANGING TO A BOOKMARKED DIRECTORY				*netrw-B*
+
+CHANGING TO A BOOKMARKED DIRECTORY			*netrw-NB* *netrw-B*
 
 To change directory back to a bookmarked directory, use
 
 	{cnt}B
 
-Any count may be used to reference any of the bookmarks.  See |netrw-b|
-for how to bookmark a directory and |netrw-q| for how to list them.
+Any count may be used to reference any of the bookmarks.  See |netrw-b| on
+how to bookmark a directory and |netrw-q| on how to list bookmarks.
+
+When wide listing is in use (see |netrw-i|), then the B map is not available;
+instead, use {cnt}NB.
 
 
 LISTING BOOKMARKS AND HISTORY			*netrw-q* *netrw-listbookmark*
@@ -1077,7 +1117,7 @@ Pressing "q" will list the bookmarked di
 history (query). (see |netrw-b|, |netrw-B|, |netrw-u|, and |netrw-U|)
 
 
-IMPROVING DIRECTORY BROWSING				*netrw-list-hack*
+IMPROVING DIRECTORY BROWSING				*netrw-listhack*
 
 Especially with the remote directory browser, constantly entering the password
 is tedious.
@@ -1095,9 +1135,9 @@ NETRW SETTINGS						*netrw-settings*
 With the NetrwSettings.vim plugin, >
 	:NetrwSettings
 will bring up a window with the many variables that netrw uses for its
-settings.  You may change any of their values; when you save the file,
-the settings therein will be used.  One may also press "?" on any of
-the lines for help on what each of the variables do.
+settings.  You may change any of their values; when you save the file, the
+settings therein will be used.  One may also press "?" on any of the lines for
+help on what each of the variables do.
 
 
 ==============================================================================
@@ -1178,10 +1218,10 @@ which is loaded automatically at startup
 
 	1. Get the <Decho.vim> script, available as:
 
-		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_scripts
-		as "Decho, a vimL debugging aid"
+	     http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_scripts
+	     as "Decho, a vimL debugging aid"
 	   or
-		http://vim.sourceforge.net/scripts/script.php?script_id=120
+	     http://vim.sourceforge.net/scripts/script.php?script_id=120
 
 	   and put it into your local plugin directory.
 
@@ -1217,9 +1257,21 @@ which is loaded automatically at startup
 ==============================================================================
 10. History						*netrw-history*
 
-	v64: * Browser functions now use NetOptionSave/Restore; in particular,
+	v69: * Bugfix: win95/98 machines were experiencing a
+	       "E121: Undefined variable: g:netrw_win95ftp" message
+	v68: * double-click-leftmouse selects word under mouse
+	v67: * Passwords which contain blanks will now be surrounded by
+	       double-quotes automatically (Yongwei)
+	v66: * Netrw now seems to work with a few more Windows situations
+	     * O now obtains a file: remote browsing file -> local copy,
+	       locally browsing file -> current directory (see :pwd)
+	     * i now cycles between thin, long, and wide listing styles
+	     * NB and Nb are maps that are always available; corresponding
+	       B and b maps are only available when not using wide listing
+	       in order to allow them to be used for motions
+	v65: * Browser functions now use NetOptionSave/Restore; in particular,
 	       netrw now works around the report setting
-	     * Bugfix - browsing a "/" directory (Unix) yielded buffers 
+	v64: * Bugfix - browsing a "/" directory (Unix) yielded buffers 
 	       named "[Scratch]" instead of "/"
 	     * Bugfix - remote browsing with ftp was omitting the ./ and ../
 	v63: * netrw now takes advantage of autoload (and requires 7.0)
@@ -1366,7 +1418,7 @@ 11. Credits						*netrw-credits*
 	Vim editor	by Bram Moolenaar (Thanks, Bram!)
 	dav		support by C Campbell
 	fetch		support by Bram Moolenaar and C Campbell
-	ftp		support by C Campbell <NdrOchip@ScampbellPfamily.AbizM> - NOSPAM
+	ftp		support by C Campbell <NdrOchip@ScampbellPfamily.AbizM>
 	http		support by Bram Moolenaar <bram@moolenaar.net>
 	rcp
 	rsync		support by C Campbell (suggested by Erik Warendorph)
@@ -1376,11 +1428,13 @@ 11. Credits						*netrw-credits*
 	inputsecret(), BufReadCmd, BufWriteCmd contributed by C Campbell
 
 	Jérôme Augé		-- also using new buffer method with ftp+.netrc
-	Bram Moolenaar		-- obviously vim itself, :e and v:cmdarg use, fetch,...
+	Bram Moolenaar		-- obviously vim itself, :e and v:cmdarg use,
+	                           fetch,...
 	Yasuhiro Matsumoto	-- pointing out undo+0r problem and a solution
 	Erik Warendorph		-- for several suggestions (g:netrw_..._cmd
 				   variables, rsync etc)
-	Doug Claar		-- modifications to test for success with ftp operation
+	Doug Claar		-- modifications to test for success with ftp
+	                           operation
 
 ==============================================================================
  vim:tw=78:ts=8:ft=help:norl:fdm=marker
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -4461,6 +4461,7 @@ compl-function	insert.txt	/*compl-functi
 compl-generic	insert.txt	/*compl-generic*
 compl-keyword	insert.txt	/*compl-keyword*
 compl-occult	insert.txt	/*compl-occult*
+compl-occult-filetypes	insert.txt	/*compl-occult-filetypes*
 compl-spelling	insert.txt	/*compl-spelling*
 compl-tag	insert.txt	/*compl-tag*
 compl-vim	insert.txt	/*compl-vim*
@@ -4961,6 +4962,7 @@ ft-aspperl-syntax	syntax.txt	/*ft-aspper
 ft-aspvbs-syntax	syntax.txt	/*ft-aspvbs-syntax*
 ft-bash-syntax	syntax.txt	/*ft-bash-syntax*
 ft-basic-syntax	syntax.txt	/*ft-basic-syntax*
+ft-c-occult	insert.txt	/*ft-c-occult*
 ft-c-syntax	syntax.txt	/*ft-c-syntax*
 ft-ch-syntax	syntax.txt	/*ft-ch-syntax*
 ft-changelog-plugin	filetype.txt	/*ft-changelog-plugin*
@@ -5077,7 +5079,6 @@ g'a	motion.txt	/*g'a*
 g,	motion.txt	/*g,*
 g0	motion.txt	/*g0*
 g8	various.txt	/*g8*
-g:netrw-a	pi_netrw.txt	/*g:netrw-a*
 g:netrw_alto	pi_netrw.txt	/*g:netrw_alto*
 g:netrw_altv	pi_netrw.txt	/*g:netrw_altv*
 g:netrw_cygwin	pi_netrw.txt	/*g:netrw_cygwin*
@@ -5291,6 +5292,7 @@ hebrew	hebrew.txt	/*hebrew*
 hebrew.txt	hebrew.txt	/*hebrew.txt*
 help	various.txt	/*help*
 help-context	help.txt	/*help-context*
+help-tags	tags	1
 help-translated	various.txt	/*help-translated*
 help-xterm-window	various.txt	/*help-xterm-window*
 help.txt	help.txt	/*help.txt*
@@ -5298,6 +5300,7 @@ hex-editing	tips.txt	/*hex-editing*
 hidden-buffer	windows.txt	/*hidden-buffer*
 hidden-changed	version5.txt	/*hidden-changed*
 hidden-menus	gui.txt	/*hidden-menus*
+hidden-options	options.txt	/*hidden-options*
 hidden-quit	windows.txt	/*hidden-quit*
 highlight-args	syntax.txt	/*highlight-args*
 highlight-changed	version4.txt	/*highlight-changed*
@@ -5532,6 +5535,7 @@ inform.vim	syntax.txt	/*inform.vim*
 initialization	starting.txt	/*initialization*
 input()	eval.txt	/*input()*
 inputdialog()	eval.txt	/*inputdialog()*
+inputlist()	eval.txt	/*inputlist()*
 inputrestore()	eval.txt	/*inputrestore()*
 inputsave()	eval.txt	/*inputsave()*
 inputsecret()	eval.txt	/*inputsecret()*
@@ -5838,6 +5842,9 @@ netrw	pi_netrw.txt	/*netrw*
 netrw--	pi_netrw.txt	/*netrw--*
 netrw-B	pi_netrw.txt	/*netrw-B*
 netrw-D	pi_netrw.txt	/*netrw-D*
+netrw-NB	pi_netrw.txt	/*netrw-NB*
+netrw-Nb	pi_netrw.txt	/*netrw-Nb*
+netrw-O	pi_netrw.txt	/*netrw-O*
 netrw-R	pi_netrw.txt	/*netrw-R*
 netrw-S	pi_netrw.txt	/*netrw-S*
 netrw-U	pi_netrw.txt	/*netrw-U*
@@ -5880,8 +5887,8 @@ netrw-history	pi_netrw.txt	/*netrw-histo
 netrw-horiz	pi_netrw.txt	/*netrw-horiz*
 netrw-i	pi_netrw.txt	/*netrw-i*
 netrw-list	pi_netrw.txt	/*netrw-list*
-netrw-list-hack	pi_netrw.txt	/*netrw-list-hack*
 netrw-listbookmark	pi_netrw.txt	/*netrw-listbookmark*
+netrw-listhack	pi_netrw.txt	/*netrw-listhack*
 netrw-maps	pi_netrw.txt	/*netrw-maps*
 netrw-move	pi_netrw.txt	/*netrw-move*
 netrw-netrc	pi_netrw.txt	/*netrw-netrc*
@@ -6719,6 +6726,7 @@ tag-search	tagsrch.txt	/*tag-search*
 tag-security	tagsrch.txt	/*tag-security*
 tag-skip-file	tagsrch.txt	/*tag-skip-file*
 tag-stack	tagsrch.txt	/*tag-stack*
+tagfiles()	eval.txt	/*tagfiles()*
 taglist()	eval.txt	/*taglist()*
 tags	tagsrch.txt	/*tags*
 tags-and-searches	tagsrch.txt	/*tags-and-searches*
--- a/runtime/plugin/NetrwPlugin.vim
+++ b/runtime/plugin/NetrwPlugin.vim
@@ -1,8 +1,7 @@
 " netrw.vim: Handles file transfer and remote directory listing across a network
 "            PLUGIN PORTION
-" Last Change:	Aug 17, 2005
+" Date:		Sep 08, 2005
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" Version:	65a	ASTRO-ONLY
 " License:	Vim License  (see vim's :help license)
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
 " Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
@@ -21,17 +20,6 @@
 
 " ---------------------------------------------------------------------
 " Load Once: {{{1
-if exists("g:loaded_netrw") || &cp
-  finish
-endif
-if v:version < 600
- echoerr "***netrw*** doesn't support Vim version ".v:version
- finish
-endif
-let g:loaded_netrw  = "v65a"
-if v:version < 700
- let loaded_explorer = 1
-endif
 let s:keepcpo= &cpo
 set cpo&vim
 
@@ -138,7 +126,7 @@ endfun
 "               example and as a fix for a Windows 95 problem: in my
 "               experience, win95's ftp always dumped four blank lines
 "               at the end of the transfer.
-if has("win95") && g:netrw_win95ftp
+if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
  fun! NetReadFixup(method, line1, line2)
 "   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
    if method == 3   " ftp (no <.netrc>)
--- a/runtime/syntax/netrwlist.vim
+++ b/runtime/syntax/netrwlist.vim
@@ -1,7 +1,7 @@
 " Language   : Netrw Remote-Directory Listing Syntax
 " Maintainer : Charles E. Campbell, Jr.
-" Last change: Sep 08, 2004
-" Version    : 5
+" Last change: Aug 29, 2005
+" Version    : 7
 " ---------------------------------------------------------------------
 
 " Syntax Clearing: {{{1
@@ -14,23 +14,30 @@ endif
 " ---------------------------------------------------------------------
 " Directory List Syntax Highlighting: {{{1
 syn cluster NetrwGroup contains=netrwHide,netrwSortBy,netrwSortSeq,netrwQuickHelp,netrwVersion
-syn match  netrwDir				"^.*/\%(\t\|$\)"	contains=netrwClassify
-syn match  netrwClassify			"[*=|@/]\%(\t\|$\)"
-syn match  netrwSymLink				"^.*@\%(\t\|$\)"	contains=netrwClassify
-syn match  netrwComment				'".*\%(\t\|$\)'		contains=@NetrwGroup
-syn match  netrwHide				'^"\s*\(Hid\|Show\)ing:' skipwhite nextgroup=netrwHidePat
-syn match  netrwSlash	contained		"/"
-syn match  netrwHidePat	contained		"[^,]\+"		skipwhite nextgroup=netrwHideSep
-syn match  netrwHideSep	contained transparent	","			skipwhite nextgroup=netrwHidePat
-syn match  netrwSortBy	contained transparent	"Sorted by"		skipwhite nextgroup=netrwList
-syn match  netrwSortSeq	contained transparent	"Sort sequence:"	skipwhite nextgroup=netrwList
-syn match  netrwList	contained		".*$"			contains=netrwComma
-syn match  netrwComma	contained		","
-syn region netrwQuickHelp contained matchgroup=Comment start="Quick Help:\s\+" end="$" contains=netrwHelpCmd keepend
-syn match  netrwHelpCmd	contained		"\S\ze:"		skipwhite nextgroup=netrwCmdSep
-syn match  netrwCmdSep	contained		":"			nextgroup=netrwCmdNote
-syn match  netrwCmdNote	contained		".\{-}\ze  "
-syn match  netrwVersion contained		"(netrw.*)"
+
+syn match  netrwSpecial		"\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)" contains=netrwClassify
+syn match  netrwDir		"\.\{1,2}/"			contains=netrwClassify
+syn match  netrwDir		"\%(\S\+ \)*\S\+/"		contains=netrwClassify
+syn match  netrwDir		"^\S*/"				contains=netrwClassify
+syn match  netrwSymLink		"\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)"  contains=netrwClassify
+syn match  netrwExe		"\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" contains=netrwClassify
+
+syn match  netrwClassify	"[*=|@/]\ze\%(\s\{2,}\|$\)"	contained
+
+syn match  netrwComment		'".*\%(\t\|$\)'			contains=@NetrwGroup
+syn match  netrwHide		'^"\s*\(Hid\|Show\)ing:'	skipwhite nextgroup=netrwHidePat
+syn match  netrwSlash		"/"				contained
+syn match  netrwHidePat		"[^,]\+"			contained skipwhite nextgroup=netrwHideSep
+syn match  netrwHideSep		","				contained transparent skipwhite nextgroup=netrwHidePat
+syn match  netrwSortBy		"Sorted by"			contained transparent skipwhite nextgroup=netrwList
+syn match  netrwSortSeq		"Sort sequence:"		contained transparent skipwhite nextgroup=netrwList
+syn match  netrwList		".*$"				contained contains=netrwComma
+syn match  netrwComma		","				contained
+syn region netrwQuickHelp	matchgroup=Comment start="Quick Help:\s\+" end="$" contains=netrwHelpCmd keepend contained
+syn match  netrwHelpCmd		"\S\ze:"			contained skipwhite nextgroup=netrwCmdSep
+syn match  netrwCmdSep		":"				contained nextgroup=netrwCmdNote
+syn match  netrwCmdNote		".\{-}\ze  "			contained
+syn match  netrwVersion		"(netrw.*)"			contained
 
 " ---------------------------------------------------------------------
 " Highlighting Links: {{{1
@@ -45,6 +52,7 @@ if !exists("did_drchip_dbg_syntax")
  hi link netrwList	Statement
  hi link netrwVersion	Identifier
  hi link netrwSymLink	Special
+ hi link netrwExe	PreProc
 
  hi link netrwComma	netrwComment
  hi link netrwHide	netrwComment
--- a/src/gui.c
+++ b/src/gui.c
@@ -3861,6 +3861,9 @@ gui_do_scroll()
 #endif
     }
 
+    /* Make sure wp->w_leftcol and wp->w_skipcol are correct. */
+    validate_cursor();
+
     curwin = save_wp;
     curbuf = save_wp->w_buffer;
 
@@ -3869,6 +3872,7 @@ gui_do_scroll()
      * the status line!).
      */
     if (old_topline != wp->w_topline
+	    || wp->w_redr_type != 0
 #ifdef FEAT_DIFF
 	    || old_topfill != wp->w_topfill
 #endif
--- a/src/screen.c
+++ b/src/screen.c
@@ -2401,6 +2401,7 @@ fill_foldcolumn(p, wp, closed, lnum)
     int		i = 0;
     int		level;
     int		first_level;
+    int		empty;
 
     /* Init to all spaces. */
     copy_spaces(p, (size_t)wp->w_p_fdc);
@@ -2408,13 +2409,16 @@ fill_foldcolumn(p, wp, closed, lnum)
     level = win_foldinfo.fi_level;
     if (level > 0)
     {
+	/* If there is only one column put more info in it. */
+	empty = (wp->w_p_fdc == 1) ? 0 : 1;
+
 	/* If the column is too narrow, we start at the lowest level that
 	 * fits and use numbers to indicated the depth. */
-	first_level = level - wp->w_p_fdc - closed + 2;
+	first_level = level - wp->w_p_fdc - closed + 1 + empty;
 	if (first_level < 1)
 	    first_level = 1;
 
-	for (i = 0; i + 1 < wp->w_p_fdc; ++i)
+	for (i = 0; i + empty < wp->w_p_fdc; ++i)
 	{
 	    if (win_foldinfo.fi_lnum == lnum
 			      && first_level + i >= win_foldinfo.fi_low_level)
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 9)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 9, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 10)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 10, compiled "