1" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
2"            PLUGIN PORTION
3" Date:		Oct 27, 2005
4" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
5" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
6" Copyright:    Copyright (C) 1999-2005 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
20" ---------------------------------------------------------------------
21" Load Once: {{{1
22if exists("g:loaded_netrw")
23 finish
24endif
25if v:version < 700
26 echohl WarningMsg | echo "***netrw*** you need vim version 7.0 for this version of netrw" | echohl None
27 finish
28endif
29let s:keepcpo= &cpo
30set cpo&vim
31
32" ---------------------------------------------------------------------
33" Public Interface: {{{1
34
35" Local Browsing: {{{2
36augroup FileExplorer
37 au!
38 au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
39augroup END
40
41" Network Browsing Reading Writing: {{{2
42augroup Network
43 au!
44 if has("win32") || has("win95") || has("win64") || has("win16")
45  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>"))
46 else
47  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>"))
48  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>"))
49 endif
50 au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<amatch>")|exe 'Nread 0r "'.expand("<amatch>").'"'|exe "silent doau BufReadPost ".expand("<amatch>")
51 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>")
52 au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*		exe "silent doau BufWritePre ".expand("<amatch>")|exe 'Nwrite "' .expand("<amatch>").'"'|exe "silent doau BufWritePost ".expand("<amatch>")
53 au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*		exe "silent doau FileWritePre ".expand("<amatch>")|exe "'[,']".'Nwrite "' .expand("<amatch>").'"'|exe "silent doau FileWritePost ".expand("<amatch>")
54augroup END
55
56" Commands: :Nread, :Nwrite, :NetUserPass {{{2
57com! -nargs=*		Nread		call netrw#NetSavePosn()<bar>call netrw#NetRead(<f-args>)<bar>call netrw#NetRestorePosn()
58com! -range=% -nargs=*	Nwrite		call netrw#NetSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetRestorePosn()
59com! -nargs=*		NetUserPass	call NetUserPass(<f-args>)
60
61" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
62com! -nargs=? -bar -bang -count=0	Explore		call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
63com! -nargs=? -bar -bang -count=0	Sexplore	call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
64com! -nargs=? -bar -bang -count=0	Hexplore	call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
65com! -nargs=? -bar -bang -count=0	Vexplore	call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
66com! -nargs=? -bar -bang		Nexplore	call netrw#Explore(-1,0,0,<q-args>)
67com! -nargs=? -bar -bang		Pexplore	call netrw#Explore(-2,0,0,<q-args>)
68
69" Commands: NetrwSettings {{{2
70com! -nargs=0 NetrwSettings :call netrwSettings#NetrwSettings()
71
72" Maps:
73if !hasmapto('<Plug>NetrwBrowseX')
74 nmap <unique> gx <Plug>NetrwBrowseX
75endif
76nno <silent> <Plug>NetrwBrowseX :call netrw#NetBrowseX(expand("<cWORD>"),0)<cr>
77
78" ---------------------------------------------------------------------
79" LocalBrowse: {{{2
80fun! s:LocalBrowse(dirname)
81  " unfortunate interaction -- debugging calls can't be used here;
82  " the BufEnter event causes triggering when attempts to write to
83  " the DBG buffer are made.
84  if isdirectory(a:dirname)
85   silent! call netrw#DirBrowse(a:dirname)
86  endif
87  " not a directory, ignore it
88endfun
89
90" ---------------------------------------------------------------------
91" NetrwStatusLine: {{{1
92fun! NetrwStatusLine()
93"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".")
94  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")
95   let &stl= s:netrw_explore_stl
96   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
97   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
98   return ""
99  else
100   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
101  endif
102endfun
103
104" ------------------------------------------------------------------------
105" NetUserPass: set username and password for subsequent ftp transfer {{{1
106"   Usage:  :call NetUserPass()			-- will prompt for userid and password
107"	    :call NetUserPass("uid")		-- will prompt for password
108"	    :call NetUserPass("uid","password") -- sets global userid and password
109fun! NetUserPass(...)
110
111 " get/set userid
112 if a:0 == 0
113"  call Dfunc("NetUserPass(a:0<".a:0.">)")
114  if !exists("g:netrw_uid") || g:netrw_uid == ""
115   " via prompt
116   let g:netrw_uid= input('Enter username: ')
117  endif
118 else	" from command line
119"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
120  let g:netrw_uid= a:1
121 endif
122
123 " get password
124 if a:0 <= 1 " via prompt
125"  call Decho("a:0=".a:0." case <=1:")
126  let g:netrw_passwd= inputsecret("Enter Password: ")
127 else " from command line
128"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
129  let g:netrw_passwd=a:2
130 endif
131"  call Dret("NetUserPass")
132endfun
133
134" ------------------------------------------------------------------------
135" NetReadFixup: this sort of function is typically written by the user {{{1
136"               to handle extra junk that their system's ftp dumps
137"               into the transfer.  This function is provided as an
138"               example and as a fix for a Windows 95 problem: in my
139"               experience, win95's ftp always dumped four blank lines
140"               at the end of the transfer.
141if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
142 fun! NetReadFixup(method, line1, line2)
143"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
144   if method == 3   " ftp (no <.netrc>)
145    let fourblanklines= line2 - 3
146    silent fourblanklines.",".line2."g/^\s*/d"
147   endif
148"   call Dret("NetReadFixup")
149 endfun
150endif
151
152" ------------------------------------------------------------------------
153" Modelines And Restoration: {{{1
154let &cpo= s:keepcpo
155unlet s:keepcpo
156" vim:ts=8 fdm=marker
157