diff runtime/plugin/netrw.vim @ 11:4424b47a0797

updated for version 7.0003
author vimboss
date Wed, 30 Jun 2004 16:16:41 +0000
parents 4e2284e71352
children bdeee1504ac1
line wrap: on
line diff
--- a/runtime/plugin/netrw.vim
+++ b/runtime/plugin/netrw.vim
@@ -1,7 +1,7 @@
 " netrw.vim: Handles file transfer and remote directory listing across a network
 " Last Change:	Jun 24, 2004
 " Maintainer:	Charles E. Campbell, Jr. PhD   <drchipNOSPAM at campbellfamily.biz>
-" Version:	47c	NOT RELEASED
+" Version:	47f	NOT RELEASED
 " License:	Vim License  (see vim's :help license)
 "
 "  But be doers of the word, and not only hearers, deluding your own selves
@@ -12,7 +12,7 @@
 if exists("loaded_netrw") || &cp
   finish
 endif
-let loaded_netrw = "v47c"
+let loaded_netrw = "v47f	NOT RELEASED"
 let s:save_cpo   = &cpo
 set cpo&vim
 
@@ -31,6 +31,38 @@ if !exists("g:netrw_cygwin")
   let g:netrw_cygwin= 0
  endif
 endif
+if !exists("g:netrw_list_cmd")
+ if executable("ssh")
+  " provide a default listing command
+  let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
+ else
+  call Decho("ssh is not executable, can't do remote directory exploring")
+  let g:netrw_list_cmd= ""
+ endif
+endif
+if !exists("g:netrw_rm_cmd")
+ let g:netrw_rm_cmd    = "ssh HOSTNAME rm"
+endif
+if !exists("g:netrw_rmf_cmd")
+ let g:netrw_rmf_cmd    = "ssh HOSTNAME rm -f"
+endif
+if !exists("g:netrw_rmdir_cmd")
+ let g:netrw_rmdir_cmd = "ssh HOSTNAME rmdir"
+endif
+if !exists("g:netrw_rename_cmd")
+ let g:netrw_rename_cmd= "ssh HOSTNAME mv"
+endif
+if exists("g:netrw_silent") && g:netrw_silent != 0
+ let g:netrw_silentxfer= "silent "
+else
+ let g:netrw_silentxfer= ""
+endif
+if !exists("g:netrw_winsize")
+ let g:netrw_winsize= ""
+endif
+if !exists("g:netrw_list_hide")
+ let g:netrw_list_hide= ""
+endif
 
 " ---------------------------------------------------------------------
 " Default values for global protocol variables {{{1
@@ -68,20 +100,6 @@ if !exists("g:netrw_fetch_cmd")
   let g:netrw_fetch_cmd	= ""
  endif
 endif
-if !exists("g:netrw_list_cmd")
- if executable("ssh")
-  let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
- else
-"  call Decho("ssh is not executable, can't do netlist")
-  let g:netrw_list_cmd= ""
- endif
-endif
-if exists("g:netrw_silent") && g:netrw_silent != 0
- let g:netrw_silentxfer= "silent "
-else
- let g:netrw_silentxfer= ""
-endif
- 
 
 if has("win32")
   \ && exists("g:netrw_use_nt_rcp")
@@ -124,7 +142,7 @@ com! -nargs=*		NetUserPass	call NetUserP
 " ------------------------------------------------------------------------
 " NetSavePosn: saves position of cursor on screen {{{1
 fun! s:NetSavePosn()
-"  call Dfunc("NetSavePosn()")
+  call Dfunc("NetSavePosn()")
   " Save current line and column
   let s:netrw_winnr= winnr()
   let s:netrw_line = line(".")
@@ -135,13 +153,13 @@ fun! s:NetSavePosn()
   let s:netrw_hline= line(".")
 
   call s:NetRestorePosn()
-"  call Dret("NetSavePosn : winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
+  call Dret("NetSavePosn : winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
 endfun
 
 " ------------------------------------------------------------------------
 " NetRestorePosn: restores the cursor and file position as saved by NetSavePosn() {{{1
 fun! <SID>NetRestorePosn()
-"  call Dfunc("NetRestorePosn() winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
+  call Dfunc("NetRestorePosn() winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
 
   exe "silent! ".s:netrw_winnr."wincmd w"
   if v:shell_error == 0
@@ -154,13 +172,13 @@ fun! <SID>NetRestorePosn()
   " restore position
   exe "norm! ".s:netrw_line."G0".s:netrw_col."\<bar>"
 
-"  call Dret("NetRestorePosn")
+  call Dret("NetRestorePosn")
 endfun
 
 " ------------------------------------------------------------------------
 " NetRead: responsible for reading a file over the net {{{1
 fun! s:NetRead(...)
-"  call Dfunc("NetRead(a:1<".a:1.">)")
+  call Dfunc("NetRead(a:1<".a:1.">)")
  
   " save options
   call s:NetOptionSave()
@@ -182,18 +200,18 @@ fun! s:NetRead(...)
   " get name of a temporary file
   let tmpfile= tempname()
  
-"  call Decho("ichoice=".ichoice." readcmd<".readcmd.">")
+  call Decho("ichoice=".ichoice." readcmd<".readcmd.">")
   while ichoice <= a:0
  
    " attempt to repeat with previous host-file-etc
    if exists("b:netrw_lastfile") && a:0 == 0
-"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
     let choice = b:netrw_lastfile
     let ichoice= ichoice + 1
  
    else
     exe "let choice= a:" . ichoice
-"    call Decho("no lastfile: choice<" . choice . ">")
+    call Decho("no lastfile: choice<" . choice . ">")
  
     " Reconstruct Choice if choice starts with '"'
     if match(choice,"?") == 0
@@ -211,7 +229,7 @@ fun! s:NetRead(...)
      echo ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
      break
     elseif match(choice,"^\"") != -1
-"     call Decho("reconstructing choice")
+     call Decho("reconstructing choice")
      if match(choice,"\"$") != -1
       " case "..."
       let choice=strpart(choice,1,strlen(choice)-2)
@@ -225,7 +243,7 @@ fun! s:NetRead(...)
        let ichoice     = ichoice + 1
        if ichoice > a:0
         echoerr "Unbalanced string in filename '". wholechoice ."'"
-"        call Dret("NetRead")
+        call Dret("NetRead")
         return
        endif
        let choice= a:{ichoice}
@@ -235,13 +253,13 @@ fun! s:NetRead(...)
     endif
    endif
 
-"   call Decho("choice<" . choice . ">")
+   call Decho("choice<" . choice . ">")
    let ichoice= ichoice + 1
  
    " fix up windows urls
    if has("win32")
     let choice = substitute(choice,'\\','/','ge')
-"    call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile)
+    call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile)
 
     exe 'lcd ' . fnamemodify(tmpfile,':h')
     let tmpfile = fnamemodify(tmpfile,':t')
@@ -250,12 +268,12 @@ fun! s:NetRead(...)
    " Determine method of read (ftp, rcp, etc)
    call s:NetMethod(choice)
  
-   " Check if NetList() should be handling this request
-"   call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
+   " Check if NetBrowse() should be handling this request
+   call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
    if choice =~ "^.*/$"
     if strlen(g:netrw_list_cmd) > 0
-     keepjumps call s:NetList(choice)
-"     call Dret("NetRead")
+     keepjumps call s:NetBrowse(choice)
+     call Dret("NetRead")
     else
      echoerr "sorry, can't do a remote listing; ssh isn't executable"
     endif
@@ -269,7 +287,7 @@ fun! s:NetRead(...)
    ".........................................
    " rcp:  NetRead Method #1
    if  b:netrw_method == 1 " read with rcp
-"    call Decho("read via rcp (method #1)")
+    call Decho("read via rcp (method #1)")
    " ER: noting done with g:netrw_uid yet?
    " ER: on Win2K" rcp machine[.user]:file tmpfile
    " ER: if machine contains '.' adding .user is required (use $USERNAME)
@@ -288,7 +306,7 @@ fun! s:NetRead(...)
      let uid_machine = g:netrw_machine
     endif
    endif
-"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
    exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
    let result           = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
    let b:netrw_lastfile = choice
@@ -296,17 +314,17 @@ fun! s:NetRead(...)
    ".........................................
    " ftp + <.netrc>:  NetRead Method #2
    elseif b:netrw_method  == 2		" read with ftp + <.netrc>
-"    call Decho("read via ftp+.netrc (method #2)")
+    call Decho("read via ftp+.netrc (method #2)")
      let netrw_fname= b:netrw_fname
      new
      set ff=unix
      exe "put ='".g:netrw_ftpmode."'"
      exe "put ='get ".netrw_fname." ".tmpfile."'"
      if exists("g:netrw_port") && g:netrw_port != ""
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
+      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
       exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
      else
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
+      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
       exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
      endif
      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
@@ -321,7 +339,7 @@ fun! s:NetRead(...)
    " ftp + machine,id,passwd,filename:  NetRead Method #3
    elseif b:netrw_method == 3		" read with ftp + machine, id, passwd, and fname
     " Construct execution string (four lines) which will be passed through filter
-"    call Decho("read via ftp+mipf (method #3)")
+    call Decho("read via ftp+mipf (method #3)")
     let netrw_fname= b:netrw_fname
     new
     set ff=unix
@@ -347,9 +365,9 @@ fun! s:NetRead(...)
     " -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('performing ftp -i -n')
+    call Decho('performing ftp -i -n')
     norm 1Gdd
-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
     exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
     if getline(1) !~ "^$"
@@ -362,7 +380,7 @@ fun! s:NetRead(...)
    ".........................................
    " scp: NetRead Method #4
    elseif     b:netrw_method  == 4	" read with scp
-"    call Decho("read via scp (method #4)")
+    call Decho("read via scp (method #4)")
     if exists("g:netrw_port") && g:netrw_port != ""
      let useport= " -P ".g:netrw_port
     else
@@ -370,10 +388,10 @@ fun! s:NetRead(...)
     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(b:netrw_fname,' ?&')." ".cygtmpfile)
+     call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
      exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
     else
-"     call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+     call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
      exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
     endif
     let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
@@ -381,7 +399,7 @@ fun! s:NetRead(...)
  
    ".........................................
    elseif     b:netrw_method  == 5	" read with http (wget)
-"    call Decho("read via http (method #5)")
+    call Decho("read via http (method #5)")
     if g:netrw_http_cmd == ""
      echoerr "neither wget nor fetch command is available"
      exit
@@ -389,7 +407,7 @@ fun! s:NetRead(...)
  
     if match(b:netrw_fname,"#") == -1
      " simple wget
-"     call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&'))
+     call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&'))
      exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&')
      let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
  
@@ -397,12 +415,12 @@ fun! s:NetRead(...)
      " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
      let netrw_html= substitute(b:netrw_fname,"#.*$","","")
      let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
-"     call Decho("netrw_html<".netrw_html.">")
-"     call Decho("netrw_tag <".netrw_tag.">")
-"     call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html)
+     call Decho("netrw_html<".netrw_html.">")
+     call Decho("netrw_tag <".netrw_tag.">")
+     call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html)
      exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html
      let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
-"     call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
+     call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
      exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
     endif
     let b:netrw_lastfile = choice
@@ -410,7 +428,7 @@ fun! s:NetRead(...)
    ".........................................
    " cadaver: NetRead Method #6
    elseif     b:netrw_method  == 6	" read with cadaver
-"    call Decho("read via cadaver (method #6)")
+    call Decho("read via cadaver (method #6)")
  
     " Construct execution string (four lines) which will be passed through filter
     let netrw_fname= b:netrw_fname
@@ -432,7 +450,7 @@ fun! s:NetRead(...)
  
     " perform cadaver operation:
     norm 1Gdd
-"    call Decho("executing: %!".g:netrw_dav_cmd)
+    call Decho("executing: %!".g:netrw_dav_cmd)
     exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
     bd!
     let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
@@ -441,13 +459,13 @@ fun! s:NetRead(...)
    ".........................................
    " rsync: NetRead Method #7
    elseif     b:netrw_method  == 7	" read with rsync
-"    call Decho("read via rsync (method #7)")
+    call Decho("read via rsync (method #7)")
     if g:netrw_cygwin == 1
      let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
      exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
     else
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
      exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
     endif
     let result		= s:NetGetFile(readcmd,tmpfile, b:netrw_method)
@@ -466,13 +484,13 @@ fun! s:NetRead(...)
     else
      let netrw_option= "ftp"
     endif
-"    call Decho("read via fetch for ".netrw_option)
+    call Decho("read via fetch for ".netrw_option)
  
     if exists("g:netrw_uid") && g:netrw_uid != "" && exists("g:netrw_passwd") && g:netrw_passwd != ""
-"     call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
+     call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
      exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&')
     else
-"     call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
+     call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
      exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&')
     endif
  
@@ -482,14 +500,14 @@ fun! s:NetRead(...)
    ".........................................
    " sftp: NetRead Method #9
    elseif     b:netrw_method  == 9	" read with sftp
-"    call Decho("read via sftp (method #4)")
+    call Decho("read via sftp (method #4)")
     if g:netrw_cygwin == 1
      let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
-"     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+     call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
      exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
     else
-"     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
      exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
     endif
     let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
@@ -502,7 +520,7 @@ fun! s:NetRead(...)
   endwhile
  
   " cleanup
-"  call Decho("cleanup")
+  call Decho("cleanup")
   if exists("b:netrw_method")
    unlet b:netrw_method
    unlet g:netrw_machine
@@ -510,14 +528,14 @@ fun! s:NetRead(...)
   endif
   call s:NetOptionRestore()
  
-"  call Dret("NetRead")
+  call Dret("NetRead")
 endfun
 " end of NetRead
 
 " ------------------------------------------------------------------------
 " NetGetFile: Function to read file "fname" with command "readcmd". {{{1
 fun! s:NetGetFile(readcmd, fname, method)
-"   call Dfunc("NetGetFile(readcmd<".a:readcmd.">,fname<".a:fname."> method<".a:method.">)")
+   call Dfunc("NetGetFile(readcmd<".a:readcmd.">,fname<".a:fname."> method<".a:method.">)")
  
   if exists("*NetReadFixup")
    " for the use of NetReadFixup (not otherwise used internally)
@@ -528,14 +546,14 @@ fun! s:NetGetFile(readcmd, fname, method
   if &term == "win32"
    if &shell == "bash"
     let fname=a:fname
-"    call Decho("(win32 && bash) fname<".fname.">")
+    call Decho("(win32 && bash) fname<".fname.">")
    else
     let fname=substitute(a:fname,'/','\\\\','ge')
-"    call Decho("(win32 && !bash) fname<".fname.">")
+    call Decho("(win32 && !bash) fname<".fname.">")
    endif
   else
    let fname= a:fname
-"   call Decho("(copied) fname<".fname.">")
+   call Decho("(copied) fname<".fname.">")
   endif
  
   " get the file, but disable undo when reading a new buffer
@@ -594,10 +612,10 @@ fun! s:NetGetFile(readcmd, fname, method
     let &ul= oldul
    endif
   elseif filereadable(fname)
-"   call Decho("exe<".a:readcmd." ".v:cmdarg." ".fname.">")
+   call Decho("exe<".a:readcmd." ".v:cmdarg." ".fname.">")
    exe a:readcmd." ".v:cmdarg." ".fname
   else
-"   call Dret("NetGetFile")
+   call Dret("NetGetFile")
    return
   endif
  
@@ -609,22 +627,22 @@ fun! s:NetGetFile(readcmd, fname, method
    else
     let line2= line("$") - line2
    endif
-"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
+   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
    call NetReadFixup(a:method, line1, line2)
   endif
  
-"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname))
+  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname))
  
  " insure that we have the right filetype and that its being displayed
   filetype detect
   redraw!
-"  call Dret("NetGetFile")
+  call Dret("NetGetFile")
 endfun
 
 " ------------------------------------------------------------------------
 " NetWrite: responsible for writing a file over the net {{{1
 fun! s:NetWrite(...) range
-"  call Dfunc("NetWrite(a:0=".a:0.")")
+  call Dfunc("NetWrite(a:0=".a:0.")")
  
   " option handling
   let mod= 0
@@ -646,7 +664,7 @@ fun! s:NetWrite(...) range
  
    " attempt to repeat with previous host-file-etc
    if exists("b:netrw_lastfile") && a:0 == 0
-"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
     let choice = b:netrw_lastfile
     let ichoice= ichoice + 1
    else
@@ -681,7 +699,7 @@ fun! s:NetWrite(...) range
        let ichoice    = ichoice + 1
        if choice > a:0
         echoerr "Unbalanced string in filename '". wholechoice ."'"
-"        call Dret("NetWrite")
+        call Dret("NetWrite")
         return
        endif
        let choice= a:{ichoice}
@@ -690,7 +708,7 @@ fun! s:NetWrite(...) range
      endif
     endif
    endif
-"   call Decho("choice<" . choice . ">")
+   call Decho("choice<" . choice . ">")
    let ichoice= ichoice + 1
  
    " fix up windows urls
@@ -711,7 +729,7 @@ fun! s:NetWrite(...) range
    ".........................................
    " rcp: NetWrite Method #1
    if  b:netrw_method == 1	" write with rcp
-" Decho "write via rcp (method #1)"
+ Decho "write via rcp (method #1)"
     if s:netrw_has_nt_rcp == 1
      if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
       let uid_machine = g:netrw_machine .'.'. g:netrw_uid
@@ -725,7 +743,7 @@ fun! s:NetWrite(...) range
       let uid_machine = g:netrw_machine
      endif
     endif
-"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&'))
+    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&'))
     exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&')
     let b:netrw_lastfile = choice
  
@@ -736,14 +754,14 @@ fun! s:NetWrite(...) range
     new
     set ff=unix
     exe "put ='".g:netrw_ftpmode."'"
-"    call Decho(" NetWrite: put ='".g:netrw_ftpmode."'")
+    call Decho(" NetWrite: put ='".g:netrw_ftpmode."'")
     exe "put ='put ".tmpfile." ".netrw_fname."'"
-"    call Decho("put ='put ".tmpfile." ".netrw_fname."'")
+    call Decho("put ='put ".tmpfile." ".netrw_fname."'")
     if exists("g:netrw_port") && g:netrw_port != ""
-"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
+     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
      exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
     else
-"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
+     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
      exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
     endif
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
@@ -779,9 +797,9 @@ fun! s:NetWrite(...) range
     " -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('performing ftp -i -n')
+    call Decho('performing ftp -i -n')
     norm 1Gdd
-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
     exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
     if getline(1) !~ "^$"
@@ -800,10 +818,10 @@ fun! s:NetWrite(...) range
     endif
     if g:netrw_cygwin == 1
      let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+     call Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
      exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
     else
-"     call Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+     call Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
      exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
     endif
     let b:netrw_lastfile = choice
@@ -816,7 +834,7 @@ fun! s:NetWrite(...) range
    ".........................................
    " dav: NetWrite Method #6
    elseif     b:netrw_method == 6	" write with cadaver
-"    call Decho("write via cadaver (method #6)")
+    call Decho("write via cadaver (method #6)")
  
     " Construct execution string (four lines) which will be passed through filter
     let netrw_fname= b:netrw_fname
@@ -838,7 +856,7 @@ fun! s:NetWrite(...) range
  
     " perform cadaver operation:
     norm 1Gdd
-"    call Decho("executing: %!".g:netrw_dav_cmd)
+    call Decho("executing: %!".g:netrw_dav_cmd)
     exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
     bd!
     let b:netrw_lastfile = choice
@@ -848,10 +866,10 @@ fun! s:NetWrite(...) range
    elseif     b:netrw_method == 7	" write with rsync
     if g:netrw_cygwin == 1
      let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+     call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
      exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
     else
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+     call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
      exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
     endif
     let b:netrw_lastfile = choice
@@ -869,7 +887,7 @@ fun! s:NetWrite(...) range
     set ff=unix
     put ='put '.tmpfile.' '.netrw_fname
     norm 1Gdd
-"    call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
+    call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
     exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
     bd!
     let b:netrw_lastfile= choice
@@ -881,7 +899,7 @@ fun! s:NetWrite(...) range
   endwhile
  
   " cleanup
-"  call Decho("cleanup")
+  call Decho("cleanup")
   let result=delete(tmpfile)
   call s:NetOptionRestore()
  
@@ -889,17 +907,25 @@ fun! s:NetWrite(...) range
    let &mod= mod	" usually equivalent to set nomod
   endif
  
-"  call Dret("NetWrite")
+  call Dret("NetWrite")
 endfun
 " end of NetWrite
 
 " ------------------------------------------------------------------------
-" NetList: This function uses the command in g:netrw_list_cmd to get a list {{{1
+"  Remote Directory Browsing Support:    {{{1
+" NetBrowse: This function uses the command in g:netrw_list_cmd to get a list {{{2
 "  of the contents of a remote directory.  It is assumed that the
 "  g:netrw_list_cmd has a string, HOSTNAME, that needs to be substituted
 "  with the requested remote hostname first.
-fun! <SID>NetList(dirname)
-"  call Dfunc("NetList(dirname<".a:dirname.">)")
+fun! <SID>NetBrowse(dirname)
+  call Dfunc("NetBrowse(dirname<".a:dirname.">)")
+
+  " sanity check
+  if !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
+   echoerr "***netrw*** this system doesn't support remote directory listing"
+   call Dret("NetBrowse 0")
+   return 0
+  endif
 
   " make this buffer modifiable
   setlocal ma
@@ -907,8 +933,8 @@ fun! <SID>NetList(dirname)
   " analyze a:dirname and g:netrw_list_cmd
   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
   if a:dirname !~ dirpat
-   echoerr "NetList: I don't understand your dirname<".a:dirname.">"
-"   call Dret("NetList 0 : badly formatted dirname")
+   echoerr "NetBrowse: I don't understand your dirname<".a:dirname.">"
+   call Dret("NetBrowse 0 : badly formatted dirname")
    return 0
   endif
   let method  = substitute(a:dirname,dirpat,'\1','')
@@ -916,57 +942,57 @@ fun! <SID>NetList(dirname)
   let machine = substitute(a:dirname,dirpat,'\3','')
   let path    = substitute(a:dirname,dirpat,'\4','')
   let fname   = substitute(a:dirname,'^.*/\ze.','','')
-"  call Decho("set up method <".method .">")
-"  call Decho("set up user   <".user   .">")
-"  call Decho("set up machine<".machine.">")
-"  call Decho("set up path   <".path   .">")
-"  call Decho("set up fname  <".fname  .">")
+  call Decho("set up method <".method .">")
+  call Decho("set up user   <".user   .">")
+  call Decho("set up machine<".machine.">")
+  call Decho("set up path   <".path   .">")
+  call Decho("set up fname  <".fname  .">")
 
   let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
-"  call Decho("set up listcmd<".listcmd.">")
+  call Decho("set up listcmd<".listcmd.">")
 
   if fname =~ '@$' && fname !~ '^"'
-"   call Decho("attempt transfer of symlink as file")
-   call s:NetList(substitute(a:dirname,'@$','','e'))
+   call Decho("attempt transfer of symlink as file")
+   call s:NetBrowse(substitute(a:dirname,'@$','','e'))
    redraw!
-"   call Dret("NetList 0 : symlink")
+   call Dret("NetBrowse 0 : symlink")
    return 0
 
   elseif fname !~ '/$' && fname !~ '^"'
    " looks like a regular file, attempt transfer
-"   call Decho("attempt transfer as regular file<".a:dirname.">")
+   call Decho("attempt transfer as regular file<".a:dirname.">")
 
    " remove any filetype indicator from end of dirname, except for the
    " "this is a directory" indicator (/).  There shouldn't be one of those,
    " anyway.
    let path= substitute(path,'[*=@|]$','','e')
-"   call Decho("new path<".path.">")
+   call Decho("new path<".path.">")
 
    " remote-read the requested file into current buffer
    enew!
-   exe "file ".method."://".machine."/".path
+   exe "file ".method."://".user.machine."/".path
    exe "silent doau BufReadPre ".fname
-   silent call s:NetRead(method."://".machine."/".path)
+   silent call s:NetRead(method."://".user.machine."/".path)
    exe "silent doau BufReadPost ".fname
    1d
    set nomod
 
-"   call Dret("NetList 0 : file<".fname.">")
+   call Dret("NetBrowse 0 : file<".fname.">")
    return 0
   endif
 
   " ---------------------------------------------------------------------
   "  Perform Directory Listing:
-"  call Decho("Perform directory listing...")
+  call Decho("Perform directory listing...")
   " set up new buffer and map
   let bufname   = method.'://'.user.machine.'/'.path
   let bufnamenr = bufnr(bufname)
-"  call Decho("bufname<".bufname."> bufnamenr=".bufnamenr)
+  call Decho("bufname<".bufname."> bufnamenr=".bufnamenr)
   if bufnamenr != -1
    " buffer already exists, switch to it!
    exe "b ".bufnamenr
    if line("$") >= 5
-"    call Dret("NetList 1")
+    call Dret("NetBrowse 1")
     return 1
    endif
   else
@@ -975,22 +1001,46 @@ fun! <SID>NetList(dirname)
   setlocal bt=nofile bh=wipe nobl
   exe 'file '.bufname
   set bt=nowrite bh=hide nobl
-  nnoremap <buffer> <cr>	:exe "norm! 0"<bar>call <SID>NetList(<SID>NetListChgDir(expand("%")))<cr>
+  nnoremap <buffer> <silent> <cr>	:exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr>
+  nnoremap <buffer> <silent> <c-l>	:exe "norm! 0"<bar>call <SID>NetBrowse(<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_list_showall=1<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
+  nnoremap <buffer> <silent> o		:exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr>
+  nnoremap <buffer> <silent> v		:exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr>
+  nnoremap <buffer> <silent> x		:exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr>
+  exe 'nnoremap <buffer> <silent> <del>	:exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
+  exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
+  exe 'nnoremap <buffer> <silent> D	:exe "norm! 0"<bar>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>'
+  nnoremap <buffer> ?		:he netrw-dir<cr>
   setlocal ma
 
-"  call Decho("executing: r! ".listcmd." '".path."'")
+  call Decho("executing: r! ".listcmd." '".path."'")
   keepjumps put ='\" =============================='
   keepjumps put ='\" Netrw Remote Directory Listing'
   keepjumps put ='\"   '.bufname
+  let g:netrw_bannercnt= 5
+  if g:netrw_list_hide != "" && !exists("g:netrw_list_showall")
+   keepjumps put ='\"   Hiding: '.g:netrw_list_hide
+   let g:netrw_bannercnt= g:netrw_bannercnt + 1
+  endif
   keepjumps put ='\" =============================='
   exe "silent r! ".listcmd." '".path."'"
   keepjumps 1d
   set ft=netrwlist
-  if line("$") >= 5
-   keepjumps silent 5,$s/^\(.*\)\([/@]\)$/ \2\1/e
-   keepjumps silent 5,$call s:NetSort()
-   keepjumps silent 5,$s/^ \(.\)\(.*\)$/\2\1/e
-   keepjumps 5
+  if line("$") >= g:netrw_bannercnt
+   if !exists("g:netrw_list_showall")
+    if g:netrw_list_hide != ""
+     call s:NetrwListHide()
+    endif
+   else
+    unlet g:netrw_list_showall
+   endif
+   exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\(.*\)\([/@]\)$/ \2\1/e'
+   exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()'
+   exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^ \(.\)\(.*\)$/\2\1/e'
+   exe 'keepjumps '.g:netrw_bannercnt
   endif
   let prvbuf= bufnr(bufname)
   if prvbuf != -1
@@ -999,26 +1049,27 @@ fun! <SID>NetList(dirname)
 
   setlocal noma nomod
 
-"  call Dret("NetList 1")
+  call Dret("NetBrowse 1")
   return 1
 endfun
 
 " ---------------------------------------------------------------------
-" NetListCombine:
-fun! <SID>NetListChgDir(dirname)
-  let newdir= expand("<cWORD>")
-"  call Dfunc("NetListChgDir(dirname<".a:dirname.">) newdir<".newdir.">")
+" NetBrowseChgDir: {{{2
+fun! <SID>NetBrowseChgDir(dirname,newdir)
+  call Dfunc("NetBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">)")
 
   let dirname= a:dirname
+  let newdir = a:newdir
 
   if newdir !~ '/$'
    " handling a file
    let dirname= dirname.newdir
-"   call Decho("handling a file: dirname<".dirname.">")
+   call Decho("handling a file: dirname<".dirname.">")
 
   elseif newdir == './'
    " refresh the directory list
-"   call Decho("refresh directory listing")
+   call Decho("refresh directory listing")
+   set ma
    %d
 
   elseif newdir == '../'
@@ -1033,18 +1084,154 @@ fun! <SID>NetListChgDir(dirname)
     " strip off a directory name from dirname
     let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','')
    endif
-"   call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">")
+   call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">")
 
   else
    " go down one directory
    let dirname= dirname.newdir
-"   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
+   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
   endif
 
-"  call Dret("NetListChgDir <".dirname.">")
+  call Dret("NetBrowseChgDir <".dirname.">")
   return dirname
 endfun
 
+" ---------------------------------------------------------------------
+" NetBrowseRm: remove a remote file or directory {{{2
+fun! <SID>NetBrowseRm(usrhost,path) range
+  call Dfunc("NetBrowseRm(usrhost<".a:usrhost."> path<".a:path.">)")
+  call Decho("firstline=".a:firstline." lastline=".a:lastline)
+
+  " preparation for removing multiple files/directories
+  let ctr= a:firstline
+
+  " remove multiple files and directories
+  while ctr <= a:lastline
+   exe ctr
+
+   norm! 0
+   let rmfile= a:path.expand("<cWORD>")
+   call Decho("rmfile<".rmfile.">")
+
+   if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$')
+    " attempt to remove file
+    let netrw_rm_cmd= substitute(g:netrw_rm_cmd,'HOSTNAME',a:usrhost,'').' '.rmfile
+    call Decho("attempt to remove file: system(".netrw_rm_cmd.")")
+    call inputsave()
+    let ok= input("Confirm deletion of file<".rmfile."> ","y")
+    call inputrestore()
+    if ok == "y"
+     let ret= system(netrw_rm_cmd)
+     call Decho("returned=".ret." errcode=".v:shell_error)
+    endif
+  
+   else
+    " attempt to remove directory
+    let netrw_rmdir_cmd= substitute(g:netrw_rmdir_cmd,'HOSTNAME',a:usrhost,'').' '.rmfile
+    call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")")
+    call inputsave()
+    let ok= input("Confirm deletion of directory<".rmfile."> ","y")
+    call inputrestore()
+
+    if ok == "y"
+     let ret= system(netrw_rmdir_cmd)
+     call Decho("returned=".ret." errcode=".v:shell_error)
+
+     if v:shell_error != 0
+      let netrw_rmf_cmd= substitute(g:netrw_rmf_cmd,'HOSTNAME',a:usrhost,'').' '.substitute(rmfile,'/$','','e')
+      call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
+      let ret= system(netrw_rmf_cmd)
+      call Decho("returned=".ret." errcode=".v:shell_error)
+
+      if v:shell_error != 0
+       echoerr "unable to remove directory<".rmfile."> -- is it empty?"
+      endif
+     endif
+    endif
+   endif
+
+   let ctr= ctr + 1
+  endwhile
+
+  " refresh the directory
+  let curline= line(".")-1
+  call Decho("refresh the directory")
+  call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))
+  exe curline
+
+  call Dret("NetBrowseRm")
+endfun
+
+" ---------------------------------------------------------------------
+" NetBrowseRename: rename a remote file or directory {{{2
+fun! <SID>NetBrowseRename(usrhost,path)
+  call Dfunc("NetBrowseRename(usrhost<".a:usrhost."> path<".a:path.">)")
+
+  " preparation for removing multiple files/directories
+  let ctr        = a:firstline
+  let rename_cmd = substitute(g:netrw_rename_cmd,'\<HOSTNAME\>',a:usrhost,'')
+
+  " attempt to rename files/directories
+  while ctr <= a:lastline
+   exe ctr
+
+   norm! 0
+   let oldname= a:path.expand("<cWORD>")
+   call Decho("oldname<".oldname.">")
+
+   call inputsave()
+   let newname= input("Moving ".a:usrhost."'s ".oldname." to : ",oldname)
+   call inputrestore()
+
+   let ret= system(rename_cmd." ".oldname." ".newname)
+   call Decho("executing system(".rename_cmd." ".oldname." ".newname)
+
+   let ctr= ctr + 1
+  endwhile
+
+  " refresh the directory
+  let curline= line(".")
+  call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))
+  exe curline
+  call Dret("NetBrowseRename")
+endfun
+
+" ---------------------------------------------------------------------
+" NetBrowseX:  allows users to write custom functions to operate on {{{2
+"              files given their extension
+fun! <SID>NetBrowseX(fname)
+  call Dfunc("NetBrowseX(".a:fname.")")
+
+  let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
+  call Decho("exten<".exten."> "."NetrwFileHandler_".exten."():exists=".exists("*NetrwFileHandler_".exten))
+  if exten != "" && exists("*NetrwFileHandler_".exten)
+   exe "call NetrwFileHandler_".exten.'("'.a:fname.'")'
+  endif
+  call Dret("NetBrowseX")
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
+" separated patterns given in g:netrw_list_hide
+fun! <SID>NetrwListHide()
+  call Dfunc("NetrwListHide() listhide<".g:netrw_list_hide.">")
+
+  let listhide= g:netrw_list_hide
+  while listhide != ""
+   if listhide =~ ','
+    let hide     = substitute(listhide,',.*$','','e')
+    let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e')
+   else
+    let hide     = listhide
+    let listhide= ""
+   endif
+   call Decho("pruning <".hide."> listhide<".listhide.">")
+   exe 'keepjumps silent '.g:netrw_bannercnt.',$g~'.hide.'~d'
+  endwhile
+
+  call Dret("NetrwListHide")
+endfun
+
 " ------------------------------------------------------------------------
 " NetMethod:  determine method of transfer {{{1
 "  method == 1: rcp
@@ -1057,7 +1244,7 @@ endfun
 "	     8: fetch
 "	     9: sftp
 fun! s:NetMethod(choice)  " globals: method machine id passwd fname
-"   call Dfunc("NetMethod(a:choice<".a:choice.">)")
+   call Dfunc("NetMethod(a:choice<".a:choice.">)")
  
   " initialization
   let b:netrw_method  = 0
@@ -1089,11 +1276,11 @@ fun! s:NetMethod(choice)  " globals: met
   let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
   let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
  
-"  call Decho("determine method:")
+  call Decho("determine method:")
   " Determine Method
   " rcp://user@hostname/...path-to-file
   if match(a:choice,rcpurm) == 0
-"   call Decho("rcp://...")
+   call Decho("rcp://...")
    let b:netrw_method = 1
    let userid	     = substitute(a:choice,rcpurm,'\2',"")
    let g:netrw_machine= substitute(a:choice,rcpurm,'\3',"")
@@ -1104,7 +1291,7 @@ fun! s:NetMethod(choice)  " globals: met
  
   " scp://user@hostname/...path-to-file
   elseif match(a:choice,scpurm) == 0
-"   call Decho("scp://...")
+   call Decho("scp://...")
    let b:netrw_method = 4
    let g:netrw_machine= substitute(a:choice,scpurm,'\1',"")
    let b:netrw_port   = substitute(a:choice,scpurm,'\2',"")
@@ -1112,28 +1299,28 @@ fun! s:NetMethod(choice)  " globals: met
  
   " http://user@hostname/...path-to-file
   elseif match(a:choice,httpurm) == 0
-"   call Decho("http://...")
+   call Decho("http://...")
    let b:netrw_method = 5
    let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
    let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
  
   " dav://hostname[:port]/..path-to-file..
   elseif match(a:choice,davurm) == 0
-"   call Decho("dav://...")
+   call Decho("dav://...")
    let b:netrw_method= 6
    let g:netrw_machine= substitute(a:choice,davurm,'\1',"")
    let b:netrw_fname  = substitute(a:choice,davurm,'\2',"")
  
   " rsync://user@hostname/...path-to-file
   elseif match(a:choice,rsyncurm) == 0
-"   call Decho("rsync://...")
+   call Decho("rsync://...")
    let b:netrw_method = 7
    let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
    let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
  
   " ftp://[user@]hostname[[:#]port]/...path-to-file
   elseif match(a:choice,ftpurm) == 0
-"   call Decho("ftp://...")
+   call Decho("ftp://...")
    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',"")
@@ -1161,7 +1348,7 @@ fun! s:NetMethod(choice)  " globals: met
    endif
  
   elseif match(a:choice,fetchurm) == 0
-"   call Decho("fetch://...")
+   call Decho("fetch://...")
    let b:netrw_method = 8
    let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
    let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
@@ -1170,7 +1357,7 @@ fun! s:NetMethod(choice)  " globals: met
  
   " Issue an ftp : "machine id password [path/]filename"
   elseif match(a:choice,mipf) == 0
-"   call Decho("(ftp) host id pass file")
+   call Decho("(ftp) host id pass file")
    let b:netrw_method  = 3
    let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
    let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
@@ -1179,7 +1366,7 @@ fun! s:NetMethod(choice)  " globals: met
  
   " Issue an ftp: "hostname [path/]filename"
   elseif match(a:choice,mf) == 0
-"   call Decho("(ftp) host file")
+   call Decho("(ftp) host file")
    if exists("g:netrw_uid") && exists("g:netrw_passwd")
     let b:netrw_method  = 3
     let g:netrw_machine = substitute(a:choice,mf,'\1',"")
@@ -1193,22 +1380,22 @@ fun! s:NetMethod(choice)  " globals: met
  
   " sftp://user@hostname/...path-to-file
   elseif match(a:choice,sftpurm) == 0
-"   call Decho("sftp://...")
+   call Decho("sftp://...")
    let b:netrw_method = 9
    let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
    let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
  
   " Issue an rcp: hostname:filename"  (this one should be last)
   elseif match(a:choice,rcphf) == 0
-"   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
+   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
    let b:netrw_method = 1
    let userid	     = substitute(a:choice,rcphf,'\2',"")
    let g:netrw_machine= substitute(a:choice,rcphf,'\3',"")
    let b:netrw_fname  = substitute(a:choice,rcphf,'\4',"")
-"   call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
-"   call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
-"   call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
-"   call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
+   call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
+   call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
+   call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
+   call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
    if userid != ""
     let g:netrw_uid= userid
    endif
@@ -1222,18 +1409,18 @@ fun! s:NetMethod(choice)  " globals: met
    let b:netrw_method  = -1
   endif
  
-"  call Decho("a:choice       <".a:choice.">")
-"  call Decho("b:netrw_method <".b:netrw_method.">")
-"  call Decho("g:netrw_machine<".g:netrw_machine.">")
-"  call Decho("g:netrw_port   <".g:netrw_port.">")
-"  if exists("g:netrw_uid")		"Decho
-"   call Decho("g:netrw_uid    <".g:netrw_uid.">")
-"  endif					"Decho
-"  if exists("g:netrw_passwd")		"Decho
-"   call Decho("g:netrw_passwd <".g:netrw_passwd.">")
-"  endif					"Decho
-"  call Decho("b:netrw_fname  <".b:netrw_fname.">")
-"  call Dret("NetMethod")
+  call Decho("a:choice       <".a:choice.">")
+  call Decho("b:netrw_method <".b:netrw_method.">")
+  call Decho("g:netrw_machine<".g:netrw_machine.">")
+  call Decho("g:netrw_port   <".g:netrw_port.">")
+  if exists("g:netrw_uid")		"Decho
+   call Decho("g:netrw_uid    <".g:netrw_uid.">")
+  endif					"Decho
+  if exists("g:netrw_passwd")		"Decho
+   call Decho("g:netrw_passwd <".g:netrw_passwd.">")
+  endif					"Decho
+  call Decho("b:netrw_fname  <".b:netrw_fname.">")
+  call Dret("NetMethod")
 endfun
 " end of NetMethod
 
@@ -1246,32 +1433,32 @@ fun! NetUserPass(...)
 
  " get/set userid
  if a:0 == 0
-"  call Dfunc("NetUserPass(a:0<".a:0.">)")
+  call Dfunc("NetUserPass(a:0<".a:0.">)")
   if !exists("g:netrw_uid") || g:netrw_uid == ""
    " via prompt
    let g:netrw_uid= input('Enter username: ')
   endif
  else	" from command line
-"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
+  call Dfunc("NetUserPass(a:1<".a:1.">) {")
   let g:netrw_uid= a:1
  endif
 
  " get password
  if a:0 <= 1 " via prompt
-"  call Decho("a:0=".a:0." case <=1:")
+  call Decho("a:0=".a:0." case <=1:")
   let g:netrw_passwd= inputsecret("Enter Password: ")
  else " from command line
-"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
+  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
   let g:netrw_passwd=a:2
  endif
-"  call Dret("NetUserPass")
+  call Dret("NetUserPass")
 endfun
 " end NetUserPass
 
 " ------------------------------------------------------------------------
 " NetOptionSave: save options and set to "standard" form {{{1
 fun!s:NetOptionSave()
-"  call Dfunc("NetOptionSave()")
+  call Dfunc("NetOptionSave()")
 
   " Get Temporary Filename
   let s:aikeep	= &ai
@@ -1290,16 +1477,16 @@ fun!s:NetOptionSave()
   if has("win32") && !has("win95")
    let s:swfkeep= &swf
    set noswf
-"  call Decho("setting s:swfkeep to <".&swf.">")
+  call Decho("setting s:swfkeep to <".&swf.">")
   endif
 
-"  call Dret("NetOptionSave")
+  call Dret("NetOptionSave")
 endfun
 
 " ------------------------------------------------------------------------
 " NetOptionRestore: restore options {{{1
 fun! s:NetOptionRestore()
-"  call Dfunc("NetOptionRestore()")
+  call Dfunc("NetOptionRestore()")
  
   let &ai	= s:aikeep
   let &cin	= s:cinkeep
@@ -1322,7 +1509,7 @@ fun! s:NetOptionRestore()
   unlet s:twkeep
   unlet s:dirkeep
  
-"  call Dret("NetOptionRestore")
+  call Dret("NetOptionRestore")
 endfun
 
 " ------------------------------------------------------------------------
@@ -1334,12 +1521,12 @@ endfun
 "               at the end of the transfer.
 if has("win95") && g:netrw_win95ftp
  fun! NetReadFixup(method, line1, line2)
-"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
+   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
    if method == 3   " ftp (no <.netrc>)
     let fourblanklines= line2 - 3
     silent fourblanklines.",".line2."g/^\s*/d"
    endif
-"   call Dret("NetReadFixup")
+   call Dret("NetReadFixup")
  endfun
 endif