1482aaeb0SBram Moolenaar" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
2dd2a3cdaSBram Moolenaar"            PLUGIN SECTION
3*ff034194SBram Moolenaar" Date:		Dec 06, 2012
4*ff034194SBram Moolenaar" Maintainer:	Charles E Campbell <[email protected]>
5482aaeb0SBram Moolenaar" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
6*ff034194SBram Moolenaar" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{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*ff034194SBram Moolenaarlet g:loaded_netrwPlugin = "v148"
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!
37adc2182cSBram Moolenaar" au BufReadCmd *[/\\]	sil! call s:LocalBrowse(expand("<amatch>"))
38adc2182cSBram Moolenaar" au BufEnter *[^/\\]	sil! call s:LocalBrowse(expand("<amatch>"))
39adc2182cSBram Moolenaar" au VimEnter *[^/\\]	sil! call s:VimEnter(expand("<amatch>"))
40adc2182cSBram Moolenaar au BufEnter *	sil! call s:LocalBrowse(expand("<amatch>"))
41adc2182cSBram Moolenaar au VimEnter *	sil! call s:VimEnter(expand("<amatch>"))
42dd2a3cdaSBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16")
43adc2182cSBram Moolenaar  au BufEnter .* sil! call s:LocalBrowse(expand("<amatch>"))
44dd2a3cdaSBram Moolenaar endif
45482aaeb0SBram Moolenaaraugroup END
46482aaeb0SBram Moolenaar
47482aaeb0SBram Moolenaar" Network Browsing Reading Writing: {{{2
48482aaeb0SBram Moolenaaraugroup Network
49482aaeb0SBram Moolenaar au!
50adc2182cSBram Moolenaar au BufReadCmd   file://*		call netrw#FileUrlRead(expand("<amatch>"))
51*ff034194SBram Moolenaar 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*ff034194SBram Moolenaar 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*ff034194SBram Moolenaar 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*ff034194SBram Moolenaar 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>"))
55dd2a3cdaSBram Moolenaar try
561514667aSBram Moolenaar  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
57dd2a3cdaSBram Moolenaar catch /^Vim\%((\a\+)\)\=:E216/
581514667aSBram Moolenaar  au SourcePre   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
59dd2a3cdaSBram Moolenaar endtry
60482aaeb0SBram Moolenaaraugroup END
61482aaeb0SBram Moolenaar
62482aaeb0SBram Moolenaar" Commands: :Nread, :Nwrite, :NetUserPass {{{2
63f233048aSBram Moolenaarcom! -count=1 -nargs=*	Nread		call netrw#NetrwSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetrwRestorePosn()
64f233048aSBram Moolenaarcom! -range=% -nargs=*	Nwrite		call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn()
65482aaeb0SBram Moolenaarcom! -nargs=*		NetUserPass	call NetUserPass(<f-args>)
66f233048aSBram Moolenaarcom! -nargs=*	        Nsource		call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn()
67482aaeb0SBram Moolenaar
68482aaeb0SBram Moolenaar" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
69dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir	Explore		call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
70dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir	Sexplore	call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
71dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir	Hexplore	call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
72dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir	Vexplore	call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
73dd2a3cdaSBram Moolenaarcom! -nargs=* -bar       -count=0 -complete=dir	Texplore	call netrw#Explore(<count>,0,6        ,<q-args>)
74dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang			Nexplore	call netrw#Explore(-1,0,0,<q-args>)
75dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang			Pexplore	call netrw#Explore(-2,0,0,<q-args>)
76482aaeb0SBram Moolenaar
77482aaeb0SBram Moolenaar" Commands: NetrwSettings {{{2
78f233048aSBram Moolenaarcom! -nargs=0	NetrwSettings	call netrwSettings#NetrwSettings()
79f233048aSBram Moolenaarcom! -bang	NetrwClean	call netrw#NetrwClean(<bang>0)
80482aaeb0SBram Moolenaar
81b8a7b560SBram Moolenaar" Maps:
825ac3b1aaSBram Moolenaarif !exists("g:netrw_nogx") && maparg('gx','n') == ""
83b8a7b560SBram Moolenaar if !hasmapto('<Plug>NetrwBrowseX')
84b8a7b560SBram Moolenaar  nmap <unique> gx <Plug>NetrwBrowseX
85b8a7b560SBram Moolenaar endif
86f233048aSBram Moolenaar nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr>
87dd2a3cdaSBram Moolenaarendif
88b8a7b560SBram Moolenaar
89482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
90482aaeb0SBram Moolenaar" LocalBrowse: {{{2
91482aaeb0SBram Moolenaarfun! s:LocalBrowse(dirname)
92482aaeb0SBram Moolenaar  " unfortunate interaction -- debugging calls can't be used here;
93482aaeb0SBram Moolenaar  " the BufEnter event causes triggering when attempts to write to
94482aaeb0SBram Moolenaar  " the DBG buffer are made.
95dd2a3cdaSBram Moolenaar"  echomsg "dirname<".a:dirname.">"
96dd2a3cdaSBram Moolenaar  if has("amiga")
97dd2a3cdaSBram Moolenaar   " The check against '' is made for the Amiga, where the empty
98dd2a3cdaSBram Moolenaar   " string is the current directory and not checking would break
99dd2a3cdaSBram Moolenaar   " things such as the help command.
100dd2a3cdaSBram Moolenaar   if a:dirname != '' && isdirectory(a:dirname)
101adc2182cSBram Moolenaar    sil! call netrw#LocalBrowseCheck(a:dirname)
102dd2a3cdaSBram Moolenaar   endif
103dd2a3cdaSBram Moolenaar  elseif isdirectory(a:dirname)
104dd2a3cdaSBram Moolenaar"   echomsg "dirname<".dirname."> isdir"
105adc2182cSBram Moolenaar   sil! call netrw#LocalBrowseCheck(a:dirname)
106482aaeb0SBram Moolenaar  endif
107482aaeb0SBram Moolenaar  " not a directory, ignore it
108482aaeb0SBram Moolenaarendfun
109482aaeb0SBram Moolenaar
110482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
11100a927d6SBram Moolenaar" s:VimEnter: {{{2
11200a927d6SBram Moolenaarfun! s:VimEnter(dirname)
113477db060SBram Moolenaar  let curwin= winnr()
11400a927d6SBram Moolenaar  windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
115477db060SBram Moolenaar  exe curwin."wincmd w"
11600a927d6SBram Moolenaarendfun
11700a927d6SBram Moolenaar
11800a927d6SBram Moolenaar" ---------------------------------------------------------------------
119482aaeb0SBram Moolenaar" NetrwStatusLine: {{{1
120482aaeb0SBram Moolenaarfun! NetrwStatusLine()
121af48b092SBram Moolenaar"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
122af48b092SBram 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")
123482aaeb0SBram Moolenaar   let &stl= s:netrw_explore_stl
124482aaeb0SBram Moolenaar   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
125482aaeb0SBram Moolenaar   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
126482aaeb0SBram Moolenaar   return ""
127482aaeb0SBram Moolenaar  else
128482aaeb0SBram Moolenaar   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
129482aaeb0SBram Moolenaar  endif
130482aaeb0SBram Moolenaarendfun
131482aaeb0SBram Moolenaar
132482aaeb0SBram Moolenaar" ------------------------------------------------------------------------
133482aaeb0SBram Moolenaar" NetUserPass: set username and password for subsequent ftp transfer {{{1
134482aaeb0SBram Moolenaar"   Usage:  :call NetUserPass()			-- will prompt for userid and password
135482aaeb0SBram Moolenaar"	    :call NetUserPass("uid")		-- will prompt for password
136482aaeb0SBram Moolenaar"	    :call NetUserPass("uid","password") -- sets global userid and password
137482aaeb0SBram Moolenaarfun! NetUserPass(...)
138482aaeb0SBram Moolenaar
139482aaeb0SBram Moolenaar " get/set userid
140482aaeb0SBram Moolenaar if a:0 == 0
141482aaeb0SBram Moolenaar"  call Dfunc("NetUserPass(a:0<".a:0.">)")
142482aaeb0SBram Moolenaar  if !exists("g:netrw_uid") || g:netrw_uid == ""
143482aaeb0SBram Moolenaar   " via prompt
144482aaeb0SBram Moolenaar   let g:netrw_uid= input('Enter username: ')
145482aaeb0SBram Moolenaar  endif
146482aaeb0SBram Moolenaar else	" from command line
147482aaeb0SBram Moolenaar"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
148482aaeb0SBram Moolenaar  let g:netrw_uid= a:1
149482aaeb0SBram Moolenaar endif
150482aaeb0SBram Moolenaar
151482aaeb0SBram Moolenaar " get password
152482aaeb0SBram Moolenaar if a:0 <= 1 " via prompt
153482aaeb0SBram Moolenaar"  call Decho("a:0=".a:0." case <=1:")
154482aaeb0SBram Moolenaar  let g:netrw_passwd= inputsecret("Enter Password: ")
155482aaeb0SBram Moolenaar else " from command line
156482aaeb0SBram Moolenaar"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
157482aaeb0SBram Moolenaar  let g:netrw_passwd=a:2
158482aaeb0SBram Moolenaar endif
159482aaeb0SBram Moolenaar"  call Dret("NetUserPass")
160482aaeb0SBram Moolenaarendfun
161482aaeb0SBram Moolenaar
162482aaeb0SBram Moolenaar" ------------------------------------------------------------------------
163482aaeb0SBram Moolenaar" Modelines And Restoration: {{{1
164482aaeb0SBram Moolenaarlet &cpo= s:keepcpo
165482aaeb0SBram Moolenaarunlet s:keepcpo
166482aaeb0SBram Moolenaar" vim:ts=8 fdm=marker
167