1" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
2"            PLUGIN SECTION
3" Date:		Apr 30, 2013
4" Maintainer:	Charles E Campbell <[email protected]>
5" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
6" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{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
23"DechoTabOn
24let g:loaded_netrwPlugin = "v149"
25if v:version < 702
26 echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
27 finish
28endif
29let s:keepcpo = &cpo
30set cpo&vim
31"DechoTabOn
32
33" ---------------------------------------------------------------------
34" Public Interface: {{{1
35
36" Local Browsing: {{{2
37augroup FileExplorer
38 au!
39 " SEE Benzinger problem...
40 au BufEnter *	sil! call s:LocalBrowse(expand("<amatch>"))
41 au VimEnter *	sil! call s:VimEnter(expand("<amatch>"))
42 if has("win32") || has("win95") || has("win64") || has("win16")
43  au BufEnter .* sil! call s:LocalBrowse(expand("<amatch>"))
44 endif
45augroup END
46
47" Network Browsing Reading Writing: {{{2
48augroup Network
49 au!
50 au BufReadCmd   file://*									call netrw#FileUrlRead(expand("<amatch>"))
51 au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe "sil doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "sil doau BufReadPost ".fnameescape(expand("<amatch>"))
52 au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe "sil doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "sil doau FileReadPost ".fnameescape(expand("<amatch>"))
53 au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*			exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>"))
54 au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*			exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>"))
55 try
56  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
57 catch /^Vim\%((\a\+)\)\=:E216/
58  au SourcePre   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
59 endtry
60augroup END
61
62" Commands: :Nread, :Nwrite, :NetUserPass {{{2
63com! -count=1 -nargs=*	Nread		call netrw#NetrwSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetrwRestorePosn()
64com! -range=% -nargs=*	Nwrite		call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn()
65com! -nargs=*		NetUserPass	call NetUserPass(<f-args>)
66com! -nargs=*	        Nsource		call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn()
67
68" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
69com! -nargs=* -bar -bang -count=0 -complete=dir	Explore		call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
70com! -nargs=* -bar -bang -count=0 -complete=dir	Sexplore	call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
71com! -nargs=* -bar -bang -count=0 -complete=dir	Hexplore	call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
72com! -nargs=* -bar -bang -count=0 -complete=dir	Vexplore	call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
73com! -nargs=* -bar       -count=0 -complete=dir	Texplore	call netrw#Explore(<count>,0,6        ,<q-args>)
74com! -nargs=* -bar -bang			Nexplore	call netrw#Explore(-1,0,0,<q-args>)
75com! -nargs=* -bar -bang			Pexplore	call netrw#Explore(-2,0,0,<q-args>)
76
77" Commands: NetrwSettings {{{2
78com! -nargs=0	NetrwSettings	call netrwSettings#NetrwSettings()
79com! -bang	NetrwClean	call netrw#NetrwClean(<bang>0)
80
81" Maps:
82if !exists("g:netrw_nogx") && maparg('gx','n') == ""
83 if !hasmapto('<Plug>NetrwBrowseX')
84  nmap <unique> gx <Plug>NetrwBrowseX
85 endif
86 nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr>
87endif
88
89" ---------------------------------------------------------------------
90" LocalBrowse: {{{2
91fun! s:LocalBrowse(dirname)
92  " unfortunate interaction -- debugging calls can't be used here;
93  " the BufEnter event causes triggering when attempts to write to
94  " the DBG buffer are made.
95  if !exists("s:vimentered")
96   return
97  endif
98"  call Decho("s:LocalBrowse(dirname<".a:dirname.">){")
99"  echomsg "dirname<".a:dirname.">"
100  if has("amiga")
101   " The check against '' is made for the Amiga, where the empty
102   " string is the current directory and not checking would break
103   " things such as the help command.
104"   call Decho("(LocalBrowse) dirname<".a:dirname.">  (amiga)")
105   if a:dirname != '' && isdirectory(a:dirname)
106    sil! call netrw#LocalBrowseCheck(a:dirname)
107   endif
108  elseif isdirectory(a:dirname)
109"   echomsg "dirname<".dirname."> isdir"
110"   call Decho("(LocalBrowse) dirname<".a:dirname.">  (not amiga)")
111   sil! call netrw#LocalBrowseCheck(a:dirname)
112  endif
113  " not a directory, ignore it
114"  call Decho("|return s:LocalBrowse }")
115endfun
116
117" ---------------------------------------------------------------------
118" s:VimEnter: {{{2
119fun! s:VimEnter(dirname)
120"  call Decho("VimEnter(dirname<".a:dirname.">){")
121  let curwin       = winnr()
122  let s:vimentered = 1
123  windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
124  exe curwin."wincmd w"
125"  call Decho("|return VimEnter }")
126endfun
127
128" ---------------------------------------------------------------------
129" NetrwStatusLine: {{{1
130fun! NetrwStatusLine()
131"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
132  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")
133   let &stl= s:netrw_explore_stl
134   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
135   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
136   return ""
137  else
138   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
139  endif
140endfun
141
142" ------------------------------------------------------------------------
143" NetUserPass: set username and password for subsequent ftp transfer {{{1
144"   Usage:  :call NetUserPass()			-- will prompt for userid and password
145"	    :call NetUserPass("uid")		-- will prompt for password
146"	    :call NetUserPass("uid","password") -- sets global userid and password
147fun! NetUserPass(...)
148
149 " get/set userid
150 if a:0 == 0
151"  call Dfunc("NetUserPass(a:0<".a:0.">)")
152  if !exists("g:netrw_uid") || g:netrw_uid == ""
153   " via prompt
154   let g:netrw_uid= input('Enter username: ')
155  endif
156 else	" from command line
157"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
158  let g:netrw_uid= a:1
159 endif
160
161 " get password
162 if a:0 <= 1 " via prompt
163"  call Decho("a:0=".a:0." case <=1:")
164  let g:netrw_passwd= inputsecret("Enter Password: ")
165 else " from command line
166"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
167  let g:netrw_passwd=a:2
168 endif
169"  call Dret("NetUserPass")
170endfun
171
172" ------------------------------------------------------------------------
173" Modelines And Restoration: {{{1
174let &cpo= s:keepcpo
175unlet s:keepcpo
176" vim:ts=8 fdm=marker
177