1482aaeb0SBram Moolenaar" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
2482aaeb0SBram Moolenaar"            PLUGIN PORTION
3a5792f58SBram Moolenaar" Date:		Oct 27, 2005
4482aaeb0SBram Moolenaar" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
5482aaeb0SBram Moolenaar" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
6482aaeb0SBram Moolenaar" Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
7482aaeb0SBram Moolenaar"               Permission is hereby granted to use and distribute this code,
8482aaeb0SBram Moolenaar"               with or without modifications, provided that this copyright
9482aaeb0SBram Moolenaar"               notice is copied with it. Like anything else that's free,
10482aaeb0SBram Moolenaar"               netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
11482aaeb0SBram Moolenaar"               *as is* and comes with no warranty of any kind, either
12482aaeb0SBram Moolenaar"               expressed or implied. By using this plugin, you agree that
13482aaeb0SBram Moolenaar"               in no event will the copyright holder be liable for any damages
14482aaeb0SBram Moolenaar"               resulting from the use of this software.
15482aaeb0SBram Moolenaar"
16482aaeb0SBram Moolenaar"  But be doers of the Word, and not only hearers, deluding your own selves {{{1
17482aaeb0SBram Moolenaar"  (James 1:22 RSV)
18482aaeb0SBram Moolenaar" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
19482aaeb0SBram Moolenaar
20482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
21482aaeb0SBram Moolenaar" Load Once: {{{1
22482aaeb0SBram Moolenaarif exists("g:loaded_netrw")
23482aaeb0SBram Moolenaar finish
24482aaeb0SBram Moolenaarendif
258349fd7cSBram Moolenaarif v:version < 700
268349fd7cSBram Moolenaar echohl WarningMsg | echo "***netrw*** you need vim version 7.0 for this version of netrw" | echohl None
278349fd7cSBram Moolenaar finish
288349fd7cSBram Moolenaarendif
29482aaeb0SBram Moolenaarlet s:keepcpo= &cpo
30482aaeb0SBram Moolenaarset cpo&vim
31482aaeb0SBram Moolenaar
32482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
33482aaeb0SBram Moolenaar" Public Interface: {{{1
34482aaeb0SBram Moolenaar
35482aaeb0SBram Moolenaar" Local Browsing: {{{2
36482aaeb0SBram Moolenaaraugroup FileExplorer
37482aaeb0SBram Moolenaar au!
38b8a7b560SBram Moolenaar au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
39482aaeb0SBram Moolenaaraugroup END
40482aaeb0SBram Moolenaar
41482aaeb0SBram Moolenaar" Network Browsing Reading Writing: {{{2
42482aaeb0SBram Moolenaaraugroup Network
43482aaeb0SBram Moolenaar au!
44482aaeb0SBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16")
45a5792f58SBram Moolenaar  au BufReadCmd  file://*		exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
46482aaeb0SBram Moolenaar else
47a5792f58SBram Moolenaar  au BufReadCmd  file://*		exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
48a5792f58SBram Moolenaar  au BufReadCmd  file://localhost/*	exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
49482aaeb0SBram Moolenaar endif
50*0fd9289dSBram Moolenaar au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<amatch>")|exe '2Nread "'.expand("<amatch>").'"'|exe "silent doau BufReadPost ".expand("<amatch>")
51b8a7b560SBram Moolenaar au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau FileReadPre ".expand("<amatch>")|exe 'Nread "'   .expand("<amatch>").'"'|exe "silent doau FileReadPost ".expand("<amatch>")
52b8a7b560SBram Moolenaar au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*		exe "silent doau BufWritePre ".expand("<amatch>")|exe 'Nwrite "' .expand("<amatch>").'"'|exe "silent doau BufWritePost ".expand("<amatch>")
53b8a7b560SBram Moolenaar au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*		exe "silent doau FileWritePre ".expand("<amatch>")|exe "'[,']".'Nwrite "' .expand("<amatch>").'"'|exe "silent doau FileWritePost ".expand("<amatch>")
54482aaeb0SBram Moolenaaraugroup END
55482aaeb0SBram Moolenaar
56482aaeb0SBram Moolenaar" Commands: :Nread, :Nwrite, :NetUserPass {{{2
57*0fd9289dSBram Moolenaarcom! -count=1 -nargs=*	Nread		call netrw#NetSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetRestorePosn()
58482aaeb0SBram Moolenaarcom! -range=% -nargs=*	Nwrite		call netrw#NetSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetRestorePosn()
59482aaeb0SBram Moolenaarcom! -nargs=*		NetUserPass	call NetUserPass(<f-args>)
60*0fd9289dSBram Moolenaarcom! -nargs=+           Ncopy           call netrw#NetObtain(<f-args>)
61482aaeb0SBram Moolenaar
62482aaeb0SBram Moolenaar" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
63482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0	Explore		call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
64482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0	Sexplore	call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
65482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0	Hexplore	call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
66482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0	Vexplore	call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
67482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang		Nexplore	call netrw#Explore(-1,0,0,<q-args>)
68482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang		Pexplore	call netrw#Explore(-2,0,0,<q-args>)
69482aaeb0SBram Moolenaar
70482aaeb0SBram Moolenaar" Commands: NetrwSettings {{{2
71482aaeb0SBram Moolenaarcom! -nargs=0 NetrwSettings :call netrwSettings#NetrwSettings()
72482aaeb0SBram Moolenaar
73b8a7b560SBram Moolenaar" Maps:
74b8a7b560SBram Moolenaarif !hasmapto('<Plug>NetrwBrowseX')
75b8a7b560SBram Moolenaar nmap <unique> gx <Plug>NetrwBrowseX
76b8a7b560SBram Moolenaarendif
77b8a7b560SBram Moolenaarnno <silent> <Plug>NetrwBrowseX :call netrw#NetBrowseX(expand("<cWORD>"),0)<cr>
78b8a7b560SBram Moolenaar
79482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
80482aaeb0SBram Moolenaar" LocalBrowse: {{{2
81482aaeb0SBram Moolenaarfun! s:LocalBrowse(dirname)
82482aaeb0SBram Moolenaar  " unfortunate interaction -- debugging calls can't be used here;
83482aaeb0SBram Moolenaar  " the BufEnter event causes triggering when attempts to write to
84482aaeb0SBram Moolenaar  " the DBG buffer are made.
85482aaeb0SBram Moolenaar  if isdirectory(a:dirname)
86b8a7b560SBram Moolenaar   silent! call netrw#DirBrowse(a:dirname)
87482aaeb0SBram Moolenaar  endif
88482aaeb0SBram Moolenaar  " not a directory, ignore it
89482aaeb0SBram Moolenaarendfun
90482aaeb0SBram Moolenaar
91482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
92482aaeb0SBram Moolenaar" NetrwStatusLine: {{{1
93482aaeb0SBram Moolenaarfun! NetrwStatusLine()
94482aaeb0SBram Moolenaar"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".")
95482aaeb0SBram Moolenaar  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr(".") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
96482aaeb0SBram Moolenaar   let &stl= s:netrw_explore_stl
97482aaeb0SBram Moolenaar   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
98482aaeb0SBram Moolenaar   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
99482aaeb0SBram Moolenaar   return ""
100482aaeb0SBram Moolenaar  else
101482aaeb0SBram Moolenaar   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
102482aaeb0SBram Moolenaar  endif
103482aaeb0SBram Moolenaarendfun
104482aaeb0SBram Moolenaar
105482aaeb0SBram Moolenaar" ------------------------------------------------------------------------
106482aaeb0SBram Moolenaar" NetUserPass: set username and password for subsequent ftp transfer {{{1
107482aaeb0SBram Moolenaar"   Usage:  :call NetUserPass()			-- will prompt for userid and password
108482aaeb0SBram Moolenaar"	    :call NetUserPass("uid")		-- will prompt for password
109482aaeb0SBram Moolenaar"	    :call NetUserPass("uid","password") -- sets global userid and password
110482aaeb0SBram Moolenaarfun! NetUserPass(...)
111482aaeb0SBram Moolenaar
112482aaeb0SBram Moolenaar " get/set userid
113482aaeb0SBram Moolenaar if a:0 == 0
114482aaeb0SBram Moolenaar"  call Dfunc("NetUserPass(a:0<".a:0.">)")
115482aaeb0SBram Moolenaar  if !exists("g:netrw_uid") || g:netrw_uid == ""
116482aaeb0SBram Moolenaar   " via prompt
117482aaeb0SBram Moolenaar   let g:netrw_uid= input('Enter username: ')
118482aaeb0SBram Moolenaar  endif
119482aaeb0SBram Moolenaar else	" from command line
120482aaeb0SBram Moolenaar"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
121482aaeb0SBram Moolenaar  let g:netrw_uid= a:1
122482aaeb0SBram Moolenaar endif
123482aaeb0SBram Moolenaar
124482aaeb0SBram Moolenaar " get password
125482aaeb0SBram Moolenaar if a:0 <= 1 " via prompt
126482aaeb0SBram Moolenaar"  call Decho("a:0=".a:0." case <=1:")
127482aaeb0SBram Moolenaar  let g:netrw_passwd= inputsecret("Enter Password: ")
128482aaeb0SBram Moolenaar else " from command line
129482aaeb0SBram Moolenaar"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
130482aaeb0SBram Moolenaar  let g:netrw_passwd=a:2
131482aaeb0SBram Moolenaar endif
132482aaeb0SBram Moolenaar"  call Dret("NetUserPass")
133482aaeb0SBram Moolenaarendfun
134482aaeb0SBram Moolenaar
135482aaeb0SBram Moolenaar" ------------------------------------------------------------------------
136482aaeb0SBram Moolenaar" NetReadFixup: this sort of function is typically written by the user {{{1
137482aaeb0SBram Moolenaar"               to handle extra junk that their system's ftp dumps
138482aaeb0SBram Moolenaar"               into the transfer.  This function is provided as an
139482aaeb0SBram Moolenaar"               example and as a fix for a Windows 95 problem: in my
140482aaeb0SBram Moolenaar"               experience, win95's ftp always dumped four blank lines
141482aaeb0SBram Moolenaar"               at the end of the transfer.
142482aaeb0SBram Moolenaarif has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
143482aaeb0SBram Moolenaar fun! NetReadFixup(method, line1, line2)
144482aaeb0SBram Moolenaar"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
145482aaeb0SBram Moolenaar   if method == 3   " ftp (no <.netrc>)
146482aaeb0SBram Moolenaar    let fourblanklines= line2 - 3
147482aaeb0SBram Moolenaar    silent fourblanklines.",".line2."g/^\s*/d"
148482aaeb0SBram Moolenaar   endif
149482aaeb0SBram Moolenaar"   call Dret("NetReadFixup")
150482aaeb0SBram Moolenaar endfun
151482aaeb0SBram Moolenaarendif
152482aaeb0SBram Moolenaar
153482aaeb0SBram Moolenaar" ------------------------------------------------------------------------
154482aaeb0SBram Moolenaar" Modelines And Restoration: {{{1
155482aaeb0SBram Moolenaarlet &cpo= s:keepcpo
156482aaeb0SBram Moolenaarunlet s:keepcpo
157482aaeb0SBram Moolenaar" vim:ts=8 fdm=marker
158