From 5b8d8fdb526bd21dbac64a3ea815a1e628b93b41 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 16 Aug 2005 23:01:50 +0000 Subject: updated for version 7.0131 --- runtime/autoload/netrw.vim | 3355 +++++++++++++++++++++++++++++++++ runtime/doc/eval.txt | 16 +- runtime/doc/map.txt | 19 +- runtime/doc/pi_netrw.txt | 379 ++-- runtime/doc/spell.txt | 25 +- runtime/doc/tags | 11 + runtime/doc/todo.txt | 10 +- runtime/doc/version7.txt | 11 +- runtime/filetype.vim | 4 +- runtime/menu.vim | 11 +- runtime/plugin/NetrwFileHandlers.vim | 30 +- runtime/plugin/NetrwPlugin.vim | 156 ++ runtime/plugin/NetrwSettings.vim | 157 ++ runtime/plugin/netrw.vim | 3378 ---------------------------------- runtime/spell/af/main.aap | 4 +- runtime/spell/bg/main.aap | 7 +- runtime/spell/ca/main.aap | 4 +- runtime/spell/cs/main.aap | 6 +- runtime/spell/da/da_DK.diff | 16 + runtime/spell/da/main.aap | 6 +- runtime/spell/de/main.aap | 4 +- runtime/spell/el/main.aap | 78 + runtime/spell/en.ascii.spl | Bin 566601 -> 566603 bytes runtime/spell/en.latin1.spl | Bin 568696 -> 568698 bytes runtime/spell/en.utf-8.spl | Bin 569127 -> 569129 bytes runtime/spell/en/en_AU.diff | 11 +- runtime/spell/en/en_CA.diff | 18 +- runtime/spell/en/en_GB.diff | 4 +- runtime/spell/en/en_NZ.diff | 29 +- runtime/spell/en/en_US.diff | 22 +- runtime/spell/en/main.aap | 6 +- runtime/spell/eo/eo_l3.diff | 0 runtime/spell/eo/main.aap | 80 + runtime/spell/fo/fo_FO.diff | 14 + runtime/spell/fo/main.aap | 78 + runtime/spell/fr/main.aap | 4 +- runtime/spell/gl/gl_ES.diff | 15 + runtime/spell/gl/main.aap | 78 + runtime/spell/he/main.aap | 4 +- runtime/spell/hr/main.aap | 8 +- runtime/spell/hu/hu_HU.diff | 128 ++ runtime/spell/hu/main.aap | 81 + runtime/spell/it/main.aap | 6 +- runtime/spell/main.aap | 18 +- runtime/spell/nl/main.aap | 4 +- runtime/spell/ny/main.aap | 8 +- runtime/spell/pl/main.aap | 6 +- runtime/spell/sk/main.aap | 8 +- runtime/spell/yi/!yi.diff | 11 +- runtime/spell/yi/!yi_tr.diff | 8 + runtime/spell/yi/README.txt | 3 + runtime/spell/yi/main.aap | 44 +- runtime/spell/yi/yi.diff | 13 +- runtime/spell/yi/yi_tr.diff | 18 + runtime/syntax/sh.vim | 30 +- runtime/syntax/tex.vim | 60 +- runtime/syntax/vim.vim | 26 +- 57 files changed, 4780 insertions(+), 3750 deletions(-) create mode 100644 runtime/autoload/netrw.vim create mode 100644 runtime/plugin/NetrwPlugin.vim create mode 100644 runtime/plugin/NetrwSettings.vim delete mode 100644 runtime/plugin/netrw.vim create mode 100644 runtime/spell/da/da_DK.diff create mode 100644 runtime/spell/el/main.aap create mode 100644 runtime/spell/eo/eo_l3.diff create mode 100644 runtime/spell/eo/main.aap create mode 100644 runtime/spell/fo/fo_FO.diff create mode 100644 runtime/spell/fo/main.aap create mode 100644 runtime/spell/gl/gl_ES.diff create mode 100644 runtime/spell/gl/main.aap create mode 100644 runtime/spell/hu/hu_HU.diff create mode 100644 runtime/spell/hu/main.aap create mode 100644 runtime/spell/yi/!yi_tr.diff create mode 100644 runtime/spell/yi/yi_tr.diff (limited to 'runtime') diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim new file mode 100644 index 0000000000..e077e25e74 --- /dev/null +++ b/runtime/autoload/netrw.vim @@ -0,0 +1,3355 @@ +" netrw.vim: Handles file transfer and remote directory listing across a network +" AUTOLOAD PORTION +" Last Change: Aug 16, 2005 +" Maintainer: Charles E Campbell, Jr +" Version: 63 +" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim +" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1 +" Permission is hereby granted to use and distribute this code, +" with or without modifications, provided that this copyright +" notice is copied with it. Like anything else that's free, +" netrw.vim is provided *as is* and comes with no warranty +" of any kind, either expressed or implied. By using this +" plugin, you agree that in no event will the copyright +" holder be liable for any damages resulting from the use +" of this software. +" +" But be doers of the Word, and not only hearers, deluding your own selves {{{1 +" (James 1:22 RSV) +" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +let s:keepcpo= &cpo +set cpo&vim +" call Decho("doing autoload/netrw.vim") + +" --------------------------------------------------------------------- +" Default values for global netrw variables {{{1 +if !exists("g:netrw_ftpmode") + let g:netrw_ftpmode= "binary" +endif +if !exists("g:netrw_win95ftp") + let g:netrw_win95ftp= 1 +endif +if !exists("g:netrw_cygwin") + if has("win32") || has("win95") || has("win64") || has("win16") + if &shell == "bash" + let g:netrw_cygwin= 1 + else + let g:netrw_cygwin= 0 + endif + else + let g:netrw_cygwin= 0 + endif +endif +if !exists("g:netrw_list_cmd") + if executable("ssh") + " provide a default listing command + let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa" + else +" call Decho("ssh is not executable, can't do remote directory exploring with ssh") + let g:netrw_list_cmd= "" + endif +endif +if !exists("g:netrw_ftp_list_cmd") + if has("unix") || exists("g:netrw_cygwin") + let g:netrw_ftp_list_cmd= "ls -lF" + else + let g:netrw_ftp_list_cmd= "dir" + endif +endif +if !exists("g:netrw_rm_cmd") + let g:netrw_rm_cmd = "ssh HOSTNAME rm" +endif +if !exists("g:netrw_rmf_cmd") + let g:netrw_rmf_cmd = "ssh HOSTNAME rm -f" +endif +if !exists("g:netrw_rmdir_cmd") + let g:netrw_rmdir_cmd = "ssh HOSTNAME rmdir" +endif +if !exists("g:netrw_rename_cmd") + let g:netrw_rename_cmd= "ssh HOSTNAME mv" +endif +if exists("g:netrw_silent") && g:netrw_silent != 0 + let g:netrw_silentxfer= "silent " +else + let g:netrw_silentxfer= "" +endif +if !exists("g:netrw_winsize") + let g:netrw_winsize= "" +endif +if !exists("g:netrw_list_hide") + let g:netrw_list_hide= "" +endif +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 +if !exists("g:netrw_longlist") || g:netrw_longlist == 0 + let g:netrw_longlist= 0 + let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa" +else + let g:netrw_longlist= 1 + let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa -l" +endif +if !exists("g:netrw_list_cmd") +endif +if !exists("g:netrw_timefmt") + let g:netrw_timefmt= "%c" +endif +if !exists("g:netrw_local_rmdir") + let g:netrw_local_rmdir= "rmdir" +endif +if !exists("g:netrw_local_mkdir") + let g:netrw_local_mkdir= "mkdir" +endif +if !exists("g:netrw_mkdir_cmd") + let g:netrw_mkdir_cmd= "ssh HOSTNAME mkdir" +endif +if !exists("g:netrw_hide") + let g:netrw_hide= 1 +endif +if !exists("g:netrw_ftp_browse_reject") + let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$' +endif +if !exists("g:netrw_ssh_browse_reject") + let g:netrw_ssh_browse_reject='^total\s\+\d\+$' +endif +if !exists("g:netrw_keepdir") + let g:netrw_keepdir= 1 +endif +if !exists("s:netrw_cd_escape") + if has("win32") || has("win95") || has("win64") || has("win16") + let s:netrw_cd_escape="#% " + else + let s:netrw_cd_escape="[]#*$%'\" ?`!&();<>\\" + endif +endif +if !exists("s:netrw_glob_escape") + if has("win32") || has("win95") || has("win64") || has("win16") + let s:netrw_glob_escape= "" + else + let s:netrw_glob_escape= '[]*?`{~$' + endif +endif +if !exists("g:netrw_alto") + let g:netrw_alto= 0 +endif +if !exists("g:netrw_altv") + let g:netrw_altv= 0 +endif +if !exists("g:netrw_maxfilenamelen") + let g:netrw_maxfilenamelen= 32 +endif +if !exists("g:netrw_dirhistmax") + let g:netrw_dirhistmax= 10 +endif +if !exists("g:NETRW_DIRHIST_CNT") + let g:NETRW_DIRHIST_CNT= 0 +endif + +" BufEnter event ignored by decho when following variable is true +" Has a side effect that doau BufReadPost doesn't work, so +" files read by network transfer aren't appropriately highlighted. +"let g:decho_bufenter = 1 "Decho + +" --------------------------------------------------------------------- +" Default values for global protocol variables {{{1 +if !exists("g:netrw_rcp_cmd") + let g:netrw_rcp_cmd = "rcp" +endif +if !exists("g:netrw_ftp_cmd") + let g:netrw_ftp_cmd = "ftp" +endif +if !exists("g:netrw_scp_cmd") + let g:netrw_scp_cmd = "scp -q" +endif +if !exists("g:netrw_sftp_cmd") + let g:netrw_sftp_cmd = "sftp" +endif +if !exists("g:netrw_http_cmd") + if executable("wget") + let g:netrw_http_cmd = "wget -q -O" + elseif executable("fetch") + let g:netrw_http_cmd = "fetch -o" + else + let g:netrw_http_cmd = "" + endif +endif +if !exists("g:netrw_dav_cmd") + let g:netrw_dav_cmd = "cadaver" +endif +if !exists("g:netrw_rsync_cmd") + let g:netrw_rsync_cmd = "rsync" +endif +if !exists("g:netrw_fetch_cmd") + if executable("fetch") + let g:netrw_fetch_cmd = "fetch -o" + else + let g:netrw_fetch_cmd = "" + endif +endif + +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') + let s:netrw_has_nt_rcp = 1 + let s:netrw_rcpmode = '-b' + else + let s:netrw_has_nt_rcp = 0 + let s:netrw_rcpmode = '' +endif + +" ------------------------------------------------------------------------ +" NetSavePosn: saves position of cursor on screen {{{1 +fun! netrw#NetSavePosn() +" call Dfunc("NetSavePosn()") + " Save current line and column + let w:netrw_winnr= winnr() + let w:netrw_line = line(".") + let w:netrw_col = virtcol(".") + + " Save top-of-screen line + norm! H0 + let w:netrw_hline= line(".") + + call netrw#NetRestorePosn() +" call Dret("NetSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline) +endfun + +" ------------------------------------------------------------------------ +" NetRestorePosn: restores the cursor and file position as saved by NetSavePosn() {{{1 +fun! netrw#NetRestorePosn() +" call Dfunc("NetRestorePosn() winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline) + let eikeep= &ei + set ei=all + + " restore window +" call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w") + exe "silent! ".w:netrw_winnr."wincmd w" +" if v:shell_error == 0 +" " as suggested by Bram M: redraw on no error +" " allows protocol error messages to remain visible +" redraw! +" endif + + " restore top-of-screen line +" call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z") + exe "norm! ".w:netrw_hline."G0z\" + + " restore position +" call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|") + exe "norm! ".w:netrw_line."G0".w:netrw_col."\" + + let &ei= eikeep +" call Dret("NetRestorePosn") +endfun + +" ------------------------------------------------------------------------ +" NetRead: responsible for reading a file over the net {{{1 +fun! netrw#NetRead(...) +" call Dfunc("NetRead(a:1<".a:1.">)") + + " save options + call s:NetOptionSave() + + " Special Exception: if a file is named "0r", then + " "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" + let readcmd = "0r" + let ichoice = 2 + else + let readcmd = "r" + let ichoice = 1 + endif + + " get name of a temporary file and set up shell-quoting character + let tmpfile= tempname() + if !isdirectory(substitute(tmpfile,'[^/]\+$','','e')) + echohl Error | echo "***netrw*** your ".substitute(tmpfile,'[^/]\+$','','e')." directory is missing!" + call inputsave()|call input("Press to continue")|call inputrestore() +" call Dret("NetRead") + return + endif + +" 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 . ">") + 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:' + echomsg ':Nread machine:path uses rcp' + echomsg ':Nread "machine path" uses ftp with <.netrc>' + echomsg ':Nread "machine id password path" uses ftp' + echomsg ':Nread dav://machine[:port]/path uses cadaver' + echomsg ':Nread fetch://machine/path uses fetch' + echomsg ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>' + echomsg ':Nread http://[user@]machine/path uses http wget' + echomsg ':Nread rcp://[user@]machine/path uses rcp' + echomsg ':Nread rsync://machine[:port]/path uses rsync' + echomsg ':Nread scp://[user@]machine[[:#]port]/path uses scp' + echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp' + break + + elseif match(choice,"^\"") != -1 + " Reconstruct Choice if choice starts with '"' +" call Decho("reconstructing choice") + if match(choice,"\"$") != -1 + " case "..." + let choice=strpart(choice,1,strlen(choice)-2) + else + " case "... ... ..." + let choice = strpart(choice,1,strlen(choice)-1) + let wholechoice = "" + + while match(choice,"\"$") == -1 + let wholechoice = wholechoice . " " . choice + let ichoice = ichoice + 1 + if ichoice > a:0 + if !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** Unbalanced string in filename '". wholechoice ."'" | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif +" call Dret("NetRead") + return + endif + let choice= a:{ichoice} + endwhile + let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1) + endif + endif + 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') +" call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile) + + exe 'lcd ' . fnamemodify(tmpfile,':h') + let tmpfile = fnamemodify(tmpfile,':t') + endif + + " Determine method of read (ftp, rcp, etc) + 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 =~ "^.*[\/]$" + keepjumps call s:NetBrowse(choice) +" call Dret("NetRead") + return + endif + + " ============ + " Perform Read + " ============ + + "......................................... + " rcp: NetRead Method #1 + if b:netrw_method == 1 " read with rcp +" 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) + " ER: the tmpfile is full path: rcp sees C:\... as host C + if s:netrw_has_nt_rcp == 1 + if exists("g:netrw_uid") && ( g:netrw_uid != "" ) + let uid_machine = g:netrw_machine .'.'. g:netrw_uid + else + " Any way needed it machine contains a '.' + let uid_machine = g:netrw_machine .'.'. $USERNAME + endif + else + if exists("g:netrw_uid") && ( g:netrw_uid != "" ) + let uid_machine = g:netrw_uid .'@'. g:netrw_machine + else + 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 + let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + + "......................................... + " ftp + <.netrc>: NetRead Method #2 + elseif b:netrw_method == 2 " read with ftp + <.netrc> +" call Decho("read via ftp+.netrc (method #2)") + let netrw_fname= b:netrw_fname + new + setlocal 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) + 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) + 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) + if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' + let debugkeep= &debug + set debug=msg + echohl Error | echo "***netrw*** ".getline(1) | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + let &debug= debugkeep + endif + bd! + let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + + "......................................... + " 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)") + let netrw_fname= b:netrw_fname + new + setlocal ff=unix + if exists("g:netrw_port") && g:netrw_port != "" + put ='open '.g:netrw_machine.' '.g:netrw_port + 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 exists("g:netrw_ftpmode") && g:netrw_ftpmode != "" + put =g:netrw_ftpmode + endif + put ='get '.netrw_fname.' '.tmpfile + + " 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('performing ftp -i -n') + norm! 1Gdd +" 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) !~ "^$" +" call Decho("error<".getline(1).">") + if !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** ".getline(1) | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif + endif + bd! + let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + + "......................................... + " scp: NetRead Method #4 + elseif b:netrw_method == 4 " read with scp +" call Decho("read via scp (method #4)") + if exists("g:netrw_port") && g:netrw_port != "" + let useport= " -P ".g:netrw_port + else + let useport= "" + endif + if g:netrw_cygwin == 1 + let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e') +" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(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) + 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) + let b:netrw_lastfile = choice + + "......................................... + elseif b:netrw_method == 5 " read with http (wget) +" call Decho("read via http (method #5)") + if g:netrw_http_cmd == "" + if !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** neither wget nor fetch command is available" | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif + exit + 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 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,"^.*#","","") +" 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.'"/') + exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\" + endif + let b:netrw_lastfile = choice + + "......................................... + " cadaver: NetRead Method #6 + elseif b:netrw_method == 6 " read with cadaver +" call Decho("read via cadaver (method #6)") + + " Construct execution string (four lines) which will be passed through filter + let netrw_fname= b:netrw_fname + new + setlocal ff=unix + if exists("g:netrw_port") && g:netrw_port != "" + put ='open '.g:netrw_machine.' '.g:netrw_port + else + 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 + else + put ='get '.netrw_fname.' '.tmpfile + endif + put ='quit' + + " perform cadaver operation: + norm! 1Gdd +" 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 b:netrw_lastfile = choice + + "......................................... + " rsync: NetRead Method #7 + elseif b:netrw_method == 7 " read with rsync +" 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) + 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) + 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) + let b:netrw_lastfile = choice + + "......................................... + " fetch: NetRead Method #8 + " fetch://[user@]host[:http]/path + elseif b:netrw_method == 8 " read with fetch + if g:netrw_fetch_cmd == "" + if !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** fetch command not available" | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif + exit + endif + if exists("g:netrw_option") && g:netrw_option == ":http" + let netrw_option= "http" + else + 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,' ?&') + 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,' ?&') + endif + + let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + + "......................................... + " sftp: NetRead Method #9 + elseif b:netrw_method == 9 " read with sftp +" 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) + 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) + 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) + let b:netrw_lastfile = choice + + "......................................... + else " Complain + echo "***warning*** unable to comply with your request<" . choice . ">" + endif + endwhile + + " cleanup +" call Decho("cleanup") + if exists("b:netrw_method") + unlet b:netrw_method + unlet b:netrw_fname + endif + call s:NetOptionRestore() + +" call Dret("NetRead") +endfun + +" ------------------------------------------------------------------------ +" 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.">)") + + 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 + let fname= a:fname +" call Decho("(win32 && cygwin) fname<".fname.">") + else + let fname= substitute(a:fname,'/','\\\\','ge') +" call Decho("(win32 && !cygwin) fname<".fname.">") + endif + else + let fname= a:fname +" call Decho("(copied) fname<".fname.">") + endif + + if a:readcmd[0] == '0' + " get file into buffer + + " record remote filename + let rfile= bufname(".") +" call Decho("remotefile<".rfile.">") +" call Dredir("ls!","starting buffer list") + + " rename the current buffer to the temp file (ie. fname) + if v:version < 700 + exe "file ".fname + else + keepalt exe "file ".fname + endif +" call Dredir("ls!","after renaming current buffer to <".fname.">") + + " edit temporary file + e +" call Dredir("ls!","after editing temporary file") + + " rename buffer back to remote filename + if v:version < 700 + exe "file ".rfile + else + keepalt exe "file ".rfile + endif +" call Dredir("ls!","renaming buffer back to remote filename<".rfile.">") + let line1 = 1 + let line2 = line("$") + + elseif filereadable(fname) + " read file after current line + let curline = line(".") + let lastline= line("$") +" call Decho("exe<".a:readcmd." ".v:cmdarg." ".fname."> line#".curline) + exe a:readcmd." ".v:cmdarg." ".fname + let line1 = curline + 1 + let line2 = line("$") - lastline + 1 + let s:netrw_line = s:netrw_line + 1 + let s:netrw_col = 1 + else + " not readable +" call Dret("NetGetFile : fname<".fname."> 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.")") + call NetReadFixup(a:method, line1, line2) +" else " Decho +" call Decho("NetReadFixup() not called, doesn't exist") + endif + + " update the Buffers menu + if has("gui") && has("gui_running") + silent! emenu Buffers.Refresh\ menu + endif + +" 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") +endfun + +" ------------------------------------------------------------------------ +" NetWrite: responsible for writing a file over the net {{{1 +fun! netrw#NetWrite(...) range +" call Dfunc("NetWrite(a:0=".a:0.")") + + " option handling + let mod= 0 + call s:NetOptionSave() + + " Get Temporary Filename + let tmpfile= tempname() + if !isdirectory(substitute(tmpfile,'[^/]\+$','','e')) + echohl Error | echo "***netrw*** your ".substitute(tmpfile,'[^/]\+$','','e')." directory is missing!" + call inputsave()|call input("Press to continue")|call inputrestore() +" call Dret("NetRead") + return + endif + + if a:0 == 0 + let ichoice = 0 + else + let ichoice = 1 + endif + + " write (selected portion of) file to temporary + silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".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 + + " Reconstruct Choice if choice starts with '"' + if match(choice,"?") == 0 + echomsg 'NetWrite Usage:"' + echomsg ':Nwrite machine:path uses rcp' + echomsg ':Nwrite "machine path" uses ftp with <.netrc>' + echomsg ':Nwrite "machine id password path" uses ftp' + echomsg ':Nwrite dav://[user@]machine/path uses cadaver' + echomsg ':Nwrite fetch://[user@]machine/path uses fetch' + echomsg ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)' + echomsg ':Nwrite rcp://machine/path uses rcp' + echomsg ':Nwrite rsync://[user@]machine/path uses rsync' + 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 "..." + let choice=strpart(choice,1,strlen(choice)-2) + else + " case "... ... ..." + let choice = strpart(choice,1,strlen(choice)-1) + let wholechoice = "" + + while match(choice,"\"$") == -1 + let wholechoice= wholechoice . " " . choice + let ichoice = ichoice + 1 + if choice > a:0 + if !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** Unbalanced string in filename '". wholechoice ."'" | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif +" call Dret("NetWrite") + return + endif + let choice= a:{ichoice} + endwhile + let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1) + endif + endif + 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') + "ER: see NetRead() + exe 'lcd ' . fnamemodify(tmpfile,':h') + let tmpfile = fnamemodify(tmpfile,':t') + endif + + " Determine method of read (ftp, rcp, etc) + call s:NetMethod(choice) + + " ============= + " Perform Write + " ============= + + "......................................... + " rcp: NetWrite Method #1 + if b:netrw_method == 1 " write with rcp +" 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 + else + let uid_machine = g:netrw_machine .'.'. $USERNAME + endif + else + if exists("g:netrw_uid") && ( g:netrw_uid != "" ) + let uid_machine = g:netrw_uid .'@'. g:netrw_machine + else + 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 b:netrw_lastfile = choice + + "......................................... + " ftp + <.netrc>: NetWrite Method #2 + elseif b:netrw_method == 2 " write with ftp + <.netrc> + let netrw_fname = b:netrw_fname + new + setlocal ff=unix + exe "put ='".g:netrw_ftpmode."'" +" call Decho(" NetWrite: put ='".g:netrw_ftpmode."'") + exe "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) + 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) + 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) + if getline(1) !~ "^$" + if !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** ".getline(1) | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif + let mod=1 + endif + bd! + let b:netrw_lastfile = choice + + "......................................... + " ftp + machine, id, passwd, filename: NetWrite Method #3 + elseif b:netrw_method == 3 " write with ftp + machine, id, passwd, and fname + let netrw_fname= b:netrw_fname + new + setlocal ff=unix + if exists("g:netrw_port") && g:netrw_port != "" + put ='open '.g:netrw_machine.' '.g:netrw_port + 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 + put ='put '.tmpfile.' '.netrw_fname + " 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 + " -n win32: quit being obnoxious about password +" call Decho('performing ftp -i -n') + norm! 1Gdd +" 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) !~ "^$" + if !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** ".getline(1) | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif + let mod=1 + endif + bd! + + "......................................... + " scp: NetWrite Method #4 + elseif b:netrw_method == 4 " write with scp + if exists("g:netrw_port") && g:netrw_port != "" + let useport= " -P ".g:netrw_port + else + let useport= "" + endif + if g:netrw_cygwin == 1 + let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e') +" call Decho("executing: !".g:netrw_scp_cmd.useport." ".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,' ?&')) + exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&') + endif + let b:netrw_lastfile = choice + + "......................................... + " http: NetWrite Method #5 + elseif b:netrw_method == 5 + if !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** currently does not support writing using http:" | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif + + "......................................... + " dav: NetWrite Method #6 + elseif b:netrw_method == 6 " write with cadaver +" call Decho("write via cadaver (method #6)") + + " Construct execution string (four lines) which will be passed through filter + let netrw_fname= b:netrw_fname + new + setlocal ff=unix + if exists("g:netrw_port") && g:netrw_port != "" + put ='open '.g:netrw_machine.' '.g:netrw_port + else + 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 + 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,' ?&')) + 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,' ?&')) + exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&') + endif + let b:netrw_lastfile = choice + + "......................................... + " scp: NetWrite Method #9 + elseif b:netrw_method == 9 " write with sftp + let netrw_fname= b:netrw_fname + if exists("g:netrw_uid") && ( g:netrw_uid != "" ) + let uid_machine = g:netrw_uid .'@'. g:netrw_machine + else + let uid_machine = g:netrw_machine + endif + new + setlocal ff=unix + put ='put '.tmpfile.' '.netrw_fname + norm! 1Gdd +" 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 + + "......................................... + else " Complain + echo "***warning*** unable to comply with your request<" . choice . ">" + endif + endwhile + + " cleanup +" 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 + +" =========================================== +" Remote Directory Browsing Support: {{{1 +" =========================================== + +" NetBrowse: This function uses the command in g:netrw_list_cmd to get a list {{{2 +" of the contents of a remote directory. It is assumed that the +" g:netrw_list_cmd has a string, HOSTNAME, that needs to be substituted +" with the requested remote hostname first. +fun! s:NetBrowse(dirname) +" call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".g:netrw_longlist) + + if exists("s:netrw_skipbrowse") + unlet s:netrw_skipbrowse +" call Dret("NetBrowse") + return + endif + + " sanity check + if exists("b:netrw_method") && b:netrw_method =~ '[235]' +" call Decho("b:netrw_method=".b:netrw_method) + if !executable("ftp") + if !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** this system doesn't support remote directory listing via ftp" | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif +" call Dret("NetBrowse") + return + endif + elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == '' + if !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** this system doesn't support remote directory listing via ssh" | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif + +" call Dret("NetBrowse") + return + endif + + " use buffer-oriented WinVars if buffer ones exist but window ones don't + call s:UseBufWinVars() + + " make this buffer modifiable + setlocal ma nonu nowrap + + " analyze a:dirname and g:netrw_list_cmd + let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$' + let dirname = substitute(a:dirname,'\\','/','ge') +" call Decho("dirpat<".dirpat.">") + if dirname !~ dirpat + if !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** netrw doesn't understand your dirname<".dirname.">" | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif +" call Dret("NetBrowse : badly formatted dirname<".dirname.">") + return + endif + + let method = substitute(dirname,dirpat,'\1','') + let user = substitute(dirname,dirpat,'\2','') + let machine = substitute(dirname,dirpat,'\3','') + let path = substitute(dirname,dirpat,'\4','') + let fname = substitute(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 .">") + + if method == "ftp" || method == "http" + let method = "ftp" + let listcmd = g:netrw_ftp_list_cmd + else + let listcmd = substitute(g:netrw_list_cmd,'\',user.machine,'') + endif + + if exists("b:netrw_method") +" call Decho("setting w:netrw_method<".b:netrw_method.">") + let w:netrw_method= b:netrw_method + endif + + " optionally sort by time (-t) or by size (-S) + if listcmd == "dir" && g:netrw_sort_by =~ "^[ts]" + echohl WarningMsg | echo "***netrw*** windows' ftp doesn't support time/size sorts (get cygwin, set g:netrw_cygwin)" | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + else + 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" && listcmd == "dir" + let listcmd= listcmd."r" + endif + endif + +" call Decho("set up listcmd<".listcmd.">") + if fname =~ '@$' && fname !~ '^"' +" call Decho("attempt transfer of symlink as file") + call s:NetBrowse(substitute(dirname,'@$','','e')) + redraw! +" call Dret("NetBrowse : symlink") + return + + elseif fname !~ '[\/]$' && fname !~ '^"' + " looks like a regular file, attempt transfer +" call Decho("attempt transfer as regular file<".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.">") + + " remote-read the requested file into current buffer + enew! +" 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) + exe "silent doau BufReadPost ".fname + keepjumps 1d + + " save certain window-oriented variables into buffer-oriented variables + call s:BufWinVars() + + setlocal nonu nomod noma + +" call Dret("NetBrowse : file<".fname.">") + return + endif + + " --------------------------------------------------------------------- + " 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) + if bufnamenr != -1 + " buffer already exists, switch to it! +" call Decho("buffer already exists, switching to it") + exe "b ".bufnamenr + if line("$") >= 5 +" call Dret("NetBrowse") + return + endif + else +" call Decho("generate a new buffer") + enew! + endif + + " rename file to reflect where its from + setlocal bt=nofile bh=wipe nobl noswf + exe "setlocal ts=".g:netrw_maxfilenamelen +" 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 nobl nonu + + " save current directory on directory history list + call NetBookmarkDir(3,expand("%")) + + " set up buffer-local mappings +" call Decho("set up buffer-local mappings") + nnoremap :exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),NetGetWord())) + nnoremap :call NetRefresh(NetBrowseChgDir(expand("%"),'./')) + nnoremap - :exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),'../')) + nnoremap a :let g:netrw_hide=(g:netrw_hide+1)%3exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),'./')) + nnoremap b :call NetBookmarkDir(0,expand("%")) + nnoremap B :call NetBookmarkDir(1,expand("%")) + nnoremap :call NetHideEdit(0) + nnoremap i :call NetLongList(0) + nnoremap o :call NetSplit(0) + nnoremap q :call NetBookmarkDir(2,expand("%")) + nnoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),'./')) + nnoremap s :call NetSaveWordPosn()let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),'./'))call NetRestoreWordPosn() + nnoremap S :call NetSortSequence(0) + nnoremap u :call NetBookmarkDir(4,expand("%")) + nnoremap U :call NetBookmarkDir(5,expand("%")) + nnoremap v :call NetSplit(1) + nnoremap x :exe "norm! 0"call NetBrowseX(NetBrowseChgDir(expand("%"),NetGetWord()),1) + nnoremap <2-leftmouse> :exe "norm! 0"call NetBrowse(NetBrowseChgDir(expand("%"),NetGetWord())) + exe 'nnoremap :exe "norm! 0"call NetBrowseRm("'.user.machine.'","'.path.'")' + exe 'vnoremap :call NetBrowseRm("'.user.machine.'","'.path.'")' + exe 'nnoremap d :call NetMakeDir("'.user.machine.'")' + exe 'nnoremap D :exe "norm! 0"call NetBrowseRm("'.user.machine.'","'.path.'")' + exe 'vnoremap D :call NetBrowseRm("'.user.machine.'","'.path.'")' + exe 'nnoremap R :exe "norm! 0"call NetBrowseRename("'.user.machine.'","'.path.'")' + exe 'vnoremap R :call NetBrowseRename("'.user.machine.'","'.path.'")' + nnoremap ? :he netrw-browse-cmds + setlocal ma nonu nowrap + + " Set up the banner +" call Decho("set up the banner: sortby<".g:netrw_sort_by."> method<".method.">") + keepjumps put ='\" ===========================================================================' + keepjumps put ='\" Netrw Remote Directory Listing' + keepjumps put ='\" '.bufname + let w:netrw_bannercnt = 7 + let sortby = g:netrw_sort_by + if g:netrw_sort_direction =~ "^r" + let sortby = sortby." reversed" + endif + + if g:netrw_sort_by =~ "^n" + " sorted by name + let w:netrw_bannercnt= w:netrw_bannercnt + 1 + keepjumps put ='\" Sorted by '.sortby + keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence + else + " sorted by size or date + keepjumps put ='\" Sorted by '.sortby + endif + if g:netrw_list_hide != "" && g:netrw_hide + if g:netrw_hide == 1 + keepjumps put ='\" Hiding: '.g:netrw_list_hide + else + keepjumps put ='\" Showing: '.g:netrw_list_hide + endif + let w:netrw_bannercnt= w:netrw_bannercnt + 1 + endif + keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec' + keepjumps put ='\" ===========================================================================' + + " remote read the requested directory listing + " Use ftp if that was the file-transfer method selected, otherwise use ssh + " Note that not all ftp servers honor the options for ls + if method == "ftp" + " use ftp to get remote file listing +" call Decho("use ftp to get remote file listing") + call s:NetBrowseFtpCmd(path,listcmd) + keepjumps 1d + + if !g:netrw_longlist + " shorten the listing +" call Decho("generate short listing") + exe "keepjumps ".w:netrw_bannercnt + + " cleanup + if g:netrw_ftp_browse_reject != "" + exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d" + endif + + " if there's no ../ listed, then put ./ and ../ in + let line1= line(".") + keepjumps 1 + silent keepjumps call search('^\.\.\/\%(\s\|$\)','W') + let line2= line(".") + if line2 == 0 + keepjumps put='../' + keepjumps put='./' + endif + exe "keepjumps ".line1 + keepjumps norm! 0 + + " more cleanup + exe 'keepjumps silent! '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e' + exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e' + exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e' + endif + + else + " use ssh to get remote file listing +" call Decho("use ssh to get remote file listing") + let shq= &shq? &shq : ( &sxq? &sxq : "'") +" call Decho("exe silent r! ".listcmd." '".shq.escape(path,s:netrw_cd_escape).shq."'") + exe "silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq + keepjumps 1d + " cleanup + if g:netrw_ftp_browse_reject != "" + exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d" + endif + endif + + + " set up syntax highlighting + if has("syntax") + setlocal ft=netrwlist + if !exists("g:syntax_on") || !g:syntax_on + setlocal ft= + " Ugly workaround -- when syntax highlighting is off and laststatus==2, + " sometimes the laststatus highlight bleeds into the entire display. + " Only seems to happen with remote browsing. Weird. + redraw + endif + endif + + " manipulate the directory listing (hide, sort) + if line("$") >= w:netrw_bannercnt + if g:netrw_hide && g:netrw_list_hide != "" + call s:NetrwListHide() + endif + + if g:netrw_longlist + " do a long listing; these substitutions need to be done prior to sorting +" call Decho("manipulate long listing") + + if method == "ftp" + " cleanup + exe "keepjumps ".w:netrw_bannercnt + while getline(".") =~ g:netrw_ftp_browse_reject + keepjumps d + endwhile + " if there's no ../ listed, then put ./ and ../ in + let line1= line(".") + keepjumps 1 + silent keepjumps call search('^\.\.\/\%(\s\|$\)','W') + let line2= line(".") + if line2 == 0 + exe 'keepjumps '.w:netrw_bannercnt."put='./'" + exe 'keepjumps '.w:netrw_bannercnt."put='../'" + endif + exe "keepjumps ".line1 + keepjumps norm! 0 + endif + + exe 'keepjumps silent '.w:netrw_bannercnt.',$s/ -> .*$//e' + exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e' + exe w:netrw_bannercnt + endif + + if line("$") >= w:netrw_bannercnt + if g:netrw_sort_by =~ "^n" + call s:SetSort() + if v:version < 700 + exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()' + elseif g:netrw_sort_direction =~ 'n' + exe 'keepjumps silent '.w:netrw_bannercnt.',$sort' + else + exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!' + endif + exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e' + endif + if g:netrw_longlist + " shorten the list to keep its width <= 80 characters + exe "keepjumps silent ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e' + endif + endif + endif + exe "keepjumps ".w:netrw_bannercnt + + setlocal nomod noma nonu + +" call Dret("NetBrowse") + return +endfun + +" --------------------------------------------------------------------- +" NetBrowseChgDir: {{{2 +fun! s:NetBrowseChgDir(dirname,newdir) +" call Dfunc("NetBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">)") + + let dirname= a:dirname + let newdir = a:newdir + + if newdir !~ '[\/]$' + " handling a file + let dirname= dirname.newdir +" call Decho("handling a file: dirname<".dirname.">") + + elseif newdir == './' + " refresh the directory list +" call Decho("refresh directory listing") + setlocal ma nobl bh=hide + %d + + elseif newdir == '../' + " go up one directory + let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','') + + if trailer =~ '^\%(\.\./\)*$' + " tack on a ../" + let dirname= dirname.'../' + + else + " strip off a directory name from dirname + let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','') + endif +" 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.">") + endif + +" call Dret("NetBrowseChgDir <".dirname.">") + return dirname +endfun + +" --------------------------------------------------------------------- +" NetGetWord: it gets the directory named under the cursor +fun! s:NetGetWord() +" call Dfunc("NetGetWord() line#".line(".")) + call s:UseBufWinVars() + + if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt + let dirname= "./" + let curline= getline(".") + if curline =~ '"\s*Sorted by\s' + norm s + let s:netrw_skipbrowse= 1 + echo 'Pressing "s" also works' + elseif curline =~ '"\s*Sort sequence:' + let s:netrw_skipbrowse= 1 + echo 'Press "S" to edit sorting sequence' + elseif curline =~ '"\s*Quick Help:' + norm ? + let s:netrw_skipbrowse= 1 + echo 'Pressing "?" also works' + elseif curline =~ '"\s*\%(Hiding\|Showing\):' + norm a + let s:netrw_skipbrowse= 1 + echo 'Pressing "a" also works' + elseif line("$") > w:netrw_bannercnt + exe w:netrw_bannercnt + endif + else + let dirname= getline(".") + if dirname =~ '\t' + let dirname= substitute(dirname,'\t.*$','','e') + endif + endif +" call Dret("NetGetWord <".dirname.">") + return dirname +endfun + +" --------------------------------------------------------------------- +" NetBrowseRm: remove/delete a remote file or directory {{{2 +fun! s:NetBrowseRm(usrhost,path) range +" call Dfunc("NetBrowseRm(usrhost<".a:usrhost."> path<".a:path.">)") +" call Decho("firstline=".a:firstline." lastline=".a:lastline) + + " preparation for removing multiple files/directories + let ctr= a:firstline + let all= 0 + + " remove multiple files and directories + while ctr <= a:lastline + exe ctr + + norm! 0 + let rmfile= s:NetGetWord() +" call Decho("rmfile<".rmfile.">") + + if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$') + " attempt to remove file + if !all + echohl Statement + call inputsave() + let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") + call inputrestore() + echohl NONE + let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') + if ok =~ 'a\%[ll]' + let all= 1 + endif + endif + + if all || ok =~ 'y\%[es]' || ok == "" + if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) + silent! keepjumps .,$d + call s:NetBrowseFtpCmd(a:path,"delete ".rmfile) + else + let netrw_rm_cmd= substitute(g:netrw_rm_cmd,'HOSTNAME',a:usrhost,'').' "'.escape(a:path.rmfile,s:netrw_cd_escape).'"' +" call Decho("attempt to remove file: system(".netrw_rm_cmd.")") + let ret= system(netrw_rm_cmd) +" call Decho("returned=".ret." errcode=".v:shell_error) + endif + elseif ok =~ 'q\%[uit]' + break + endif + + else + " attempt to remove directory + if !all + call inputsave() + let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") + call inputrestore() + let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') + if ok =~ 'a\%[ll]' + let all= 1 + endif + endif + + if all || ok =~ 'y\%[es]' || ok == "" + if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) + call s:NetBrowseFtpCmd(a:path,"rmdir ".rmfile) + else + let rmfile = a:path.rmfile + let netrw_rmdir_cmd= substitute(g:netrw_rmdir_cmd,'HOSTNAME',a:usrhost,'').' '."'".'"'.rmfile.'"'."'" +" call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")") + let ret= system(netrw_rmdir_cmd) +" call Decho("returned=".ret." errcode=".v:shell_error) + + if v:shell_error != 0 + let netrw_rmf_cmd= substitute(g:netrw_rmf_cmd,'HOSTNAME',a:usrhost,'').' '.substitute(rmfile,'[\/]$','','e') +" call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")") + let ret= system(netrw_rmf_cmd) +" call Decho("returned=".ret." errcode=".v:shell_error) + + if v:shell_error != 0 && !exists("g:netrw_quiet") + echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None + call inputsave()|call input("Press to continue")|call inputrestore() + endif + endif + endif + + elseif ok =~ 'q\%[uit]' + break + endif + endif + + let ctr= ctr + 1 + endwhile + + " refresh the directory + let curline= line(".")-1 +" call Decho("refresh the directory") + call NetBrowse(NetBrowseChgDir(expand("%"),'./')) + exe curline + +" call Dret("NetBrowseRm") +endfun + +" --------------------------------------------------------------------- +" NetBrowseRename: rename a remote file or directory {{{2 +fun! s:NetBrowseRename(usrhost,path) range +" call Dfunc("NetBrowseRename(usrhost<".a:usrhost."> path<".a:path.">)") + + " preparation for removing multiple files/directories + let ctr = a:firstline + let rename_cmd = substitute(g:netrw_rename_cmd,'\',a:usrhost,'') + + " attempt to rename files/directories + while ctr <= a:lastline + exe "keepjumps ".ctr + + norm! 0 + let oldname= s:NetGetWord() +" call Decho("oldname<".oldname.">") + + call inputsave() + let newname= input("Moving ".oldname." to : ",oldname) + call inputrestore() + + if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) + call s:NetBrowseFtpCmd(a:path,"rename ".oldname." ".newname) + else + let oldname= a:path.oldname + let newname= a:path.newname +" call Decho("system(rename_cmd".' "'.escape(oldname," ").'" "'.escape(newname,s:netrw_cd_escape).'"') + let ret= system(rename_cmd.' "'.escape(oldname,s:netrw_cd_escape).'" "'.escape(newname,s:netrw_cd_escape).'"') + endif + + let ctr= ctr + 1 + endwhile + + " refresh the directory + let curline= line(".") + call NetBrowse(NetBrowseChgDir(expand("%"),'./')) + exe "keepjumps ".curline +" call Dret("NetBrowseRename") +endfun + +" --------------------------------------------------------------------- +" NetRefresh: {{{2 +fun! s:NetRefresh(dirname) +" call Dfunc("NetRefresh(dirname<".a:dirname.">)") + set ma + %d + call NetBrowse(dirname) + redraw! +" call Dret("NetRefresh") +endfun + +" --------------------------------------------------------------------- +" NetSplit: mode {{{2 +" =0 : net and o +" =1 : net and v +" =2 : local and o +" =3 : local and v +fun! s:NetSplit(mode) +" call Dfunc("NetSplit(mode=".a:mode.")") + + call s:SaveWinVars() + if a:mode == 0 + exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s" + call s:CopyWinVars() + exe "norm! 0" + call NetBrowse(NetBrowseChgDir(expand("%"),NetGetWord())) + elseif a:mode ==1 + exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v" + call s:CopyWinVars() + exe "norm! 0" + call NetBrowse(NetBrowseChgDir(expand("%"),NetGetWord())) + elseif a:mode ==2 + exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s" + call s:CopyWinVars() + exe "norm! 0" + call s:LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,NetGetWord())) + else + exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v" + call s:CopyWinVars() + exe "norm! 0" + call s:LocalBrowse(LocalBrowseChgDir(b:netrw_curdir,NetGetWord())) + endif + +" call Dret("NetSplit") +endfun + +" --------------------------------------------------------------------- +" NetBrowseX: allows users to write custom functions to operate on {{{2 +" files given their extension. Passes 0=local, 1=remote +fun! s:NetBrowseX(fname,remote) +" call Dfunc("NetBrowseX(".a:fname." remote=".a:remote.")") + + " set up the filename + " (lower case the extension, make a local copy of a remote file) + let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e') + if has("win32") || has("win95") || has("win64") || has("win16") + let exten= substitute(exten,'^.*$','\L&\E','') + endif + let fname= escape(a:fname,"%#") +" call Decho("fname<".fname."> after escape()") + + if a:remote == 1 + " create a local copy + let fname= tempname().".".exten +" call Decho("create a local copy of <".a:fname."> as <".fname.">") + exe "keepjumps silent bot 1new ".a:fname + set bh=delete + exe "w! ".fname + q + endif +" call Decho("exten<".exten."> "."NetrwFileHandler_".exten."():exists=".exists("*NetrwFileHandler_".exten)) + + " set up redirection + if &srr =~ "%s" + let redir= substitute(&srr,"%s","/dev/null"."") + else + let redir= &srr . "/dev/null" + endif +" call Decho("redir:".redir.":") + + " execute the file handler + if has("win32") || has("win64") +" call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"') + exe 'silent !start rundll32