summaryrefslogtreecommitdiffstats
path: root/runtime/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/plugin')
-rw-r--r--runtime/plugin/NetrwFileHandlers.vim123
-rw-r--r--runtime/plugin/gzip.vim7
-rw-r--r--runtime/plugin/netrw.vim778
3 files changed, 664 insertions, 244 deletions
diff --git a/runtime/plugin/NetrwFileHandlers.vim b/runtime/plugin/NetrwFileHandlers.vim
index 619115b99f..7da6479fdf 100644
--- a/runtime/plugin/NetrwFileHandlers.vim
+++ b/runtime/plugin/NetrwFileHandlers.vim
@@ -1,11 +1,18 @@
" NetrwFileHandlers: contains various extension-based file handlers for
" netrw's browsers' x command ("eXecute launcher")
" Author: Charles E. Campbell, Jr.
-" Date: Jul 09, 2004
-" Version: 1
+" Date: Aug 27, 2004
+" Version: 2
+
" ---------------------------------------------------------------------
+" Prevent Reloading: {{{1
+if exists("g:loaded_netrwfilehandlers") || &cp
+ finish
+endif
+let g:loaded_netrwfilehandlers= "v2"
-" NetrwFileHandler_html: handles html when the user hits "x" when the
+" ---------------------------------------------------------------------
+" NetrwFileHandler_html: handles html when the user hits "x" when the {{{1
" cursor is atop a *.html file
fun! NetrwFileHandler_html(pagefile)
" call Dfunc("NetrwFileHandler_html(".a:pagefile.")")
@@ -14,10 +21,10 @@ fun! NetrwFileHandler_html(pagefile)
if executable("mozilla")
" call Decho("executing !mozilla ".page)
- exe "!mozilla ".page
+ exe "!mozilla \"".page.'"'
elseif executable("netscape")
" call Decho("executing !netscape ".page)
- exe "!netscape ".page
+ exe "!netscape \"".page.'"'
else
" call Dret("NetrwFileHandler_html 0")
return 0
@@ -28,7 +35,7 @@ fun! NetrwFileHandler_html(pagefile)
endfun
" ---------------------------------------------------------------------
-" NetrwFileHandler_htm: handles html when the user hits "x" when the
+" NetrwFileHandler_htm: handles html when the user hits "x" when the {{{1
" cursor is atop a *.htm file
fun! NetrwFileHandler_htm(pagefile)
" call Dfunc("NetrwFileHandler_htm(".a:pagefile.")")
@@ -37,10 +44,10 @@ fun! NetrwFileHandler_htm(pagefile)
if executable("mozilla")
" call Decho("executing !mozilla ".page)
- exe "!mozilla ".page
+ exe "!mozilla \"".page.'"'
elseif executable("netscape")
" call Decho("executing !netscape ".page)
- exe "!netscape ".page
+ exe "!netscape \"".page.'"'
else
" call Dret("NetrwFileHandler_htm 0")
return 0
@@ -51,14 +58,15 @@ fun! NetrwFileHandler_htm(pagefile)
endfun
" ---------------------------------------------------------------------
-" NetrwFileHandler_jpg:
+" NetrwFileHandler_jpg: {{{1
fun! NetrwFileHandler_jpg(jpgfile)
" call Dfunc("NetrwFileHandler_jpg(jpgfile<".a:jpgfile.">)")
if executable("gimp")
exe "silent! !gimp -s ".a:jpgfile
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
- exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".a:jpgfile
+" call Decho("silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".escape(a:jpgfile," []|'"))
+ exe "!".expand("$SystemRoot")."/SYSTEM32/MSPAINT \"".a:jpgfile.'"'
else
" call Dret("NetrwFileHandler_jpg 0")
return 0
@@ -69,14 +77,14 @@ fun! NetrwFileHandler_jpg(jpgfile)
endfun
" ---------------------------------------------------------------------
-" NetrwFileHandler_gif:
+" NetrwFileHandler_gif: {{{1
fun! NetrwFileHandler_gif(giffile)
" call Dfunc("NetrwFileHandler_gif(giffile<".a:giffile.">)")
if executable("gimp")
exe "silent! !gimp -s ".a:giffile
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
- exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".a:giffile
+ exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT \"".a:giffile.'"'
else
" call Dret("NetrwFileHandler_gif 0")
return 0
@@ -87,14 +95,32 @@ fun! NetrwFileHandler_gif(giffile)
endfun
" ---------------------------------------------------------------------
-" NetrwFileHandler_pnm:
+" NetrwFileHandler_png: {{{1
+fun! NetrwFileHandler_png(pngfile)
+" call Dfunc("NetrwFileHandler_png(pngfile<".a:pngfile.">)")
+
+ if executable("gimp")
+ exe "silent! !gimp -s ".a:pngfile
+ elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
+ exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT \"".a:pngfile.'"'
+ else
+" call Dret("NetrwFileHandler_png 0")
+ return 0
+ endif
+
+" call Dret("NetrwFileHandler_png 1")
+ return 1
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwFileHandler_pnm: {{{1
fun! NetrwFileHandler_pnm(pnmfile)
" call Dfunc("NetrwFileHandler_pnm(pnmfile<".a:pnmfile.">)")
if executable("gimp")
exe "silent! !gimp -s ".a:pnmfile
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
- exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".a:pnmfile
+ exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT \"".a:pnmfile.'"'
else
" call Dret("NetrwFileHandler_pnm 0")
return 0
@@ -105,14 +131,14 @@ fun! NetrwFileHandler_pnm(pnmfile)
endfun
" ---------------------------------------------------------------------
-" NetrwFileHandler_bmp: visualize bmp files
+" NetrwFileHandler_bmp: visualize bmp files {{{1
fun! NetrwFileHandler_bmp(bmpfile)
" call Dfunc("NetrwFileHandler_bmp(bmpfile<".a:bmpfile.">)")
if executable("gimp")
exe "silent! !gimp -s ".a:bmpfile
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
- exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".a:bmpfile
+ exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT \"".a:bmpfile.'"'
else
" call Dret("NetrwFileHandler_bmp 0")
return 0
@@ -123,84 +149,109 @@ fun! NetrwFileHandler_bmp(bmpfile)
endfun
" ---------------------------------------------------------------------
-" NetrwFileHandler_pdf: visualize pdf files
+" NetrwFileHandler_pdf: visualize pdf files {{{1
fun! NetrwFileHandler_pdf(pdf)
- " call Dfunc("NetrwFileHandler_pdf(pdf<".a:pdf.">)")
+" " call Dfunc("NetrwFileHandler_pdf(pdf<".a:pdf.">)")
if executable("gs")
exe "silent! !gs ".a:pdf
else
- " call Dret("NetrwFileHandler_pdf 0")
+" " call Dret("NetrwFileHandler_pdf 0")
return 0
endif
- " call Dret("NetrwFileHandler_pdf 1")
+" " call Dret("NetrwFileHandler_pdf 1")
return 1
endfun
" ---------------------------------------------------------------------
-" NetrwFileHandler_sxw: visualize sxw files
+" NetrwFileHandler_sxw: visualize sxw files {{{1
fun! NetrwFileHandler_sxw(sxw)
- " call Dfunc("NetrwFileHandler_sxw(sxw<".a:sxw.">)")
+" " call Dfunc("NetrwFileHandler_sxw(sxw<".a:sxw.">)")
if executable("gs")
exe "silent! !gs ".a:sxw
else
- " call Dret("NetrwFileHandler_sxw 0")
+" " call Dret("NetrwFileHandler_sxw 0")
return 0
endif
- " call Dret("NetrwFileHandler_sxw 1")
+" " call Dret("NetrwFileHandler_sxw 1")
return 1
endfun
" ---------------------------------------------------------------------
-" NetrwFileHandler_doc: visualize doc files
+" NetrwFileHandler_doc: visualize doc files {{{1
fun! NetrwFileHandler_doc(doc)
- " call Dfunc("NetrwFileHandler_doc(doc<".a:doc.">)")
+" " call Dfunc("NetrwFileHandler_doc(doc<".a:doc.">)")
if executable("oowriter")
exe "silent! !oowriter ".a:doc
redraw!
else
- " call Dret("NetrwFileHandler_doc 0")
+" " call Dret("NetrwFileHandler_doc 0")
return 0
endif
- " call Dret("NetrwFileHandler_doc 1")
+" " call Dret("NetrwFileHandler_doc 1")
return 1
endfun
" ---------------------------------------------------------------------
-" NetrwFileHandler_sxw: visualize sxw files
+" NetrwFileHandler_sxw: visualize sxw files {{{1
fun! NetrwFileHandler_sxw(sxw)
- " call Dfunc("NetrwFileHandler_sxw(sxw<".a:sxw.">)")
+" " call Dfunc("NetrwFileHandler_sxw(sxw<".a:sxw.">)")
if executable("oowriter")
exe "silent! !oowriter ".a:sxw
redraw!
else
- " call Dret("NetrwFileHandler_sxw 0")
+" " call Dret("NetrwFileHandler_sxw 0")
return 0
endif
- " call Dret("NetrwFileHandler_sxw 1")
+" " call Dret("NetrwFileHandler_sxw 1")
return 1
endfun
" ---------------------------------------------------------------------
-" NetrwFileHandler_xls: visualize xls files
+" NetrwFileHandler_xls: visualize xls files {{{1
fun! NetrwFileHandler_xls(xls)
- " call Dfunc("NetrwFileHandler_xls(xls<".a:xls.">)")
+" " call Dfunc("NetrwFileHandler_xls(xls<".a:xls.">)")
if executable("oocalc")
exe "silent! !oocalc ".a:xls
redraw!
else
- " call Dret("NetrwFileHandler_xls 0")
+" " call Dret("NetrwFileHandler_xls 0")
+ return 0
+ endif
+
+" " call Dret("NetrwFileHandler_xls 1")
+ return 1
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwFileHandler_ps: handles PostScript files {{{1
+fun! NetrwFileHandler_ps(ps)
+" call Dfunc("NetrwFileHandler_ps()")
+ if executable("gs")
+ exe "silent! !gs ".a:ps
+ redraw!
+ elseif executable("ghostscript")
+ exe "silent! !ghostscript ".a:ps
+ redraw!
+ elseif executable("ghostscript")
+ exe "silent! !ghostscript ".a:ps
+ redraw!
+ elseif executable("gswin32")
+ exe "silent! !gswin32 \"".a:ps.'"'
+ redraw!
+" call Dret("NetrwFileHandler_ps 0")
return 0
endif
- " call Dret("NetrwFileHandler_xls 1")
+" call Dret("NetrwFileHandler_ps 1")
return 1
endfun
" ---------------------------------------------------------------------
+" vim: ts=4 fdm=marker
diff --git a/runtime/plugin/gzip.vim b/runtime/plugin/gzip.vim
index 39b0cbc36f..2b9b5238dc 100644
--- a/runtime/plugin/gzip.vim
+++ b/runtime/plugin/gzip.vim
@@ -1,6 +1,6 @@
" Vim plugin for editing compressed files.
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2004 Jan 12
+" Last Change: 2004 Jul 30
" Exit quickly when:
" - this plugin was already loaded
@@ -71,6 +71,11 @@ fun s:read(cmd)
execute "silent '[,']w " . tmpe
" uncompress the temp file: call system("gzip -dn tmp.gz")
call system(a:cmd . " " . tmpe)
+ if !filereadable(tmp)
+ " uncompress didn't work! Keep the compressed file then.
+ echoerr "Error: Could not read uncompressed file"
+ return
+ endif
" delete the compressed lines; remember the line number
let l = line("'[") - 1
if exists(":lockmarks")
diff --git a/runtime/plugin/netrw.vim b/runtime/plugin/netrw.vim
index be6bb41dd9..84cda93c49 100644
--- a/runtime/plugin/netrw.vim
+++ b/runtime/plugin/netrw.vim
@@ -1,18 +1,20 @@
" netrw.vim: Handles file transfer and remote directory listing across a network
-" Last Change: Jul 26, 2004
+" Last Change: Aug 27, 2004
" Maintainer: Charles E. Campbell, Jr. PhD <drchipNOSPAM at campbellfamily.biz>
-" Version: 47m
+" Version: 47
" License: Vim License (see vim's :help license)
"
" But be doers of the word, and not only hearers, deluding your own selves
" (James 1:22 RSV)
" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Exit quickly when already loaded or when 'compatible' is set. {{{1
+" ---------------------------------------------------------------------
+" Prevent Reloading: {{{1
if exists("loaded_netrw") || &cp
finish
endif
-let loaded_netrw = "v47m"
+let loaded_netrw = "v47"
let s:save_cpo = &cpo
let loaded_explorer = 1
set cpo&vim
@@ -26,7 +28,7 @@ if !exists("g:netrw_win95ftp")
let g:netrw_win95ftp= 1
endif
if !exists("g:netrw_cygwin")
- if has("win32")
+ if has("win32") || has("win95") || has("win64") || has("win16")
let g:netrw_cygwin= 1
else
let g:netrw_cygwin= 0
@@ -88,8 +90,10 @@ if !exists("g:netrw_local_rmdir")
let g:netrw_local_rmdir= "rmdir"
endif
if !exists("g:netrw_local_rename")
- if has("win32")
- let g:netrw_local_rename= "ren"
+ if g:netrw_cygwin
+ let g:netrw_local_rename= "mv"
+ elseif has("win32") || has("win95") || has("win64") || has("win16")
+ let g:netrw_local_rename= "rename"
elseif has("unix")
let g:netrw_local_rename= "mv"
endif
@@ -103,6 +107,26 @@ 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'
+endif
+if !exists("g:netrw_keepdir")
+ let g:netrw_keepdir= 0
+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
" BufEnter event ignored by decho when following variable is true
" Has a side effect that doau BufReadPost doesn't work, so
@@ -146,7 +170,7 @@ if !exists("g:netrw_fetch_cmd")
endif
endif
-if has("win32")
+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')
@@ -168,7 +192,7 @@ if version >= 600
" Network Handler: {{{2
augroup Network
au!
- if has("win32")
+ if has("win32") || has("win95") || has("win64") || has("win16")
au BufReadCmd file://* exe "silent doau BufReadPre ".expand("<afile>")|exe 'e '.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>")
else
au BufReadCmd file:///* exe "silent doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>")
@@ -244,7 +268,7 @@ fun! s:NetRead(...)
let ichoice = 1
endif
- " get name of a temporary file
+ " get name of a temporary file and set up shell-quoting character
let tmpfile= tempname()
" call Decho("ichoice=".ichoice." readcmd<".readcmd.">")
@@ -260,8 +284,8 @@ fun! s:NetRead(...)
exe "let choice= a:" . ichoice
" call Decho("no lastfile: choice<" . choice . ">")
- " Reconstruct Choice if choice starts with '"'
if match(choice,"?") == 0
+ " give help
echo 'NetRead Usage:'
echo ':Nread machine:path uses rcp'
echo ':Nread "machine path" uses ftp with <.netrc>'
@@ -275,7 +299,9 @@ fun! s:NetRead(...)
echo ':Nread scp://[user@]machine[[:#]port]/path uses scp'
echo ':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 "..."
@@ -304,7 +330,7 @@ fun! s:NetRead(...)
let ichoice= ichoice + 1
" fix up windows urls
- if has("win32")
+ if has("win32") || has("win95") || has("win64") || has("win16")
let choice = substitute(choice,'\\','/','ge')
" call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile)
@@ -318,12 +344,8 @@ fun! s:NetRead(...)
" Check if NetBrowse() should be handling this request
" call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
if choice =~ "^.*/$"
- if strlen(g:netrw_list_cmd) > 0
- keepjumps call s:NetBrowse(choice)
-" call Dret("NetRead")
- else
- echoerr "sorry, can't do a remote listing; ssh isn't executable"
- endif
+ keepjumps call s:NetBrowse(choice)
+" call Dret("NetRead")
return
endif
@@ -366,7 +388,7 @@ fun! s:NetRead(...)
new
setlocal ff=unix
exe "put ='".g:netrw_ftpmode."'"
- exe "put ='get ".netrw_fname." ".tmpfile."'"
+ 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
@@ -376,7 +398,11 @@ fun! s:NetRead(...)
endif
" If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
if getline(1) !~ "^$"
+ let debugkeep= &debug
+ set debug=msg
echoerr getline(1)
+ exe "echomsg '".getline(1)."'"
+ let &debug= debugkeep
endif
bd!
let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
@@ -413,11 +439,12 @@ fun! s:NetRead(...)
" -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
+ 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).">")
echoerr getline(1)
endif
bd!
@@ -496,7 +523,7 @@ fun! s:NetRead(...)
endif
" perform cadaver operation:
- norm 1Gdd
+ norm! 1Gdd
" call Decho("executing: %!".g:netrw_dav_cmd)
exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
bd!
@@ -570,14 +597,12 @@ fun! s:NetRead(...)
" call Decho("cleanup")
if exists("b:netrw_method")
unlet b:netrw_method
- unlet g:netrw_machine
unlet b:netrw_fname
endif
call s:NetOptionRestore()
" call Dret("NetRead")
endfun
-" end of NetRead
" ------------------------------------------------------------------------
" NetGetFile: Function to read file "fname" with command "readcmd". {{{1
@@ -644,14 +669,14 @@ fun! s:NetGetFile(readcmd, fname, method)
endif
exe curbufnr . "bwipe!"
- exe "f ".curfilename
+ exe "f ".escape(curfilename," ")
" the ":f newname" apparently leaves the temporary file as the alternate
" file in the buffer list (see :ls!). The following command wipes it out.
exe bufnr("#")."bwipe!"
else
let oldul= &ul
setlocal ul=-1
- exe a:readcmd." ".v:cmdarg." ".fname
+ exe a:readcmd." ".v:cmdarg." ".escape(fname," ")
if delline > 0
" wipe out last line, which should be a blank line anyway
$del
@@ -764,7 +789,7 @@ fun! s:NetWrite(...) range
let ichoice= ichoice + 1
" fix up windows urls
- if has("win32")
+ if has("win32") || has("win95") || has("win64") || has("win16")
let choice= substitute(choice,'\\','/','ge')
"ER: see NetRead()
exe 'lcd ' . fnamemodify(tmpfile,':h')
@@ -807,8 +832,8 @@ fun! s:NetWrite(...) range
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."'")
+ 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
@@ -850,7 +875,7 @@ fun! s:NetWrite(...) range
" -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
+ 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)
@@ -907,7 +932,7 @@ fun! s:NetWrite(...) range
endif
" perform cadaver operation:
- norm 1Gdd
+ norm! 1Gdd
" call Decho("executing: %!".g:netrw_dav_cmd)
exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
bd!
@@ -938,7 +963,7 @@ fun! s:NetWrite(...) range
new
setlocal ff=unix
put ='put '.tmpfile.' '.netrw_fname
- norm 1Gdd
+ norm! 1Gdd
" call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
bd!
@@ -961,7 +986,6 @@ fun! s:NetWrite(...) range
" call Dret("NetWrite")
endfun
-" end of NetWrite
" ------------------------------------------------------------------------
" Browsing Support For Remote Directories And Files: {{{1
@@ -970,13 +994,17 @@ endfun
" g:netrw_list_cmd has a string, HOSTNAME, that needs to be substituted
" with the requested remote hostname first.
fun! <SID>NetBrowse(dirname)
-" call Dfunc("NetBrowse(dirname<".a:dirname.">)")
+" call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".g:netrw_longlist)
" sanity check
- if !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
- echoerr "***netrw*** this system doesn't support remote directory listing"
-" call Dret("NetBrowse 0")
- return 0
+ if exists("b:netrw_method") && (b:netrw_method =~ '[23]' && !executable("ftp"))
+ echoerr "***netrw*** this system doesn't support remote directory listing via ftp"
+" call Dret("NetBrowse")
+ return
+ elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
+ echoerr "***netrw*** this system doesn't support remote directory listing via ssh"
+" call Dret("NetBrowse")
+ return
endif
" make this buffer modifiable
@@ -984,10 +1012,11 @@ fun! <SID>NetBrowse(dirname)
" analyze a:dirname and g:netrw_list_cmd
let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
+" call Decho("dirpat<".dirpat.">")
if a:dirname !~ dirpat
echoerr "NetBrowse: I don't understand your dirname<".a:dirname.">"
-" call Dret("NetBrowse 0 : badly formatted dirname")
- return 0
+" call Dret("NetBrowse : badly formatted dirname<".a:dirname.">")
+ return
endif
let method = substitute(a:dirname,dirpat,'\1','')
@@ -1001,7 +1030,15 @@ fun! <SID>NetBrowse(dirname)
" call Decho("set up path <".path .">")
" call Decho("set up fname <".fname .">")
- let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
+ if method == "ftp"
+ let listcmd = "-lF"
+ else
+ let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
+ endif
+ if exists("b:netrw_method")
+" call Decho("setting s:netrw_method<".b:netrw_method.">")
+ let s:netrw_method= b:netrw_method
+ endif
" optionally sort by time (-t) or by size (-S)
if g:netrw_sort_by =~ "^t"
@@ -1015,13 +1052,12 @@ fun! <SID>NetBrowse(dirname)
endif
" call Decho("set up listcmd<".listcmd.">")
-
if fname =~ '@$' && fname !~ '^"'
" call Decho("attempt transfer of symlink as file")
call s:NetBrowse(substitute(a:dirname,'@$','','e'))
redraw!
-" call Dret("NetBrowse 0 : symlink")
- return 0
+" call Dret("NetBrowse : symlink")
+ return
elseif fname !~ '/$' && fname !~ '^"'
" looks like a regular file, attempt transfer
@@ -1035,15 +1071,15 @@ fun! <SID>NetBrowse(dirname)
" remote-read the requested file into current buffer
enew!
- exe "file ".method."://".user.machine."/".escape(path,' ')
+ exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape)
exe "silent doau BufReadPre ".fname
silent call s:NetRead(method."://".user.machine."/".path)
exe "silent doau BufReadPost ".fname
keepjumps 1d
setlocal nomod
-" call Dret("NetBrowse 0 : file<".fname.">")
- return 0
+" call Dret("NetBrowse : file<".fname.">")
+ return
endif
" ---------------------------------------------------------------------
@@ -1051,97 +1087,153 @@ fun! <SID>NetBrowse(dirname)
" call Decho("Perform directory listing...")
" set up new buffer and map
let bufname = method.'://'.user.machine.'/'.path
- let bufnamenr = bufnr(bufname)
+ let bufnamenr = bufexists(bufname)
" call Decho("bufname<".bufname."> bufnamenr=".bufnamenr)
- if bufnamenr != -1
+ if bufnamenr != 0
" buffer already exists, switch to it!
+" call Decho("buffer already exists, switching to it")
exe "b ".bufnamenr
if line("$") >= 5
-" call Dret("NetBrowse 1")
- return 1
+" call Dret("NetBrowse")
+ return
endif
else
+" call Decho("generate a new buffer")
enew!
endif
+
+ " rename file to reflect where its from
setlocal ts=32 bt=nofile bh=wipe nobl
- exe 'file '.escape(bufname,' ')
+ exe 'file '.escape(bufname,s:netrw_cd_escape)
" call Decho("renaming file to bufname<".bufname.">")
setlocal bt=nowrite bh=hide nobl
- nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr>
+
+ " set up buffer-local mappings
+" call Decho("set up buffer-local mappings")
+ nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
nnoremap <buffer> <silent> <c-l> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr>
nnoremap <buffer> <silent> a :let g:netrw_hide=!g:netrw_hide<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
- nnoremap <buffer> <silent> <Leader>h :call <SID>NetHideEdit(0)<cr>
- nnoremap <buffer> <silent> i :call <SID>NetSavePosn()<bar>call <SID>NetLongList(0)<bar>call <SID>NetRestorePosn()<cr>
- nnoremap <buffer> <silent> o :exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<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("%"),<SID>NetGetDir()))<cr>
- nnoremap <buffer> <silent> s :let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
- nnoremap <buffer> <silent> v :exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr>
- nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()),1)<cr>
- nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr>
+ nnoremap <buffer> <silent> b :<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
+ nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr>
+ nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(0)<cr>
+ nnoremap <buffer> <silent> i :call <SID>NetLongList(0)<cr>
+ nnoremap <buffer> <silent> o :exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
+ nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr>
+ nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
+ nnoremap <buffer> <silent> s :call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
+ nnoremap <buffer> <silent> S :call <SID>NetSortSequence(0)<cr>
+ nnoremap <buffer> <silent> v :exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
+ nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
+ nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
+ exe 'nnoremap <buffer> <silent> d :call <SID>NetMakeDir("'.user.machine.'")<cr>'
exe 'nnoremap <buffer> <silent> D :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
exe 'vnoremap <buffer> <silent> D :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
exe 'nnoremap <buffer> <silent> R :exe "norm! 0"<bar>call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
exe 'vnoremap <buffer> <silent> R :call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
- exe 'nnoremap <buffer> <silent> <Leader>m :call <SID>NetMakeDir("'.user.machine.'")<cr>'
nnoremap <buffer> ? :he netrw-browse-cmds<cr>
setlocal ma
" Set up the banner
-" call Decho("executing: r! ".listcmd." '".path."'")
- keepjumps put ='\" =============================='
+" 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 g:netrw_bannercnt= 6
+ let s: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 g:netrw_bannercnt= g:netrw_bannercnt + 1
- keepjumps put ='\" Sorted by '.g:netrw_sort_by
+ let s:netrw_bannercnt= s: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 '.g:netrw_sort_by
+ keepjumps put ='\" Sorted by '.sortby
endif
if g:netrw_list_hide != "" && g:netrw_hide
keepjumps put ='\" Hiding: '.g:netrw_list_hide
- let g:netrw_bannercnt= g:netrw_bannercnt + 1
+ let s:netrw_bannercnt= s:netrw_bannercnt + 1
endif
- keepjumps put ='\" =============================='
+ 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"
+ call NetBrowseFtpCmd(path,"ls ".listcmd)
+ keepjumps 1d
- " remote read the requested directory
- exe "silent r! ".listcmd." '".path."'"
- keepjumps 1d
+ if !g:netrw_longlist
+" call Decho("generate short listing")
+ " shorten the listing
+ exe "keepjumps ".s:netrw_bannercnt
+ " cleanup
+ while getline(".") =~ g:netrw_ftp_browse_reject
+ keepjumps d
+ endwhile
+ keepjumps put='../'
+ keepjumps put='./'
+ exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
+ exe "keepjumps silent ".s:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#'
+ exe "keepjumps silent ".s:netrw_bannercnt.',$g/ -> /s# -> .*$#/#'
+ endif
+
+ else
+" call Decho("use ssh")
+ 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
+ endif
" manipulate the directory listing (hide, sort)
setlocal ft=netrwlist
- if line("$") >= g:netrw_bannercnt
+ if line("$") >= s: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
- keepjumps silent /^total\s*\d\+$/d
- exe 'keepjumps silent '.g:netrw_bannercnt.',$s/ -> .*$//e'
- exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
- exe g:netrw_bannercnt
+" call Decho("manipulate long listing")
+
+ if method == "ftp"
+ " cleanup
+ exe "keepjumps ".s:netrw_bannercnt
+ while getline(".") =~ '^total\s\+\d\+$' || getline(".") =~ 'Trying\s\+\d\+.*$'
+ keepjumps d
+ endwhile
+ exe 'keepjumps '.s:netrw_bannercnt."put='./'"
+ exe 'keepjumps '.s:netrw_bannercnt."put='../'"
+ endif
+
+ exe 'keepjumps silent '.s:netrw_bannercnt.',$s/ -> .*$//e'
+ exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
+ exe s:netrw_bannercnt
endif
+
if g:netrw_sort_by =~ "^n"
call s:SetSort()
- exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()'
- exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\d\{3}\///e'
+ exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
+ exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
endif
if g:netrw_longlist
" shorten the list to keep its width <= 80 characters
- exe "keepjumps silent ".g:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
+ exe "keepjumps silent ".s:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
endif
endif
+ setlocal nomod
+ setlocal noma
- setlocal noma nomod
-
-" call Dret("NetBrowse 1")
- return 1
+" call Dret("NetBrowse")
+ return
endfun
" ---------------------------------------------------------------------
@@ -1188,19 +1280,19 @@ fun! <SID>NetBrowseChgDir(dirname,newdir)
endfun
" ---------------------------------------------------------------------
-" NetGetDir: it gets the directory named under the cursor
-fun! <SID>NetGetDir()
-" call Dfunc("NetGetDir() line#".line("."))
+" NetGetWord: it gets the directory named under the cursor
+fun! <SID>NetGetWord()
+" call Dfunc("NetGetWord() line#".line("."))
let dirname= getline(".")
if dirname =~ '\t'
let dirname= substitute(dirname,'\t.*$','','e')
endif
-" call Dret("NetGetDir <".dirname.">")
+" call Dret("NetGetWord <".dirname.">")
return dirname
endfun
" ---------------------------------------------------------------------
-" NetBrowseRm: remove a remote file or directory {{{2
+" NetBrowseRm: remove/delete a remote file or directory {{{2
fun! <SID>NetBrowseRm(usrhost,path) range
" call Dfunc("NetBrowseRm(usrhost<".a:usrhost."> path<".a:path.">)")
" call Decho("firstline=".a:firstline." lastline=".a:lastline)
@@ -1213,41 +1305,52 @@ fun! <SID>NetBrowseRm(usrhost,path) range
exe ctr
norm! 0
- let rmfile= a:path.s:NetGetDir()
+ let rmfile= s:NetGetWord()
" call Decho("rmfile<".rmfile.">")
if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$')
" attempt to remove file
- let netrw_rm_cmd= substitute(g:netrw_rm_cmd,'HOSTNAME',a:usrhost,'').' '.rmfile
-" call Decho("attempt to remove file: system(".netrw_rm_cmd.")")
call inputsave()
let ok= input("Confirm deletion of file<".rmfile."> ","y")
call inputrestore()
+
if ok == "y"
- let ret= system(netrw_rm_cmd)
-" call Decho("returned=".ret." errcode=".v:shell_error)
+ if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
+ silent! keepjumps .,$d
+ call 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
endif
else
" attempt to remove directory
- let netrw_rmdir_cmd= substitute(g:netrw_rmdir_cmd,'HOSTNAME',a:usrhost,'').' '.rmfile
-" call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")")
call inputsave()
let ok= input("Confirm deletion of directory<".rmfile."> ","y")
call inputrestore()
if ok == "y"
- let ret= system(netrw_rmdir_cmd)
-" call Decho("returned=".ret." errcode=".v:shell_error)
-
- if v:shell_error != 0
- let netrw_rmf_cmd= substitute(g:netrw_rmf_cmd,'HOSTNAME',a:usrhost,'').' '.substitute(rmfile,'/$','','e')
-" call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
- let ret= system(netrw_rmf_cmd)
+ if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
+ call NetBrowseFtpCmd(a:path,"rmdir ".rmfile)
+ else
+ let rmfile = a:path.rmfile
+ let netrw_rmdir_cmd= substitute(g:netrw_rmdir_cmd,'HOSTNAME',a:usrhost,'').' '."'".'"'.rmfile.'"