1" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
2"            PLUGIN SECTION
3" Date:		Dec 06, 2012
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
23let g:loaded_netrwPlugin = "v148"
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 BufReadCmd *[/\\]	sil! call s:LocalBrowse(expand("<amatch>"))
38" au BufEnter *[^/\\]	sil! call s:LocalBrowse(expand("<amatch>"))
39" au VimEnter *[^/\\]	sil! call s:VimEnter(expand("<amatch>"))
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"  echomsg "dirname<".a:dirname.">"
96  if has("amiga")
97   " The check against '' is made for the Amiga, where the empty
98   " string is the current directory and not checking would break
99   " things such as the help command.
100   if a:dirname != '' && isdirectory(a:dirname)
101    sil! call netrw#LocalBrowseCheck(a:dirname)
102   endif
103  elseif isdirectory(a:dirname)
104"   echomsg "dirname<".dirname."> isdir"
105   sil! call netrw#LocalBrowseCheck(a:dirname)
106  endif
107  " not a directory, ignore it
108endfun
109
110" ---------------------------------------------------------------------
111" s:VimEnter: {{{2
112fun! s:VimEnter(dirname)
113  let curwin= winnr()
114  windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
115  exe curwin."wincmd w"
116endfun
117
118" ---------------------------------------------------------------------
119" NetrwStatusLine: {{{1
120fun! NetrwStatusLine()
121"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
122  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")
123   let &stl= s:netrw_explore_stl
124   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
125   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
126   return ""
127  else
128   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
129  endif
130endfun
131
132" ------------------------------------------------------------------------
133" NetUserPass: set username and password for subsequent ftp transfer {{{1
134"   Usage:  :call NetUserPass()			-- will prompt for userid and password
135"	    :call NetUserPass("uid")		-- will prompt for password
136"	    :call NetUserPass("uid","password") -- sets global userid and password
137fun! NetUserPass(...)
138
139 " get/set userid
140 if a:0 == 0
141"  call Dfunc("NetUserPass(a:0<".a:0.">)")
142  if !exists("g:netrw_uid") || g:netrw_uid == ""
143   " via prompt
144   let g:netrw_uid= input('Enter username: ')
145  endif
146 else	" from command line
147"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
148  let g:netrw_uid= a:1
149 endif
150
151 " get password
152 if a:0 <= 1 " via prompt
153"  call Decho("a:0=".a:0." case <=1:")
154  let g:netrw_passwd= inputsecret("Enter Password: ")
155 else " from command line
156"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
157  let g:netrw_passwd=a:2
158 endif
159"  call Dret("NetUserPass")
160endfun
161
162" ------------------------------------------------------------------------
163" Modelines And Restoration: {{{1
164let &cpo= s:keepcpo
165unlet s:keepcpo
166" vim:ts=8 fdm=marker
167