1" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
2"            PLUGIN SECTION
3" Date:		Aug 10, 2008
4" Maintainer:	Charles E Campbell, Jr <[email protected]>
5" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
6" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
7"               Permission is hereby granted to use and distribute this code,
8"               with or without modifications, provided that this copyright
9"               notice is copied with it. Like anything else that's free,
10"               netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
11"               *as is* and comes with no warranty of any kind, either
12"               expressed or implied. By using this plugin, you agree that
13"               in no event will the copyright holder be liable for any damages
14"               resulting from the use of this software.
15"
16"  But be doers of the Word, and not only hearers, deluding your own selves {{{1
17"  (James 1:22 RSV)
18" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
19" Load Once: {{{1
20if &cp || exists("g:loaded_netrwPlugin")
21 finish
22endif
23let g:loaded_netrwPlugin = "v136"
24if v:version < 702
25 echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
26 finish
27endif
28let s:keepcpo = &cpo
29set cpo&vim
30
31" ---------------------------------------------------------------------
32" Public Interface: {{{1
33
34" Local Browsing: {{{2
35augroup FileExplorer
36 au!
37 au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
38 if has("win32") || has("win95") || has("win64") || has("win16")
39  au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>"))
40 endif
41augroup END
42
43" Network Browsing Reading Writing: {{{2
44augroup Network
45 au!
46 if has("win32") || has("win95") || has("win64") || has("win16")
47  au BufReadCmd  file://*		exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
48 else
49  au BufReadCmd  file://*		exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
50  au BufReadCmd  file://localhost/*	exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',""))|exe "bwipe ".fnameescape(substitute(expand("<amatch>"),'file://\(\k\+@\)\=','',''))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
51 endif
52 au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
53 au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "silent doau FileReadPost ".fnameescape(expand("<amatch>"))
54 au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau BufWritePost ".fnameescape(expand("<amatch>"))
55 au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau FileWritePost ".fnameescape(expand("<amatch>"))
56 try
57  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
58 catch /^Vim\%((\a\+)\)\=:E216/
59  au SourcePre   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
60 endtry
61augroup END
62
63" Commands: :Nread, :Nwrite, :NetUserPass {{{2
64com! -count=1 -nargs=*	Nread		call netrw#NetrwSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetrwRestorePosn()
65com! -range=% -nargs=*	Nwrite		call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn()
66com! -nargs=*		NetUserPass	call NetUserPass(<f-args>)
67com! -nargs=*	        Nsource		call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn()
68
69" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
70com! -nargs=* -bar -bang -count=0 -complete=dir	Explore		call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
71com! -nargs=* -bar -bang -count=0 -complete=dir	Sexplore	call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
72com! -nargs=* -bar -bang -count=0 -complete=dir	Hexplore	call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
73com! -nargs=* -bar -bang -count=0 -complete=dir	Vexplore	call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
74com! -nargs=* -bar       -count=0 -complete=dir	Texplore	call netrw#Explore(<count>,0,6        ,<q-args>)
75com! -nargs=* -bar -bang			Nexplore	call netrw#Explore(-1,0,0,<q-args>)
76com! -nargs=* -bar -bang			Pexplore	call netrw#Explore(-2,0,0,<q-args>)
77
78" Commands: NetrwSettings {{{2
79com! -nargs=0	NetrwSettings	call netrwSettings#NetrwSettings()
80com! -bang	NetrwClean	call netrw#NetrwClean(<bang>0)
81
82" Maps:
83if !exists("g:netrw_nogx") && maparg('g','n') == ""
84 if !hasmapto('<Plug>NetrwBrowseX')
85  nmap <unique> gx <Plug>NetrwBrowseX
86 endif
87 nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr>
88endif
89
90" ---------------------------------------------------------------------
91" LocalBrowse: {{{2
92fun! s:LocalBrowse(dirname)
93  " unfortunate interaction -- debugging calls can't be used here;
94  " the BufEnter event causes triggering when attempts to write to
95  " the DBG buffer are made.
96"  echomsg "dirname<".a:dirname.">"
97  if has("amiga")
98   " The check against '' is made for the Amiga, where the empty
99   " string is the current directory and not checking would break
100   " things such as the help command.
101   if a:dirname != '' && isdirectory(a:dirname)
102    silent! call netrw#LocalBrowseCheck(a:dirname)
103   endif
104  elseif isdirectory(a:dirname)
105"   echomsg "dirname<".dirname."> isdir"
106   silent! call netrw#LocalBrowseCheck(a:dirname)
107  endif
108  " not a directory, ignore it
109endfun
110
111" ---------------------------------------------------------------------
112" NetrwStatusLine: {{{1
113fun! NetrwStatusLine()
114"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
115  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")
116   let &stl= s:netrw_explore_stl
117   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
118   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
119   return ""
120  else
121   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
122  endif
123endfun
124
125" ------------------------------------------------------------------------
126" NetUserPass: set username and password for subsequent ftp transfer {{{1
127"   Usage:  :call NetUserPass()			-- will prompt for userid and password
128"	    :call NetUserPass("uid")		-- will prompt for password
129"	    :call NetUserPass("uid","password") -- sets global userid and password
130fun! NetUserPass(...)
131
132 " get/set userid
133 if a:0 == 0
134"  call Dfunc("NetUserPass(a:0<".a:0.">)")
135  if !exists("g:netrw_uid") || g:netrw_uid == ""
136   " via prompt
137   let g:netrw_uid= input('Enter username: ')
138  endif
139 else	" from command line
140"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
141  let g:netrw_uid= a:1
142 endif
143
144 " get password
145 if a:0 <= 1 " via prompt
146"  call Decho("a:0=".a:0." case <=1:")
147  let g:netrw_passwd= inputsecret("Enter Password: ")
148 else " from command line
149"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
150  let g:netrw_passwd=a:2
151 endif
152"  call Dret("NetUserPass")
153endfun
154
155" ------------------------------------------------------------------------
156" Modelines And Restoration: {{{1
157let &cpo= s:keepcpo
158unlet s:keepcpo
159" vim:ts=8 fdm=marker
160