1482aaeb0SBram Moolenaar" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
2482aaeb0SBram Moolenaar"            PLUGIN PORTION
3a5792f58SBram Moolenaar" Date:		Oct 27, 2005
4482aaeb0SBram Moolenaar" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
5482aaeb0SBram Moolenaar" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
6482aaeb0SBram Moolenaar" Copyright:    Copyright (C) 1999-2005 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
20482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
21482aaeb0SBram Moolenaar" Load Once: {{{1
22482aaeb0SBram Moolenaarif exists("g:loaded_netrw")
23482aaeb0SBram Moolenaar finish
24482aaeb0SBram Moolenaarendif
258349fd7cSBram Moolenaarif v:version < 700
268349fd7cSBram Moolenaar echohl WarningMsg | echo "***netrw*** you need vim version 7.0 for this version of netrw" | echohl None
278349fd7cSBram Moolenaar finish
288349fd7cSBram Moolenaarendif
29482aaeb0SBram Moolenaarlet s:keepcpo= &cpo
30482aaeb0SBram Moolenaarset cpo&vim
31482aaeb0SBram Moolenaar
32482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
33482aaeb0SBram Moolenaar" Public Interface: {{{1
34482aaeb0SBram Moolenaar
35482aaeb0SBram Moolenaar" Local Browsing: {{{2
36482aaeb0SBram Moolenaaraugroup FileExplorer
37482aaeb0SBram Moolenaar au!
38*b8a7b560SBram Moolenaar au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
39482aaeb0SBram Moolenaaraugroup END
40482aaeb0SBram Moolenaar
41482aaeb0SBram Moolenaar" Network Browsing Reading Writing: {{{2
42482aaeb0SBram Moolenaaraugroup Network
43482aaeb0SBram Moolenaar au!
44482aaeb0SBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16")
45a5792f58SBram Moolenaar  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>"))
46482aaeb0SBram Moolenaar else
47a5792f58SBram Moolenaar  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>"))
48a5792f58SBram Moolenaar  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>"))
49482aaeb0SBram Moolenaar endif
50*b8a7b560SBram Moolenaar 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*b8a7b560SBram Moolenaar 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*b8a7b560SBram Moolenaar 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*b8a7b560SBram Moolenaar au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*		exe "silent doau FileWritePre ".expand("<amatch>")|exe "'[,']".'Nwrite "' .expand("<amatch>").'"'|exe "silent doau FileWritePost ".expand("<amatch>")
54482aaeb0SBram Moolenaaraugroup END
55482aaeb0SBram Moolenaar
56482aaeb0SBram Moolenaar" Commands: :Nread, :Nwrite, :NetUserPass {{{2
57482aaeb0SBram Moolenaarcom! -nargs=*		Nread		call netrw#NetSavePosn()<bar>call netrw#NetRead(<f-args>)<bar>call netrw#NetRestorePosn()
58482aaeb0SBram Moolenaarcom! -range=% -nargs=*	Nwrite		call netrw#NetSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetRestorePosn()
59482aaeb0SBram Moolenaarcom! -nargs=*		NetUserPass	call NetUserPass(<f-args>)
60482aaeb0SBram Moolenaar
61482aaeb0SBram Moolenaar" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
62482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0	Explore		call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
63482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0	Sexplore	call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
64482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0	Hexplore	call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
65482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0	Vexplore	call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
66482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang		Nexplore	call netrw#Explore(-1,0,0,<q-args>)
67482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang		Pexplore	call netrw#Explore(-2,0,0,<q-args>)
68482aaeb0SBram Moolenaar
69482aaeb0SBram Moolenaar" Commands: NetrwSettings {{{2
70482aaeb0SBram Moolenaarcom! -nargs=0 NetrwSettings :call netrwSettings#NetrwSettings()
71482aaeb0SBram Moolenaar
72*b8a7b560SBram Moolenaar" Maps:
73*b8a7b560SBram Moolenaarif !hasmapto('<Plug>NetrwBrowseX')
74*b8a7b560SBram Moolenaar nmap <unique> gx <Plug>NetrwBrowseX
75*b8a7b560SBram Moolenaarendif
76*b8a7b560SBram Moolenaarnno <silent> <Plug>NetrwBrowseX :call netrw#NetBrowseX(expand("<cWORD>"),0)<cr>
77*b8a7b560SBram Moolenaar
78482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
79482aaeb0SBram Moolenaar" LocalBrowse: {{{2
80482aaeb0SBram Moolenaarfun! s:LocalBrowse(dirname)
81482aaeb0SBram Moolenaar  " unfortunate interaction -- debugging calls can't be used here;
82482aaeb0SBram Moolenaar  " the BufEnter event causes triggering when attempts to write to
83482aaeb0SBram Moolenaar  " the DBG buffer are made.
84482aaeb0SBram Moolenaar  if isdirectory(a:dirname)
85*b8a7b560SBram Moolenaar   silent! call netrw#DirBrowse(a:dirname)
86482aaeb0SBram Moolenaar  endif
87482aaeb0SBram Moolenaar  " not a directory, ignore it
88482aaeb0SBram Moolenaarendfun
89482aaeb0SBram Moolenaar
90482aaeb0SBram Moolenaar" ---------------------------------------------------------------------
91482aaeb0SBram Moolenaar" NetrwStatusLine: {{{1
92482aaeb0SBram Moolenaarfun! NetrwStatusLine()
93482aaeb0SBram Moolenaar"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".")
94482aaeb0SBram 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")
95482aaeb0SBram Moolenaar   let &stl= s:netrw_explore_stl
96482aaeb0SBram Moolenaar   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
97482aaeb0SBram Moolenaar   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
98482aaeb0SBram Moolenaar   return ""
99482aaeb0SBram Moolenaar  else
100482aaeb0SBram Moolenaar   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
101482aaeb0SBram Moolenaar  endif
102482aaeb0SBram Moolenaarendfun
103482aaeb0SBram Moolenaar
104482aaeb0SBram Moolenaar" ------------------------------------------------------------------------
105482aaeb0SBram Moolenaar" NetUserPass: set username and password for subsequent ftp transfer {{{1
106482aaeb0SBram Moolenaar"   Usage:  :call NetUserPass()			-- will prompt for userid and password
107482aaeb0SBram Moolenaar"	    :call NetUserPass("uid")		-- will prompt for password
108482aaeb0SBram Moolenaar"	    :call NetUserPass("uid","password") -- sets global userid and password
109482aaeb0SBram Moolenaarfun! NetUserPass(...)
110482aaeb0SBram Moolenaar
111482aaeb0SBram Moolenaar " get/set userid
112482aaeb0SBram Moolenaar if a:0 == 0
113482aaeb0SBram Moolenaar"  call Dfunc("NetUserPass(a:0<".a:0.">)")
114482aaeb0SBram Moolenaar  if !exists("g:netrw_uid") || g:netrw_uid == ""
115482aaeb0SBram Moolenaar   " via prompt
116482aaeb0SBram Moolenaar   let g:netrw_uid= input('Enter username: ')
117482aaeb0SBram Moolenaar  endif
118482aaeb0SBram Moolenaar else	" from command line
119482aaeb0SBram Moolenaar"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
120482aaeb0SBram Moolenaar  let g:netrw_uid= a:1
121482aaeb0SBram Moolenaar endif
122482aaeb0SBram Moolenaar
123482aaeb0SBram Moolenaar " get password
124482aaeb0SBram Moolenaar if a:0 <= 1 " via prompt
125482aaeb0SBram Moolenaar"  call Decho("a:0=".a:0." case <=1:")
126482aaeb0SBram Moolenaar  let g:netrw_passwd= inputsecret("Enter Password: ")
127482aaeb0SBram Moolenaar else " from command line
128482aaeb0SBram Moolenaar"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
129482aaeb0SBram Moolenaar  let g:netrw_passwd=a:2
130482aaeb0SBram Moolenaar endif
131482aaeb0SBram Moolenaar"  call Dret("NetUserPass")
132482aaeb0SBram Moolenaarendfun
133482aaeb0SBram Moolenaar
134482aaeb0SBram Moolenaar" ------------------------------------------------------------------------
135482aaeb0SBram Moolenaar" NetReadFixup: this sort of function is typically written by the user {{{1
136482aaeb0SBram Moolenaar"               to handle extra junk that their system's ftp dumps
137482aaeb0SBram Moolenaar"               into the transfer.  This function is provided as an
138482aaeb0SBram Moolenaar"               example and as a fix for a Windows 95 problem: in my
139482aaeb0SBram Moolenaar"               experience, win95's ftp always dumped four blank lines
140482aaeb0SBram Moolenaar"               at the end of the transfer.
141482aaeb0SBram Moolenaarif has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
142482aaeb0SBram Moolenaar fun! NetReadFixup(method, line1, line2)
143482aaeb0SBram Moolenaar"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
144482aaeb0SBram Moolenaar   if method == 3   " ftp (no <.netrc>)
145482aaeb0SBram Moolenaar    let fourblanklines= line2 - 3
146482aaeb0SBram Moolenaar    silent fourblanklines.",".line2."g/^\s*/d"
147482aaeb0SBram Moolenaar   endif
148482aaeb0SBram Moolenaar"   call Dret("NetReadFixup")
149482aaeb0SBram Moolenaar endfun
150482aaeb0SBram Moolenaarendif
151482aaeb0SBram Moolenaar
152482aaeb0SBram Moolenaar" ------------------------------------------------------------------------
153482aaeb0SBram Moolenaar" Modelines And Restoration: {{{1
154482aaeb0SBram Moolenaarlet &cpo= s:keepcpo
155482aaeb0SBram Moolenaarunlet s:keepcpo
156482aaeb0SBram Moolenaar" vim:ts=8 fdm=marker
157