diff runtime/plugin/netrw.vim @ 12:bdeee1504ac1

updated for version 7.0004
author vimboss
date Fri, 02 Jul 2004 15:38:35 +0000
parents 4424b47a0797
children 631143ac4a01
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
+" Last Change:	Jun 30, 2004
 " Maintainer:	Charles E. Campbell, Jr. PhD   <drchipNOSPAM at campbellfamily.biz>
-" Version:	47f	NOT RELEASED
+" Version:	47g	ASTRO-ONLY
 " 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 = "v47f	NOT RELEASED"
+let loaded_netrw = "v47g	ASTRO-ONLY"
 let s:save_cpo   = &cpo
 set cpo&vim
 
@@ -36,7 +36,7 @@ if !exists("g:netrw_list_cmd")
   " 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")
+"  call Decho("ssh is not executable, can't do remote directory exploring")
   let g:netrw_list_cmd= ""
  endif
 endif
@@ -63,6 +63,17 @@ endif
 if !exists("g:netrw_list_hide")
  let g:netrw_list_hide= ""
 endif
+if !exists("g:netrw_sort_by")
+ " alternatives: date size
+ let g:netrw_sort_by= "name"
+endif
+if !exists("g:netrw_sort_sequence")
+ let g:netrw_sort_sequence= '/$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$'
+endif
+if !exists("g:netrw_sort_direction")
+ " alternative: reverse  (z y x ...)
+ let g:netrw_sort_direction= "normal"
+endif
 
 " ---------------------------------------------------------------------
 " Default values for global protocol variables {{{1
@@ -142,7 +153,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(".")
@@ -153,13 +164,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
@@ -172,13 +183,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()
@@ -200,18 +211,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
@@ -229,7 +240,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)
@@ -243,7 +254,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}
@@ -253,13 +264,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')
@@ -269,11 +280,11 @@ fun! s:NetRead(...)
    call s:NetMethod(choice)
  
    " Check if NetBrowse() should be handling this request
-   call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
+"   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:NetBrowse(choice)
-     call Dret("NetRead")
+"     call Dret("NetRead")
     else
      echoerr "sorry, can't do a remote listing; ssh isn't executable"
     endif
@@ -287,7 +298,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)
@@ -306,7 +317,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
@@ -314,17 +325,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)
@@ -339,7 +350,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
@@ -365,9 +376,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) !~ "^$"
@@ -380,7 +391,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
@@ -388,10 +399,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)
@@ -399,7 +410,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
@@ -407,7 +418,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)
  
@@ -415,12 +426,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
@@ -428,7 +439,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
@@ -450,22 +461,22 @@ 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)
+    let result           = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
  
    ".........................................
    " 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)
@@ -484,13 +495,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
  
@@ -500,14 +511,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)
@@ -520,7 +531,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
@@ -528,14 +539,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)
@@ -546,14 +557,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
@@ -612,10 +623,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
  
@@ -627,22 +638,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
@@ -664,7 +675,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
@@ -699,7 +710,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}
@@ -708,7 +719,7 @@ fun! s:NetWrite(...) range
      endif
     endif
    endif
-   call Decho("choice<" . choice . ">")
+"   call Decho("choice<" . choice . ">")
    let ichoice= ichoice + 1
  
    " fix up windows urls
@@ -729,7 +740,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
@@ -743,7 +754,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
  
@@ -754,14 +765,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)
@@ -797,9 +808,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) !~ "^$"
@@ -818,10 +829,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
@@ -834,7 +845,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
@@ -856,7 +867,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
@@ -866,10 +877,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
@@ -887,7 +898,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
@@ -899,7 +910,7 @@ fun! s:NetWrite(...) range
   endwhile
  
   " cleanup
-  call Decho("cleanup")
+"  call Decho("cleanup")
   let result=delete(tmpfile)
   call s:NetOptionRestore()
  
@@ -907,23 +918,23 @@ fun! s:NetWrite(...) range
    let &mod= mod	" usually equivalent to set nomod
   endif
  
-  call Dret("NetWrite")
+"  call Dret("NetWrite")
 endfun
 " end of NetWrite
 
 " ------------------------------------------------------------------------
-"  Remote Directory Browsing Support:    {{{1
+"  Browsing Support For Remote Directories And Files:    {{{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>NetBrowse(dirname)
-  call Dfunc("NetBrowse(dirname<".a: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")
+"   call Dret("NetBrowse 0")
    return 0
   endif
 
@@ -934,7 +945,7 @@ fun! <SID>NetBrowse(dirname)
   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
   if a:dirname !~ dirpat
    echoerr "NetBrowse: I don't understand your dirname<".a:dirname.">"
-   call Dret("NetBrowse 0 : badly formatted dirname")
+"   call Dret("NetBrowse 0 : badly formatted dirname")
    return 0
   endif
   let method  = substitute(a:dirname,dirpat,'\1','')
@@ -942,31 +953,43 @@ fun! <SID>NetBrowse(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,'')
 
-  let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
-  call Decho("set up listcmd<".listcmd.">")
+   " optionally sort by time (-t) or by size (-S)
+   if g:netrw_sort_by =~ "^t"
+    let listcmd= listcmd."t"
+   elseif g:netrw_sort_by =~ "^s"
+    let listcmd= listcmd."S"
+   endif
+   " optionally sort in reverse
+   if g:netrw_sort_direction =~ "^r"
+    let listcmd= listcmd."r"
+   endif
+
+"  call Decho("set up listcmd<".listcmd.">")
 
   if fname =~ '@$' && fname !~ '^"'
-   call Decho("attempt transfer of symlink as file")
+"   call Decho("attempt transfer of symlink as file")
    call s:NetBrowse(substitute(a:dirname,'@$','','e'))
    redraw!
-   call Dret("NetBrowse 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!
@@ -977,22 +1000,22 @@ fun! <SID>NetBrowse(dirname)
    1d
    set nomod
 
-   call Dret("NetBrowse 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("NetBrowse 1")
+"    call Dret("NetBrowse 1")
     return 1
    endif
   else
@@ -1001,13 +1024,17 @@ fun! <SID>NetBrowse(dirname)
   setlocal bt=nofile bh=wipe nobl
   exe 'file '.bufname
   set bt=nowrite bh=hide nobl
-  nnoremap <buffer> <silent> <cr>	:exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<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> h		:call <SID>NetHideEdit()<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> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr>
+  nnoremap <buffer> <silent> s		: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("%"),'./'))<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>
+  nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<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>'
@@ -1016,18 +1043,32 @@ fun! <SID>NetBrowse(dirname)
   nnoremap <buffer> ?		:he netrw-dir<cr>
   setlocal ma
 
-  call Decho("executing: r! ".listcmd." '".path."'")
+  " Set up the banner
+"  call Decho("executing: r! ".listcmd." '".path."'")
   keepjumps put ='\" =============================='
   keepjumps put ='\" Netrw Remote Directory Listing'
   keepjumps put ='\"   '.bufname
-  let g:netrw_bannercnt= 5
+  let g:netrw_bannercnt= 6
+  if g:netrw_sort_by =~ "^n"
+   " sorted by name
+   let g:netrw_bannercnt= g:netrw_bannercnt + 1
+   keepjumps put ='\"   Sorted by      '.g:netrw_sort_by
+   keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
+  else
+   " sorted by size or date
+   keepjumps put ='\"   Sorted by '.g:netrw_sort_by
+  endif
   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 ='\" =============================='
+
+  " remote read the requested directory
   exe "silent r! ".listcmd." '".path."'"
   keepjumps 1d
+
+  " manipulate the directory listing (hide, sort)
   set ft=netrwlist
   if line("$") >= g:netrw_bannercnt
    if !exists("g:netrw_list_showall")
@@ -1037,10 +1078,11 @@ fun! <SID>NetBrowse(dirname)
    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
+   if g:netrw_sort_by =~ "^n"
+    call s:SetSort()
+    exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()'
+    exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\d\{3}\///e'
+   endif
   endif
   let prvbuf= bufnr(bufname)
   if prvbuf != -1
@@ -1049,14 +1091,14 @@ fun! <SID>NetBrowse(dirname)
 
   setlocal noma nomod
 
-  call Dret("NetBrowse 1")
+"  call Dret("NetBrowse 1")
   return 1
 endfun
 
 " ---------------------------------------------------------------------
 " NetBrowseChgDir: {{{2
 fun! <SID>NetBrowseChgDir(dirname,newdir)
-  call Dfunc("NetBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">)")
+"  call Dfunc("NetBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">)")
 
   let dirname= a:dirname
   let newdir = a:newdir
@@ -1064,11 +1106,11 @@ fun! <SID>NetBrowseChgDir(dirname,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
 
@@ -1084,23 +1126,23 @@ fun! <SID>NetBrowseChgDir(dirname,newdir
     " 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("NetBrowseChgDir <".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)
+"  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
@@ -1111,37 +1153,37 @@ fun! <SID>NetBrowseRm(usrhost,path) rang
 
    norm! 0
    let rmfile= a:path.expand("<cWORD>")
-   call Decho("rmfile<".rmfile.">")
+"   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 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)
+"     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 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)
+"     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.")")
+"      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)
+"      call Decho("returned=".ret." errcode=".v:shell_error)
 
       if v:shell_error != 0
        echoerr "unable to remove directory<".rmfile."> -- is it empty?"
@@ -1155,17 +1197,17 @@ fun! <SID>NetBrowseRm(usrhost,path) rang
 
   " refresh the directory
   let curline= line(".")-1
-  call Decho("refresh the directory")
+"  call Decho("refresh the directory")
   call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))
   exe curline
 
-  call Dret("NetBrowseRm")
+"  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.">)")
+"  call Dfunc("NetBrowseRename(usrhost<".a:usrhost."> path<".a:path.">)")
 
   " preparation for removing multiple files/directories
   let ctr        = a:firstline
@@ -1177,14 +1219,14 @@ fun! <SID>NetBrowseRename(usrhost,path)
 
    norm! 0
    let oldname= a:path.expand("<cWORD>")
-   call Decho("oldname<".oldname.">")
+"   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)
+"   call Decho("executing system(".rename_cmd." ".oldname." ".newname)
 
    let ctr= ctr + 1
   endwhile
@@ -1193,28 +1235,28 @@ fun! <SID>NetBrowseRename(usrhost,path)
   let curline= line(".")
   call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))
   exe curline
-  call Dret("NetBrowseRename")
+"  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.")")
+"  call Dfunc("NetBrowseX(".a:fname.")")
 
   let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
-  call Decho("exten<".exten."> "."NetrwFileHandler_".exten."():exists=".exists("*NetrwFileHandler_".exten))
+"  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")
+"  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.">")
+"  call Dfunc("NetrwListHide() listhide<".g:netrw_list_hide.">")
 
   let listhide= g:netrw_list_hide
   while listhide != ""
@@ -1225,11 +1267,27 @@ fun! <SID>NetrwListHide()
     let hide     = listhide
     let listhide= ""
    endif
-   call Decho("pruning <".hide."> listhide<".listhide.">")
+"   call Decho("pruning <".hide."> listhide<".listhide.">")
    exe 'keepjumps silent '.g:netrw_bannercnt.',$g~'.hide.'~d'
   endwhile
 
-  call Dret("NetrwListHide")
+"  call Dret("NetrwListHide")
+endfun
+
+" ---------------------------------------------------------------------
+" NetHideEdit: allows user to edit the file/directory hiding list
+fun! <SID>NetHideEdit()
+"  call Dfunc("NetHideEdit()")
+
+  call inputsave()
+  let newhide= input("Edit Hiding List: ",g:netrw_list_hide)
+  call inputrestore()
+
+  " refresh the listing
+  let g:netrw_list_hide= newhide
+  silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
+
+"  call Dret("NetHideEdit")
 endfun
 
 " ------------------------------------------------------------------------
@@ -1244,7 +1302,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
@@ -1253,14 +1311,14 @@ fun! s:NetMethod(choice)  " globals: met
   let g:netrw_port    = ""
  
   " Patterns:
-  " mipf     : a:machine a:id password filename	    Use ftp
-  " mf	    : a:machine filename		    Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
+  " mipf     : a:machine a:id password filename	     Use ftp
+  " mf	    : a:machine filename		     Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
   " ftpurm   : ftp://[user@]host[[#:]port]/filename  Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
-  " rcpurm   : rcp://[user@]host/filename	    Use rcp
-  " rcphf    : [user@]host:filename		    Use rcp
+  " rcpurm   : rcp://[user@]host/filename	     Use rcp
+  " rcphf    : [user@]host:filename		     Use rcp
   " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
-  " httpurm  : http://[user@]host/filename	    Use wget
-  " davurm   : dav://host[:port]/path                Use cadaver
+  " httpurm  : http://[user@]host/filename	     Use wget
+  " davurm   : [s]dav://host[:port]/path             Use cadaver
   " rsyncurm : rsync://host[:port]/path              Use rsync
   " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
   " sftpurm  : sftp://[user@]host/filename  Use scp
@@ -1271,16 +1329,16 @@ fun! s:NetMethod(choice)  " globals: met
   let rcphf    = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
   let scpurm   = '^scp://\([^/]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
   let httpurm  = '^http://\([^/]\{-}\)\(/.*\)\=$'
-  let davurm   = '^dav://\([^/]\{-}\)/\(.*\)\=$'
+  let davurm   = '^s\=dav://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
   let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
   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',"")
@@ -1291,7 +1349,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',"")
@@ -1299,28 +1357,32 @@ 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',"")
+   if a:choice =~ '^s'
+    let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
+   else
+    let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
+   endif
+   let b:netrw_fname  = substitute(a:choice,davurm,'\3',"")
  
   " 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',"")
@@ -1348,7 +1410,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',"")
@@ -1357,7 +1419,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',"")
@@ -1366,7 +1428,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',"")
@@ -1380,22 +1442,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
@@ -1409,18 +1471,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
 
@@ -1433,32 +1495,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
@@ -1477,16 +1539,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
@@ -1509,7 +1571,7 @@ fun! s:NetOptionRestore()
   unlet s:twkeep
   unlet s:dirkeep
  
-  call Dret("NetOptionRestore")
+"  call Dret("NetOptionRestore")
 endfun
 
 " ------------------------------------------------------------------------
@@ -1521,17 +1583,17 @@ 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
 
 " ---------------------------------------------------------------------
-" NetSort: Piet Delport's BISort2() function, modified to take a range
+" NetSort: Piet Delport's BISort2() function, modified to take a range {{{1
 fun! <SID>NetSort() range
   let i = a:firstline + 1
   while i <= a:lastline
@@ -1542,11 +1604,22 @@ fun! <SID>NetSort() range
     while lo < hi
       let mid     = (lo + hi) / 2
       let mid_val = getline(mid)
-      if i_val < mid_val
-        let hi = mid
+      if g:netrw_sort_direction =~ '^n'
+       " normal sorting order
+       if i_val < mid_val
+         let hi = mid
+       else
+         let lo = mid + 1
+         if i_val == mid_val | break | endif
+       endif
       else
-        let lo = mid + 1
-        if i_val == mid_val | break | endif
+       " reverse sorting order
+       if i_val > mid_val
+         let hi = mid
+       else
+         let lo = mid + 1
+         if i_val == mid_val | break | endif
+       endif
       endif
     endwhile
     " do insert
@@ -1558,6 +1631,43 @@ fun! <SID>NetSort() range
   endwhile
 endfun
 
+" ---------------------------------------------------------------------
+" SetSort: sets up the sort based on the g:netrw_sort_sequence
+fun! <SID>SetSort()
+"  call Dfunc("SetSort() bannercnt=".g:netrw_bannercnt)
+  let seqlist  = g:netrw_sort_sequence
+  let priority = 1
+  while seqlist != ""
+   if seqlist =~ ','
+    let seq     = substitute(seqlist,',.*$','','e')
+    let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e')
+   else
+    let seq     = seqlist
+    let seqlist = ""
+   endif
+   let eseq= escape(seq,'/')
+   if priority < 10
+    let spriority= "00".priority.'\/'
+   elseif priority < 100
+    let spriority= "0".priority.'\/'
+   else
+    let spriority= priority.'\/'
+   endif
+"   call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
+
+   if seq == '*'
+    exe 'keepjumps silent '.g:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
+   else
+    exe 'keepjumps silent '.g:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
+   endif
+   let priority = priority + 1
+  endwhile
+
+  exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
+
+"  call Dret("SetSort")
+endfun
+
 " ------------------------------------------------------------------------
 " Restore {{{1
 let &cpo= s:save_cpo