updated for version 7.0219
diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim
index 3a184a1..5461351 100644
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,7 +1,7 @@
" netrw.vim: Handles file transfer and remote directory listing across a network
" AUTOLOAD PORTION
-" Date: Jan 30, 2006
-" Version: 78
+" Date: Mar 09, 2006
+" Version: 79
" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
@@ -23,7 +23,7 @@
if &cp || exists("g:loaded_netrw")
finish
endif
-let g:loaded_netrw = "v78"
+let g:loaded_netrw = "v79"
if v:version < 700
echohl WarningMsg | echo "***netrw*** you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw" | echohl None
finish
@@ -76,7 +76,7 @@
let g:netrw_ssh_cmd= "ssh"
endif
-if has("win32") || has("win95") || has("win64") || has("win16")
+if (has("win32") || has("win95") || has("win64") || has("win16"))
\ && exists("g:netrw_use_nt_rcp")
\ && g:netrw_use_nt_rcp
\ && executable( $SystemRoot .'/system32/rcp.exe')
@@ -191,6 +191,9 @@
else
let g:netrw_silentxfer= ""
endif
+if !exists("g:netrw_fastbrowse")
+ let g:netrw_fastbrowse= 1
+endif
if !exists("g:netrw_sort_by")
" alternatives: date size
let g:netrw_sort_by= "name"
@@ -224,6 +227,12 @@
let s:netrw_cd_escape="[]#*$%'\" ?`!&();<>\\"
endif
endif
+if !exists("g:netrw_fname_escape")
+ let g:netrw_fname_escape= ' ?&;'
+endif
+if !exists("g:netrw_tmpfile_escape")
+ let g:netrw_tmpfile_escape= ' ?&;'
+endif
if !exists("s:netrw_glob_escape")
if has("win32") || has("win95") || has("win64") || has("win16")
let s:netrw_glob_escape= ""
@@ -292,49 +301,48 @@
" ------------------------------------------------------------------------
" NetRead: responsible for reading a file over the net {{{2
-fun! netrw#NetRead(...)
-" call Dfunc("NetRead(a:1<".a:1.">)")
-
+fun! netrw#NetRead(mode,...)
+" call Dfunc("NetRead(mode=".a:mode.",...) a:0=".a:0)
+
" save options
call s:NetOptionSave()
-
- " Special Exception: if a file is named "0r", then {{{3
- " "0r" will be used to read the
- " following files instead of "r"
- if a:0 == 0
- let readcmd= "r"
- let ichoice= 0
- elseif a:1 == "0r"
+
+ if a:mode == 0 " read remote file before current line
let readcmd = "0r"
- let ichoice = 2
- else
+ elseif a:mode == 1 " read file after current line
let readcmd = "r"
- let ichoice = 1
+ elseif a:mode == 2 " replace with remote file
+ let readcmd = "%r"
+ else
+ exe a:mode
+ let readcmd = "r"
endif
-
+ let ichoice = (a:0 == 0)? 0 : 1
+" call Decho("readcmd<".readcmd."> ichoice=".ichoice)
+
" get name of a temporary file and set up shell-quoting character {{{3
let tmpfile= tempname()
- let tmpfile= substitute(tmpfile,'\','/','ge')
+ let tmpfile= escape(substitute(tmpfile,'\','/','ge'),g:netrw_tmpfile_escape)
if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
echohl Error | echo "***netrw*** your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!" | echohl None
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
" call Dret("NetRead")
return
endif
-
-" call Decho("ichoice=".ichoice." readcmd<".readcmd.">")
+" call Decho("tmpfile<".tmpfile.">")
+
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 . ">")
let choice = b:netrw_lastfile
let ichoice= ichoice + 1
-
+
else
exe "let choice= a:" . ichoice
" call Decho("no lastfile: choice<" . choice . ">")
-
+
if match(choice,"?") == 0
" give help
echomsg 'NetRead Usage:'
@@ -361,7 +369,7 @@
" case "... ... ..."
let choice = strpart(choice,1,strlen(choice)-1)
let wholechoice = ""
-
+
while match(choice,"\"$") == -1
let wholechoice = wholechoice . " " . choice
let ichoice = ichoice + 1
@@ -382,7 +390,7 @@
" call Decho("choice<" . choice . ">")
let ichoice= ichoice + 1
-
+
" fix up windows urls
if has("win32") || has("win95") || has("win64") || has("win16")
let choice = substitute(choice,'\\','/','ge')
@@ -391,10 +399,10 @@
exe 'lcd ' . fnamemodify(tmpfile,':h')
let tmpfile = fnamemodify(tmpfile,':t')
endif
-
+
" Determine method of read (ftp, rcp, etc) {{{3
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.">")
if choice =~ "^.*[\/]$"
@@ -409,14 +417,14 @@
let tmpfile= substitute(tmpfile,"$",suffix,'e')
" call Decho("chgd tmpfile<".tmpfile."> (added ".suffix." suffix) netrw_fname<".b:netrw_fname.">")
endif
-
+
" ============
" Perform Protocol-Based Read {{{3
" ===========================
if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
echo "(netrw) Processing your read request..."
endif
-
+
".........................................
" rcp: NetRead Method #1 {{{3
if b:netrw_method == 1 " read with rcp
@@ -439,16 +447,16 @@
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)
- exe g:netrw_silentxfer."!".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
-
+
".........................................
" ftp + <.netrc>: NetRead Method #2 {{{3
elseif b:netrw_method == 2 " read with ftp + <.netrc>
" call Decho("read via ftp+.netrc (method #2)")
- let netrw_fname= b:netrw_fname
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
new
setlocal ff=unix
exe "put ='".g:netrw_ftpmode."'"
@@ -473,13 +481,13 @@
bd!
let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
let b:netrw_lastfile = choice
-
+
".........................................
" ftp + machine,id,passwd,filename: NetRead Method #3 {{{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)")
- let netrw_fname= b:netrw_fname
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
new
setlocal ff=unix
if exists("g:netrw_port") && g:netrw_port != ""
@@ -489,7 +497,7 @@
put ='open '.g:netrw_machine
" call Decho("filter input: ".getline("."))
endif
-
+
if exists("g:netrw_ftp") && g:netrw_ftp == 1
put =g:netrw_uid
" call Decho("filter input: ".getline("."))
@@ -499,14 +507,14 @@
put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
" call Decho("filter input: ".getline("."))
endif
-
+
if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
put =g:netrw_ftpmode
" call Decho("filter input: ".getline("."))
endif
put ='get \"'.netrw_fname.'\" '.tmpfile
" call Decho("filter input: ".getline("."))
-
+
" perform ftp:
" -i : turns off interactive prompting from ftp
" -n unix : DON'T use <.netrc>, even though it exists
@@ -525,7 +533,7 @@
bd!
let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
let b:netrw_lastfile = choice
-
+
".........................................
" scp: NetRead Method #4 {{{3
elseif b:netrw_method == 4 " read with scp
@@ -537,15 +545,15 @@
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)
- exe g:netrw_silentxfer."!".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,g:netrw_fname_escape)."' ".cygtmpfile)
+ exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".cygtmpfile
else
-" 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
+" call Decho("executing: !".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".tmpfile)
+ exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".tmpfile
endif
let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
let b:netrw_lastfile = choice
-
+
".........................................
" http: NetRead Method #5 (wget) {{{3
elseif b:netrw_method == 5
@@ -558,17 +566,18 @@
" call Dret("NetRead")
return
endif
-
+
if match(b:netrw_fname,"#") == -1
" simple wget
-" 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 netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+" call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_fname)
+ exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_fname
let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
-
+
else
" 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,"^.*#","","")
+ let netrw_html= substitute(netrw_fname,"#.*$","","")
+ let netrw_tag = substitute(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)
@@ -578,14 +587,14 @@
exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
endif
let b:netrw_lastfile = choice
-
+
".........................................
" cadaver: NetRead Method #6 {{{3
elseif b:netrw_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
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
new
setlocal ff=unix
if exists("g:netrw_port") && g:netrw_port != ""
@@ -594,7 +603,7 @@
put ='open '.g:netrw_machine
endif
put ='user '.g:netrw_uid.' '.g:netrw_passwd
-
+
if g:netrw_cygwin == 1
let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
put ='get '.netrw_fname.' '.cygtmpfile
@@ -602,7 +611,7 @@
put ='get '.netrw_fname.' '.tmpfile
endif
put ='quit'
-
+
" perform cadaver operation:
norm! 1Gdd
" call Decho("executing: %!".g:netrw_dav_cmd)
@@ -610,26 +619,28 @@
bd!
let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
let b:netrw_lastfile = choice
-
+
".........................................
" rsync: NetRead Method #7 {{{3
elseif b:netrw_method == 7
" call Decho("read via rsync (method #7)")
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
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)
- exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
+ exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile
else
-" 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
+" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile)
+ exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile
endif
let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
let b:netrw_lastfile = choice
-
+
".........................................
" fetch: NetRead Method #8 {{{3
" fetch://[user@]host[:http]/path
elseif b:netrw_method == 8
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
if g:netrw_fetch_cmd == ""
if !exists("g:netrw_quiet")
echohl Error | echo "***netrw*** fetch command not available" | echohl None
@@ -643,41 +654,42 @@
let netrw_option= "ftp"
endif
" 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,' ?&'))
- exe g:netrw_silentxfer."!".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."/".netrw_fname)
+ exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".netrw_fname
else
-" 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,' ?&')
+" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".netrw_fname)
+ exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".netrw_fname
endif
-
+
let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
let b:netrw_lastfile = choice
-
+
".........................................
" sftp: NetRead Method #9 {{{3
elseif b:netrw_method == 9
" call Decho("read via sftp (method #4)")
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
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)
- exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+" call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
+" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
+ exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile
else
-" 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
+" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile)
+ exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile
endif
let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
let b:netrw_lastfile = choice
-
+
".........................................
" Complain {{{3
else
echo "***warning*** unable to comply with your request<" . choice . ">"
endif
endwhile
-
+
" cleanup {{{3
" call Decho("cleanup")
if exists("b:netrw_method")
@@ -691,18 +703,21 @@
" ------------------------------------------------------------------------
" NetGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
+" readcmd == %r : replace buffer with newly read file
+" == 0r : read file at top of buffer
+" == r : read file after current line
fun! s:NetGetFile(readcmd, tfile, method)
-" call Dfunc("NetGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
+" call Dfunc("NetGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
" get name of remote filename (ie. url and all)
let rfile= bufname("%")
" call Decho("rfile<".rfile.">")
-
+
if exists("*NetReadFixup")
" for the use of NetReadFixup (not otherwise used internally)
let line2= line("$")
endif
-
+
" transform paths from / to \ for Windows (except for cygwin)
if &term == "win32"
if g:netrw_cygwin
@@ -716,8 +731,8 @@
let tfile= a:tfile
" call Decho("tfile=a:tfile<".tfile.">")
endif
-
- if a:readcmd[0] == '0'
+
+ if a:readcmd[0] == '%'
" get file into buffer
" call Dredir("ls!","starting buffer list")
@@ -749,18 +764,17 @@
let lastline= line("$")
" call Decho("exe<".a:readcmd." ".v:cmdarg." ".tfile."> line#".curline)
exe a:readcmd." ".v:cmdarg." ".tfile
- let line1 = curline + 1
- let line2 = line("$") - lastline + 1
+ let line1= curline + 1
+ let line2= line("$") - lastline + 1
else
" not readable
-" call Dfunc("NetGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
echohl WarningMsg | echo "***netrw*** file <".tfile."> not readable"| echohl None
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
" call Dret("NetGetFile : tfile<".tfile."> not readable")
return
endif
-
+
" User-provided (ie. optional) fix-it-up command
if exists("*NetReadFixup")
" call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
@@ -773,9 +787,9 @@
if has("gui") && has("gui_running")
silent! emenu Buffers.Refresh\ menu
endif
-
+
" call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".filereadable(a:tfile))
-
+
" make sure file is being displayed
redraw!
" call Dret("NetGetFile")
@@ -785,26 +799,26 @@
" NetWrite: responsible for writing a file over the net {{{2
fun! netrw#NetWrite(...) range
" call Dfunc("NetWrite(a:0=".a:0.")")
-
+
" option handling
let mod= 0
call s:NetOptionSave()
-
+
" Get Temporary Filename {{{3
- let tmpfile= tempname()
+ let tmpfile= escape(tempname(),g:netrw_tmpfile_escape)
if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
echohl Error | echo "***netrw*** your ".substitute(tmpfile,'[^/]\+$','','e')." directory is missing!"
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
" call Dret("NetWrite")
return
endif
-
+
if a:0 == 0
let ichoice = 0
else
let ichoice = 1
endif
-
+
if &binary
" for binary writes, write entire file. Line numbers don't really make sense.
" Supports the writing of tar and zip files.
@@ -815,9 +829,9 @@
" call Decho("silent exe ".a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile)
silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
endif
-
+
while ichoice <= a:0
-
+
" Process arguments: {{{3
" attempt to repeat with previous host-file-etc
if exists("b:netrw_lastfile") && a:0 == 0
@@ -826,7 +840,7 @@
let ichoice= ichoice + 1
else
exe "let choice= a:" . ichoice
-
+
" Reconstruct Choice if choice starts with '"'
if match(choice,"?") == 0
echomsg 'NetWrite Usage:"'
@@ -841,7 +855,7 @@
echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
echomsg ':Nwrite sftp://[user@]machine/path uses sftp'
break
-
+
elseif match(choice,"^\"") != -1
if match(choice,"\"$") != -1
" case "..."
@@ -850,7 +864,7 @@
" case "... ... ..."
let choice = strpart(choice,1,strlen(choice)-1)
let wholechoice = ""
-
+
while match(choice,"\"$") == -1
let wholechoice= wholechoice . " " . choice
let ichoice = ichoice + 1
@@ -870,7 +884,7 @@
endif
" call Decho("choice<" . choice . ">")
let ichoice= ichoice + 1
-
+
" fix up windows urls
if has("win32") || has("win95") || has("win64") || has("win16")
let choice= substitute(choice,'\\','/','ge')
@@ -878,17 +892,17 @@
exe 'lcd ' . fnamemodify(tmpfile,':h')
let tmpfile = fnamemodify(tmpfile,':t')
endif
-
+
" Determine method of read (ftp, rcp, etc) {{{3
call s:NetMethod(choice)
-
+
" =============
" Perform Protocol-Based Write {{{3
" ============================
if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
echo "(netrw) Processing your write request..."
endif
-
+
".........................................
" rcp: NetWrite Method #1 {{{3
if b:netrw_method == 1
@@ -906,14 +920,15 @@
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,' ?&'))
- exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&')
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".netrw_fname)
+ exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".netrw_fname
let b:netrw_lastfile = choice
-
+
".........................................
" ftp + <.netrc>: NetWrite Method #2 {{{3
elseif b:netrw_method == 2
- let netrw_fname = b:netrw_fname
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
new
setlocal ff=unix
exe "put ='".g:netrw_ftpmode."'"
@@ -937,11 +952,11 @@
endif
bd!
let b:netrw_lastfile = choice
-
+
".........................................
" ftp + machine, id, passwd, filename: NetWrite Method #3 {{{3
elseif b:netrw_method == 3
- let netrw_fname= b:netrw_fname
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
new
setlocal ff=unix
if exists("g:netrw_port") && g:netrw_port != ""
@@ -964,7 +979,7 @@
" call Decho("filter input: ".getline("."))
" save choice/id/password for future use
let b:netrw_lastfile = choice
-
+
" perform ftp:
" -i : turns off interactive prompting from ftp
" -n unix : DON'T use <.netrc>, even though it exists
@@ -981,10 +996,11 @@
let mod=1
endif
bd!
-
+
".........................................
" scp: NetWrite Method #4 {{{3
elseif b:netrw_method == 4
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
if exists("g:netrw_port") && g:netrw_port != ""
let useport= " -P ".g:netrw_port
else
@@ -992,14 +1008,14 @@
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,' ?&')."'")
- exe g:netrw_silentxfer."!".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.":".netrw_fname."'")
+ exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." '".g:netrw_machine.":".netrw_fname."'"
else
-" 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,' ?&')."'"
+" call Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." '".g:netrw_machine.":".netrw_fname."'")
+ exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." '".g:netrw_machine.":".netrw_fname."'"
endif
let b:netrw_lastfile = choice
-
+
".........................................
" http: NetWrite Method #5 {{{3
elseif b:netrw_method == 5
@@ -1007,14 +1023,14 @@
echohl Error | echo "***netrw*** currently <netrw.vim> does not support writing using http:" | echohl None
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
endif
-
+
".........................................
" dav: NetWrite Method #6 (cadaver) {{{3
elseif b:netrw_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
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
new
setlocal ff=unix
if exists("g:netrw_port") && g:netrw_port != ""
@@ -1023,38 +1039,39 @@
put ='open '.g:netrw_machine
endif
put ='user '.g:netrw_uid.' '.g:netrw_passwd
-
+
if g:netrw_cygwin == 1
let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
put ='put '.cygtmpfile.' '.netrw_fname
else
put ='put '.tmpfile.' '.netrw_fname
endif
-
+
" perform cadaver operation:
norm! 1Gdd
" call Decho("executing: %!".g:netrw_dav_cmd)
exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
bd!
let b:netrw_lastfile = choice
-
+
".........................................
" rsync: NetWrite Method #7 {{{3
elseif b:netrw_method == 7
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
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,' ?&'))
- exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+" call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".netrw_fname)
+ exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".netrw_fname
else
-" 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,' ?&')
+" call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname)
+ exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname
endif
let b:netrw_lastfile = choice
-
+
".........................................
" sftp: NetWrite Method #9 {{{3
elseif b:netrw_method == 9
- let netrw_fname= b:netrw_fname
+ let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
if exists("g:netrw_uid") && ( g:netrw_uid != "" )
let uid_machine = g:netrw_uid .'@'. g:netrw_machine
else
@@ -1068,23 +1085,23 @@
exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
bd!
let b:netrw_lastfile= choice
-
+
".........................................
" Complain {{{3
else
echo "***warning*** unable to comply with your request<" . choice . ">"
endif
endwhile
-
+
" cleanup {{{3
" call Decho("cleanup")
let result=delete(tmpfile)
call s:NetOptionRestore()
-
+
if a:firstline == 1 && a:lastline == line("$")
let &mod= mod " usually equivalent to set nomod
endif
-
+
" call Dret("NetWrite")
endfun
@@ -1135,6 +1152,10 @@
" use buffer-oriented WinVars if buffer ones exist but window ones don't
call s:UseBufWinVars()
+ " set up menus
+ let b:netrw_browser_active= 1
+ call s:NetMenu()
+
" make this buffer modifiable
setlocal ma nonu nowrap
@@ -1216,14 +1237,14 @@
" call Decho("exe file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape))
exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape)
exe "silent doau BufReadPre ".fname
- silent call netrw#NetRead(method."://".user.machine."/".path)
+ silent call netrw#NetRead(2,method."://".user.machine."/".path)
exe "silent doau BufReadPost ".fname
keepjumps 1d
" save certain window-oriented variables into buffer-oriented variables
call s:SetBufWinVars()
call s:NetOptionRestore()
- setlocal nomod
+ setlocal nomod nowrap
" call Dret("NetBrowse : file<".fname.">")
return
@@ -1256,7 +1277,10 @@
" call Decho("exe file ".escape(bufname,s:netrw_cd_escape))
exe 'file '.escape(bufname,s:netrw_cd_escape)
" call Decho("renaming file to bufname<".bufname.">")
- setlocal bh=hide bt=nofile nobl nonu noswf
+ setlocal bt=nofile nobl nonu noswf
+ if g:netrw_fastbrowse >= 1
+ setlocal bh=hide
+ endif
" save current directory on directory history list
call s:NetBookmarkDir(3,expand("%"))
@@ -1276,7 +1300,7 @@
nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(0)<cr>
nnoremap <buffer> <silent> i :call <SID>NetLongList(0)<cr>
nnoremap <buffer> <silent> o :call <SID>NetSplit(0)<cr>
- nnoremap <buffer> <silent> O :call <SID>NetObtain()<cr>
+ nnoremap <buffer> <silent> O :call netrw#NetObtain()<cr>
nnoremap <buffer> <silent> P :call <SID>NetPrevWinOpen(0)<cr>
nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr>
nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
@@ -1475,12 +1499,16 @@
rightb vert new
wincmd |
endif
+ call s:NetMenu()
" call Decho("handling a file: dirname<".dirname.">")
elseif newdir == './'
" refresh the directory list
" call Decho("refresh directory listing")
- setlocal ma nobl bh=hide
+ setlocal ma nobl
+ if g:netrw_fastbrowse >= 1
+ setlocal bh=hide
+ endif
%d
elseif newdir == '../'
@@ -1630,7 +1658,7 @@
elseif ok =~ 'q\%[uit]'
break
endif
-
+
else
" attempt to remove directory
if !all
@@ -1661,7 +1689,7 @@
" 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 && !exists("g:netrw_quiet")
echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
@@ -1795,25 +1823,23 @@
" seems kde systems often have gnome-open due to dependencies, even though
" gnome-open's subsidiary display tools are largely absent. Kde systems
- " usually have "kicker" running, though... (tnx Mikolaj Machowski)
- if !exists("s:haskicker")
+ " usually have "kdeinit" running, though... (tnx Mikolaj Machowski)
+ if !exists("s:haskdeinit")
if has("unix")
- let v:shell_error=0
- silent! let s:haskicker= system('ps -e') =~ 'kicker'
+ silent! let s:haskdeinit= system('ps -e') =~ 'kdeinit'
if v:shell_error
- let s:haskicker = 0
- let v:shell_error = 0
+ let s:haskdeinit = 0
endif
else
- let s:haskicker= 0
+ let s:haskdeinit= 0
endif
-" call Decho("setting s:haskicker=".s:haskicker)
+" call Decho("setting s:haskdeinit=".s:haskdeinit)
endif
if a:remote == 1
" create a local copy
let fname= tempname().".".exten
-" call Decho("create a local copy of <".a:fname."> as <".fname.">")
+" call Decho("a:remote==1: create a local copy of <".a:fname."> as <".fname.">")
exe "silent keepjumps bot 1new ".a:fname
set bh=delete
exe "w! ".fname
@@ -1827,15 +1853,12 @@
else
let redir= &srr . "/dev/null"
endif
-" call Decho("redir:".redir.":")
+" call Decho("redir{".redir."} srr{".&srr."}")
if exists("g:netrw_browsex_viewer") && executable(g:netrw_browsex_viewer)
+" call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
if g:netrw_browsex_viewer == '-'
- call netrwFileHandlers#Init()
- if exten != "" && exists("*netrwFileHandlers#NFH_".exten)
-" call Decho("let ret= netrwFileHandlers#NFH_".exten.'("'.fname.'")')
- exe "let ret= netrwFileHandlers#NFH_".exten.'("'.fname.'")'
- endif
+ let ret= netrwFileHandlers#Invoke(exten,fname)
else
" call Decho("exe silent !".g:netrw_browsex_viewer." '".escape(fname,'%#')."' ".redir)
exe "silent !".g:netrw_browsex_viewer." '".escape(fname,'%#')."'".redir
@@ -1848,23 +1871,26 @@
exe 'silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"'
let ret= v:shell_error
- elseif has("unix") && executable("gnome-open") && !s:haskicker
+ elseif has("unix") && executable("gnome-open") && !s:haskdeinit
" call Decho("exe silent !gnome-open '".escape(fname,'%#')."' ".redir)
exe "silent !gnome-open '".escape(fname,'%#')."'".redir
let ret= v:shell_error
- elseif has("unix") && executable("kfmclient") && s:haskicker
+ elseif has("unix") && executable("kfmclient") && s:haskdeinit
" call Decho("exe silent !kfmclient exec '".escape(fname,'%#')."' ".redir)
exe "silent !kfmclient exec '".escape(fname,'%#')."' ".redir
let ret= v:shell_error
else
- call netrwFileHandlers#Init()
- if exten != "" && exists("*netrwFileHandlers#NFH_".exten)
-" call Decho("let ret= netrwFileHandlers#NFH_".exten.'("'.fname.'")')
- exe "let ret= netrwFileHandlers#NFH_".exten.'("'.fname.'")'
- endif
+ " netrwFileHandlers#Invoke() always returns 0
+ let ret= netrwFileHandlers#Invoke(exten,fname)
endif
+
+ " if unsuccessful, attempt netrwFileHandlers#Invoke()
+ if ret
+ let ret= netrwFileHandlers#Invoke(exten,fname)
+ endif
+
redraw!
" cleanup: remove temporary file,
@@ -1928,19 +1954,19 @@
else
put ='open '.g:netrw_machine
endif
-
+
if exists("g:netrw_ftp") && g:netrw_ftp == 1
put =g:netrw_uid
put ='\"'.g:netrw_passwd.'\"'
else
put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
endif
-
+
if a:path != ""
put ='cd \"'.a:path.'\"'
endif
exe "put ='".a:cmd."'"
-
+
" perform ftp:
" -i : turns off interactive prompting from ftp
" -n unix : DON'T use <.netrc>, even though it exists
@@ -2123,6 +2149,9 @@
" determine qty files per line (fpl)
let w:netrw_fpl= winwidth(0)/b:netrw_cpf
+ if w:netrw_fpl <= 0
+ let w:netrw_fpl= 1
+ endif
" call Decho("fpl= ".winwidth(0)."/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
" make wide display
@@ -2258,7 +2287,7 @@
endif
redraw!
endif
-
+
" call Dret("NetMakeDir")
endfun
@@ -2376,13 +2405,40 @@
" ---------------------------------------------------------------------
" NetObtain: obtain file under cursor (for remote browsing support) {{{2
-fun! s:NetObtain()
- let fname= expand("<cWORD>")
+fun! netrw#NetObtain(...)
+" call Dfunc("NetObtain() a:0=".a:0)
+
+ if a:0==0
+ " no arguments -- use word under cursor
+ let fname= expand("<cWORD>")
+" call Decho("no arguments, use <".fname.">")
+ elseif a:0 > 1
+ " more than one argument, recurse with each argument separately
+" call Decho("more than 1 argument, use recursion")
+ let i=1
+ while i <= a:0
+ call netrw#NetObtain(a:{i})
+ let i=i+1
+ endwhile
+ return
+ else
+ " one argument provided
+ let fname = a:1
+ let keep_netrw_choice = exists("b:netrw_choice")? b:netrw_choice : ""
+ let keep_netrw_fname = exists("b:netrw_fname")? b:netrw_fname : ""
+ let keep_netrw_wmethod = exists("w:netrw_method")? w:netrw_method : ""
+ call s:NetMethod(fname)
+ let w:netrw_method= b:netrw_method
+ let fname = b:netrw_fname
+" call Decho("g:netrw_scp_cmd<".g:netrw_scp_cmd.">")
+" call Decho("g:netrw_machine<".g:netrw_machine.">")
+" call Decho("fname<".fname.">")
+ endif
" NetrwStatusLine support - for obtaining support
call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.fname)
-" call Dfunc("NetObtain() method=".w:netrw_method)
+" call Decho("method=".w:netrw_method)
if exists("w:netrw_method") && w:netrw_method =~ '[235]'
if executable("ftp")
let curdir = expand("%")
@@ -2419,9 +2475,9 @@
" call Decho('ftp: open '.g:netrw_machine.' '.g:netrw_port)
else
put ='open '.g:netrw_machine
-" call Decho('ftp: open '.g:netrw_machine
+" call Decho('ftp: open '.g:netrw_machine)
endif
-
+
if exists("g:netrw_ftp") && g:netrw_ftp == 1
put =g:netrw_uid
put ='\"'.g:netrw_passwd.'\"'
@@ -2431,21 +2487,21 @@
put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
" call Decho('user '.g:netrw_uid.' '.g:netrw_passwd)
endif
-
+
if a:path != ""
put ='cd '.a:path
" call Decho('cd '.a:path)
endif
exe "put ='".a:cmd."'"
" call Decho("ftp: ".a:cmd)
-
+
" perform ftp:
" -i : turns off interactive prompting from ftp
" -n unix : DON'T use <.netrc>, even though it exists
" -n win32: quit being obnoxious about password
" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i -n"
-
+
".........................................
else
echo "***warning*** unable to comply with your request<" . choice . ">"
@@ -2459,8 +2515,14 @@
echohl Error | echo "***netrw*** this system doesn't support ftp" | echohl None
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
endif
+ " restore status line
let &stl = s:netrw_users_stl
let &laststatus = s:netrw_users_ls
+ " restore NetMethod
+ if exists("keep_netrw_method")
+ call s:NetMethod(keep_netrw_choice)
+ let w:netrw_method = keep_netrw_wmethod
+ endif
" call Dret("NetObtain")
return
endif
@@ -2470,6 +2532,7 @@
" scp: Method#4
let curdir = expand("%")
let path = substitute(curdir,'scp://[^/]\+/','','e')
+" call Decho("path<".path.">")
if exists("g:netrw_port") && g:netrw_port != ""
let useport= " -P ".g:netrw_port
else
@@ -2490,6 +2553,12 @@
let &laststatus = s:netrw_users_ls
redraw!
+ " restore NetMethod
+ if exists("keep_netrw_method")
+ call s:NetMethod(keep_netrw_choice)
+ let w:netrw_method = keep_netrw_wmethod
+ endif
+
" call Dret("NetObtain")
endfun
@@ -2569,6 +2638,77 @@
" call Dret("NetPrevWinOpen")
endfun
+" ---------------------------------------------------------------------
+" NetMenu: generates the menu for gvim and netrw {{{2
+fun! s:NetMenu()
+
+ if has("menu") && has("gui_running") && &go =~ 'm'
+" call Dfunc("NetMenu()")
+ if !exists("s:netrw_menu_enabled")
+ let s:netrw_menu_enabled= 1
+ if !exists("g:DrChipTopLvlMenu")
+ let g:DrChipTopLvlMenu= "DrChip."
+ endif
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Help<tab>? ?'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Apply\ Special\ Viewer<tab>x x'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Bookmark\ Current\ Directory<tab>b Nb'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Go\ Up\ Directory<tab>- -'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Goto\ Bookmarked\ Directory<tab>B NB'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Change\ To\ Recently\ Used\ Directory<tab>u u'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Change\ To\ Subsequently\ Used\ Directory<tab>U U'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Delete\ File/Directory<tab>D D'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File\ Hiding\ List<tab>'."<ctrl-h> \<c-h>"
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File/Directory<tab><cr> '."\<cr>"
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File/Directory,\ New\ Window<tab>o o'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File/Directory,\ New\ Vertical\ Window\ <tab>v v'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.List\ Bookmarks\ and\ History<tab>q q'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Listing\ Style\ (thin-long-wide)<tab>i i'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Make\ Subdirectory<tab>d d'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Normal-Hide-Show<tab>a a'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Obtain\ File<tab>O O'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Preview\ File/Directory<tab>p p'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Previous\ Window\ Browser<tab>P P'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Refresh\ Listing<tab>'."<ctrl-l> \<c-l>"
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Rename\ File/Directory<tab>R R'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Reverse\ Sorting\ Order<tab>'."r r"
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Select\ Sorting\ Style<tab>s s'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Sorting\ Sequence\ Edit<tab>S S'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Set\ Current\ Directory<tab>c c'
+ exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Settings/Options<tab>:NetrwSettings '.":NetrwSettings\<cr>"
+ else
+" call Decho("clear menus")
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Help'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Apply\ Special\ Viewer'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Bookmark\ Current\ Directory'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Go\ Up\ Directory'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Goto\ Bookmarked\ Directory'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Change\ To\ Recently\ Used\ Directory'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Change\ To\ Subsequently\ Used\ Directory'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Delete\ File/Directory'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File\ Hiding\ List'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Enter\ File/Directory'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Enter\ File/Directory\ (vertical\ split)'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.List\ Bookmarks\ and\ History'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Listing\ Style\ (thin-long-wide)'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Make\ Subdirectory'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Normal-Hide-Show'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Obtain\ File'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Preview\ File'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Previous\ Window\ Browser'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Refresh\ Listing'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Rename\ File/Directory'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Reverse\ Sorting\ Order'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Select\ Sorting\ Style'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Sorting\ Sequence\ Edit'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Set\ Current\ Directory'
+ exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Settings/Options'
+ endif
+" call Dret("NetMenu")
+ endif
+
+endfun
+
" ==========================================
" Local Directory Browsing Support: {{{1
" ==========================================
@@ -2597,6 +2737,13 @@
" call Dret("DirBrowse")
return
endif
+ if &fo =~ '[ta]'
+ set fo-=t
+ set fo-=a
+ echohl Warning
+ echo '***warning*** directory browsing and formatoptions "ta" are incompatible'
+ echohl None
+ endif
call s:NetOptionSave()
@@ -2613,6 +2760,10 @@
" use buffer-oriented WinVars if buffer ones exist but window ones don't
call s:UseBufWinVars()
+ " set up menus
+ let b:netrw_browser_active= 1
+ call s:NetMenu()
+
" find buffer number of buffer named precisely the same as a:dirname
let bufnum= bufnr(escape(a:dirname,'\'))
" call Decho("findbuf: bufnum=".bufnum)
@@ -2692,7 +2843,10 @@
exe 'silent! file '.escape(b:netrw_curdir,s:netrw_cd_escape)
" make this buffer not-a-file, modifiable, not line-numbered, etc
- setlocal bh=hide bt=nofile nobl ma nonu noswf
+ setlocal bt=nofile nobl ma nonu noswf nowrap
+ if g:netrw_fastbrowse >= 2
+ setlocal bh=hide
+ endif
keepalt silent! %d
" ---------------------------
@@ -2845,7 +2999,10 @@
" save certain window-oriented variables into buffer-oriented variables
call s:SetBufWinVars()
call s:NetOptionRestore()
- setlocal noma nomod nonu bh=hide nobl
+ setlocal noma nomod nonu nobl nowrap
+ if g:netrw_fastbrowse >= 2
+ setlocal bh=hide
+ endif
" call Dret("DirBrowse : file<".expand("%:p")."> bufname<".bufname("%").">")
endfun
@@ -2941,7 +3098,7 @@
keepjumps silent! put=pfile
endif
endwhile
-
+
" cleanup any windows mess at end-of-line
silent! keepjumps %s/\r$//e
setlocal ts=32
@@ -2981,6 +3138,7 @@
wincmd |
endif
exe "e! ".escape(dirname,s:netrw_cd_escape)
+ call s:NetMenu()
set ma nomod
endif
@@ -3058,7 +3216,7 @@
elseif ok =~ 'q\%[uit]'
break
endif
-
+
else
" attempt to remove directory
if !all
@@ -3434,13 +3592,14 @@
" 9: sftp
fun! s:NetMethod(choice) " globals: method machine id passwd fname
" call Dfunc("NetMethod(a:choice<".a:choice.">)")
-
+
" initialization
let b:netrw_method = 0
let g:netrw_machine = ""
let b:netrw_fname = ""
let g:netrw_port = ""
-
+ let g:netrw_choice = a:choice
+
" Patterns:
" mipf : a:machine a:id password filename Use ftp
" mf : a:machine filename Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
@@ -3464,7 +3623,7 @@
let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
let sftpurm = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
-
+
" call Decho("determine method:")
" Determine Method
" rcp://user@hostname/...path-to-file
@@ -3477,7 +3636,7 @@
if userid != ""
let g:netrw_uid= userid
endif
-
+
" scp://user@hostname/...path-to-file
elseif match(a:choice,scpurm) == 0
" call Decho("scp://...")
@@ -3485,14 +3644,14 @@
let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
let g:netrw_port = substitute(a:choice,scpurm,'\2',"")
let b:netrw_fname = substitute(a:choice,scpurm,'\3',"")
-
+
" http://user@hostname/...path-to-file
elseif match(a:choice,httpurm) == 0
" 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://...")
@@ -3503,14 +3662,14 @@
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://...")
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://...")
@@ -3536,7 +3695,7 @@
let b:netrw_method= 3
endif
endif
-
+
elseif match(a:choice,fetchurm) == 0
" call Decho("fetch://...")
let b:netrw_method = 8
@@ -3544,7 +3703,7 @@
let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
let b:netrw_fname = substitute(a:choice,fetchurm,'\5',"")
-
+
" Issue an ftp : "machine id password [path/]filename"
elseif match(a:choice,mipf) == 0
" call Decho("(ftp) host id pass file")
@@ -3553,7 +3712,7 @@
let g:netrw_uid = substitute(a:choice,mipf,'\2',"")
let g:netrw_passwd = substitute(a:choice,mipf,'\3',"")
let b:netrw_fname = substitute(a:choice,mipf,'\4',"")
-
+
" Issue an ftp: "hostname [path/]filename"
elseif match(a:choice,mf) == 0
" call Decho("(ftp) host file")
@@ -3561,20 +3720,20 @@
let b:netrw_method = 3
let g:netrw_machine = substitute(a:choice,mf,'\1',"")
let b:netrw_fname = substitute(a:choice,mf,'\2',"")
-
+
elseif filereadable(expand("$HOME/.netrc"))
let b:netrw_method = 2
let g:netrw_machine = substitute(a:choice,mf,'\1',"")
let b:netrw_fname = substitute(a:choice,mf,'\2',"")
endif
-
+
" sftp://user@hostname/...path-to-file
elseif match(a:choice,sftpurm) == 0
" 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.">")
@@ -3593,7 +3752,7 @@
" don't let PCs try <.netrc>
let b:netrw_method = 3
endif
-
+
else
if !exists("g:netrw_quiet")
echohl Error | echo "***netrw*** cannot determine method" | echohl None
@@ -3606,7 +3765,7 @@
if g:netrw_port != ""
let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
endif
-
+
" call Decho("a:choice <".a:choice.">")
" call Decho("b:netrw_method <".b:netrw_method.">")
" call Decho("g:netrw_machine<".g:netrw_machine.">")
@@ -3618,7 +3777,7 @@
" call Decho("g:netrw_passwd <".g:netrw_passwd.">")
" endif "Decho
" call Decho("b:netrw_fname <".b:netrw_fname.">")
-" call Dret("NetMethod")
+" call Dret("NetMethod : b:netrw_method=".b:netrw_method)
endfun
" ------------------------------------------------------------------------
@@ -3666,14 +3825,18 @@
" Get Temporary Filename
let w:aikeep = &ai
" record autochdir setting and then insure its unset (tnx to David Fishburn)
- if has("netbeans_intg") || has("sun_workshop")
- let w:acdkeep = &autochdir
- set noautochdir
+ if &acd && (has("netbeans_intg") || has("sun_workshop"))
+ set noacd
+ echohl Warning | echomsg "***warning*** directory browsing and the acd setting are incompatible" |echohl None
endif
+ let w:fokeep = &fo
+ let w:aikeep = &ai
+ let w:cikeep = &ci
let w:cinkeep = &cin
let w:cinokeep = &cino
let w:comkeep = &com
let w:cpokeep = &cpo
+ let w:magickeep = &magic
if !g:netrw_keepdir
let w:dirkeep = getcwd()
endif
@@ -3684,7 +3847,7 @@
setlocal cino =
setlocal com =
setlocal cpo -=aA
- setlocal nocin noai nospell
+ setlocal nocin noai noci magic nospell fo=nroql2
setlocal tw =0
setlocal report=10000
if has("win32") && !has("win95")
@@ -3705,18 +3868,18 @@
return
endif
unlet w:netoptionsave
-
+
if exists("w:aikeep")| let &ai= w:aikeep|endif
- if (has("netbeans_intg") || has("sun_workshop")) && exists("w:acdkeep")
- let &acd= w:acdkeep
- unlet w:acdkeep
- endif
+ if exists("w:aikeep") |let &ai = w:aikeep |unlet w:aikeep |endif
+ if exists("w:cikeep") |let &ci = w:cikeep |unlet w:cikeep |endif
if exists("w:cinkeep") |let &cin = w:cinkeep |unlet w:cinkeep |endif
if exists("w:cinokeep") |let &cino = w:cinokeep |unlet w:cinokeep |endif
if exists("w:comkeep") |let &com = w:comkeep |unlet w:comkeep |endif
if exists("w:cpokeep") |let &cpo = w:cpokeep |unlet w:cpokeep |endif
if exists("w:dirkeep") |exe "lcd ".w:dirkeep |unlet w:dirkeep |endif
+ if exists("w:fokeep") |let &fo = w:fokeep |unlet w:fokeep |endif
if exists("w:gdkeep") |let &gd = w:gdkeep |unlet w:gdkeep |endif
+ if exists("w:magic") |let &magic = w:magic |unlet w:magic |endif
if exists("w:repkeep") |let &report = w:repkeep |unlet w:repkeep |endif
if exists("w:spellkeep")|let &spell = w:spellkeep |unlet w:spellkeep|endif
if exists("w:twkeep") |let &tw = w:twkeep |unlet w:twkeep |endif
@@ -3733,7 +3896,7 @@
endif
unlet w:swfkeep
endif
-
+
" call Dret("NetOptionRestore")
endfun
@@ -3760,7 +3923,7 @@
if v:version < 700
fun! s:NetSort() range
" " call Dfunc("NetSort()")
-
+
let i = a:firstline + 1
while i <= a:lastline
" find insertion point via binary search
@@ -3795,7 +3958,7 @@
endif
let i = i + 1
endwhile
-
+
" " call Dret("NetSort")
endfun
endif