1482aaeb0SBram Moolenaar" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
2dd2a3cdaSBram Moolenaar"            PLUGIN SECTION
35c73622aSBram Moolenaar" Date:		Aug 10, 2008
4dd2a3cdaSBram Moolenaar" Maintainer:	Charles E Campbell, Jr <[email protected]>
5482aaeb0SBram Moolenaar" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
6e37d50a5SBram Moolenaar" Copyright:    Copyright (C) 1999-2008 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" Load Once: {{{1
20dd2a3cdaSBram Moolenaarif &cp || exists("g:loaded_netrwPlugin")
21482aaeb0SBram Moolenaar finish
22482aaeb0SBram Moolenaarendif
23*00a927d6SBram Moolenaarlet g:loaded_netrwPlugin = "v138"
245c73622aSBram Moolenaarif v:version < 702
255c73622aSBram Moolenaar echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
268349fd7cSBram Moolenaar finish
278349fd7cSBram Moolenaarendif
28482aaeb0SBram Moolenaarlet s:keepcpo = &cpo
29482aaeb0SBram Moolenaarset cpo&vim
30482aaeb0SBram Moolenaar
31482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
32482aaeb0SBram Moolenaar" Public Interface: {{{1
33482aaeb0SBram Moolenaar
34482aaeb0SBram Moolenaar" Local Browsing: {{{2
35482aaeb0SBram Moolenaaraugroup FileExplorer
36482aaeb0SBram Moolenaar au!
37b8a7b560SBram Moolenaar au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
38*00a927d6SBram Moolenaar au VimEnter * silent! call s:VimEnter(expand("<amatch>"))
39dd2a3cdaSBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16")
40dd2a3cdaSBram Moolenaar  au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>"))
41dd2a3cdaSBram Moolenaar endif
42482aaeb0SBram Moolenaaraugroup END
43482aaeb0SBram Moolenaar
44482aaeb0SBram Moolenaar" Network Browsing Reading Writing: {{{2
45482aaeb0SBram Moolenaaraugroup Network
46482aaeb0SBram Moolenaar au!
47482aaeb0SBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16")
48e37d50a5SBram Moolenaar  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>")))
49482aaeb0SBram Moolenaar else
50e37d50a5SBram Moolenaar  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>")))
51e37d50a5SBram Moolenaar  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>")))
52482aaeb0SBram Moolenaar endif
535c73622aSBram Moolenaar 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>"))
545c73622aSBram Moolenaar 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>"))
55e37d50a5SBram Moolenaar 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>"))
56e37d50a5SBram Moolenaar 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>"))
57dd2a3cdaSBram Moolenaar try
58e37d50a5SBram Moolenaar  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
59dd2a3cdaSBram Moolenaar catch /^Vim\%((\a\+)\)\=:E216/
60e37d50a5SBram Moolenaar  au SourcePre   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
61dd2a3cdaSBram Moolenaar endtry
62482aaeb0SBram Moolenaaraugroup END
63482aaeb0SBram Moolenaar
64482aaeb0SBram Moolenaar" Commands: :Nread, :Nwrite, :NetUserPass {{{2
65f233048aSBram Moolenaarcom! -count=1 -nargs=*	Nread		call netrw#NetrwSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetrwRestorePosn()
66f233048aSBram Moolenaarcom! -range=% -nargs=*	Nwrite		call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn()
67482aaeb0SBram Moolenaarcom! -nargs=*		NetUserPass	call NetUserPass(<f-args>)
68f233048aSBram Moolenaarcom! -nargs=*	        Nsource		call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn()
69482aaeb0SBram Moolenaar
70482aaeb0SBram Moolenaar" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
71dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir	Explore		call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
72dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir	Sexplore	call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
73dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir	Hexplore	call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
74dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir	Vexplore	call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
75dd2a3cdaSBram Moolenaarcom! -nargs=* -bar       -count=0 -complete=dir	Texplore	call netrw#Explore(<count>,0,6        ,<q-args>)
76dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang			Nexplore	call netrw#Explore(-1,0,0,<q-args>)
77dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang			Pexplore	call netrw#Explore(-2,0,0,<q-args>)
78482aaeb0SBram Moolenaar
79482aaeb0SBram Moolenaar" Commands: NetrwSettings {{{2
80f233048aSBram Moolenaarcom! -nargs=0	NetrwSettings	call netrwSettings#NetrwSettings()
81f233048aSBram Moolenaarcom! -bang	NetrwClean	call netrw#NetrwClean(<bang>0)
82482aaeb0SBram Moolenaar
83b8a7b560SBram Moolenaar" Maps:
84dd2a3cdaSBram Moolenaarif !exists("g:netrw_nogx") && maparg('g','n') == ""
85b8a7b560SBram Moolenaar if !hasmapto('<Plug>NetrwBrowseX')
86b8a7b560SBram Moolenaar  nmap <unique> gx <Plug>NetrwBrowseX
87b8a7b560SBram Moolenaar endif
88f233048aSBram Moolenaar nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr>
89dd2a3cdaSBram Moolenaarendif
90b8a7b560SBram Moolenaar
91482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
92482aaeb0SBram Moolenaar" LocalBrowse: {{{2
93482aaeb0SBram Moolenaarfun! s:LocalBrowse(dirname)
94482aaeb0SBram Moolenaar  " unfortunate interaction -- debugging calls can't be used here;
95482aaeb0SBram Moolenaar  " the BufEnter event causes triggering when attempts to write to
96482aaeb0SBram Moolenaar  " the DBG buffer are made.
97dd2a3cdaSBram Moolenaar"  echomsg "dirname<".a:dirname.">"
98dd2a3cdaSBram Moolenaar  if has("amiga")
99dd2a3cdaSBram Moolenaar   " The check against '' is made for the Amiga, where the empty
100dd2a3cdaSBram Moolenaar   " string is the current directory and not checking would break
101dd2a3cdaSBram Moolenaar   " things such as the help command.
102dd2a3cdaSBram Moolenaar   if a:dirname != '' && isdirectory(a:dirname)
103dd2a3cdaSBram Moolenaar    silent! call netrw#LocalBrowseCheck(a:dirname)
104dd2a3cdaSBram Moolenaar   endif
105dd2a3cdaSBram Moolenaar  elseif isdirectory(a:dirname)
106dd2a3cdaSBram Moolenaar"   echomsg "dirname<".dirname."> isdir"
107dd2a3cdaSBram Moolenaar   silent! call netrw#LocalBrowseCheck(a:dirname)
108482aaeb0SBram Moolenaar  endif
109482aaeb0SBram Moolenaar  " not a directory, ignore it
110482aaeb0SBram Moolenaarendfun
111482aaeb0SBram Moolenaar
112482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
113*00a927d6SBram Moolenaar" s:VimEnter: {{{2
114*00a927d6SBram Moolenaarfun! s:VimEnter(dirname)
115*00a927d6SBram Moolenaar  windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
116*00a927d6SBram Moolenaar  1wincmd w
117*00a927d6SBram Moolenaarendfun
118*00a927d6SBram Moolenaar
119*00a927d6SBram Moolenaar" ---------------------------------------------------------------------
120482aaeb0SBram Moolenaar" NetrwStatusLine: {{{1
121482aaeb0SBram Moolenaarfun! NetrwStatusLine()
122af48b092SBram Moolenaar"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
123af48b092SBram 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")
124482aaeb0SBram Moolenaar   let &stl= s:netrw_explore_stl
125482aaeb0SBram Moolenaar   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
126482aaeb0SBram Moolenaar   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
127482aaeb0SBram Moolenaar   return ""
128482aaeb0SBram Moolenaar  else
129482aaeb0SBram Moolenaar   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
130482aaeb0SBram Moolenaar  endif
131482aaeb0SBram Moolenaarendfun
132482aaeb0SBram Moolenaar
133482aaeb0SBram Moolenaar" ------------------------------------------------------------------------
134482aaeb0SBram Moolenaar" NetUserPass: set username and password for subsequent ftp transfer {{{1
135482aaeb0SBram Moolenaar"   Usage:  :call NetUserPass()			-- will prompt for userid and password
136482aaeb0SBram Moolenaar"	    :call NetUserPass("uid")		-- will prompt for password
137482aaeb0SBram Moolenaar"	    :call NetUserPass("uid","password") -- sets global userid and password
138482aaeb0SBram Moolenaarfun! NetUserPass(...)
139482aaeb0SBram Moolenaar
140482aaeb0SBram Moolenaar " get/set userid
141482aaeb0SBram Moolenaar if a:0 == 0
142482aaeb0SBram Moolenaar"  call Dfunc("NetUserPass(a:0<".a:0.">)")
143482aaeb0SBram Moolenaar  if !exists("g:netrw_uid") || g:netrw_uid == ""
144482aaeb0SBram Moolenaar   " via prompt
145482aaeb0SBram Moolenaar   let g:netrw_uid= input('Enter username: ')
146482aaeb0SBram Moolenaar  endif
147482aaeb0SBram Moolenaar else	" from command line
148482aaeb0SBram Moolenaar"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
149482aaeb0SBram Moolenaar  let g:netrw_uid= a:1
150482aaeb0SBram Moolenaar endif
151482aaeb0SBram Moolenaar
152482aaeb0SBram Moolenaar " get password
153482aaeb0SBram Moolenaar if a:0 <= 1 " via prompt
154482aaeb0SBram Moolenaar"  call Decho("a:0=".a:0." case <=1:")
155482aaeb0SBram Moolenaar  let g:netrw_passwd= inputsecret("Enter Password: ")
156482aaeb0SBram Moolenaar else " from command line
157482aaeb0SBram Moolenaar"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
158482aaeb0SBram Moolenaar  let g:netrw_passwd=a:2
159482aaeb0SBram Moolenaar endif
160482aaeb0SBram Moolenaar"  call Dret("NetUserPass")
161482aaeb0SBram Moolenaarendfun
162482aaeb0SBram Moolenaar
163482aaeb0SBram Moolenaar" ------------------------------------------------------------------------
164482aaeb0SBram Moolenaar" Modelines And Restoration: {{{1
165482aaeb0SBram Moolenaarlet &cpo= s:keepcpo
166482aaeb0SBram Moolenaarunlet s:keepcpo
167482aaeb0SBram Moolenaar" vim:ts=8 fdm=marker
168