blob: 8013c8fdc25d8010153d3e27cc10ed880318fc80 [file] [log] [blame]
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001" netrw.vim: Handles file transfer and remote directory listing across a network
2" PLUGIN PORTION
Bram Moolenaar1e015462005-09-25 22:16:38 +00003" Last Change: Aug 29, 2005
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00004" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
Bram Moolenaar1e015462005-09-25 22:16:38 +00005" Version: 66
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00006" License: Vim License (see vim's :help license)
7" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
8" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
9" Permission is hereby granted to use and distribute this code,
10" with or without modifications, provided that this copyright
11" notice is copied with it. Like anything else that's free,
12" netrw.vim is provided *as is* and comes with no warranty
13" of any kind, either expressed or implied. By using this
14" plugin, you agree that in no event will the copyright
15" holder be liable for any damages resulting from the use
16" of this software.
17"
18" But be doers of the Word, and not only hearers, deluding your own selves {{{1
19" (James 1:22 RSV)
20" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
21
22" ---------------------------------------------------------------------
23" Load Once: {{{1
Bram Moolenaar1e015462005-09-25 22:16:38 +000024if exists("g:loaded_netrw") || &cp
25 finish
26endif
27if v:version < 600
28 echoerr "***netrw*** doesn't support Vim version ".v:version
29 finish
30endif
31let g:loaded_netrw = "v66"
32if v:version < 700
33 let loaded_explorer = 1
34endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +000035let s:keepcpo= &cpo
36set cpo&vim
37
38" ---------------------------------------------------------------------
39" Public Interface: {{{1
40
41" Local Browsing: {{{2
42augroup FileExplorer
43 au!
44 au BufEnter * call s:LocalBrowse(expand("<amatch>"))
45augroup END
46
47" Network Browsing Reading Writing: {{{2
48augroup Network
49 au!
50 if has("win32") || has("win95") || has("win64") || has("win16")
51 au BufReadCmd file://* exe "silent doau BufReadPre ".expand("<amatch>")|exe 'e '.substitute(expand("<amatch>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<amatch>")
52 else
53 au BufReadCmd file:///* exe "silent doau BufReadPre ".expand("<amatch>")|exe 'e /'.substitute(expand("<amatch>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<amatch>")
54 au BufReadCmd file://localhost/* exe "silent doau BufReadPre ".expand("<amatch>")|exe 'e /'.substitute(expand("<amatch>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<amatch>")
55 endif
56 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>")
57 au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau BufReadPre ".expand("<amatch>")|exe "Nread " .expand("<amatch>")|exe "silent doau FileReadPost ".expand("<amatch>")
58 au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "silent doau BufWritePre ".expand("<amatch>")|exe "Nwrite " .expand("<amatch>")|exe "silent doau BufWritePost ".expand("<amatch>")
59 au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "silent doau BufWritePre ".expand("<amatch>")|exe "'[,']Nwrite " .expand("<amatch>")|exe "silent doau FileWritePost ".expand("<amatch>")
60augroup END
61
62" Commands: :Nread, :Nwrite, :NetUserPass {{{2
63com! -nargs=* Nread call netrw#NetSavePosn()<bar>call netrw#NetRead(<f-args>)<bar>call netrw#NetRestorePosn()
64com! -range=% -nargs=* Nwrite call netrw#NetSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetRestorePosn()
65com! -nargs=* NetUserPass call NetUserPass(<f-args>)
66
67" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
68com! -nargs=? -bar -bang -count=0 Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
69com! -nargs=? -bar -bang -count=0 Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
70com! -nargs=? -bar -bang -count=0 Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
71com! -nargs=? -bar -bang -count=0 Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
72com! -nargs=? -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>)
73com! -nargs=? -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>)
74
75" Commands: NetrwSettings {{{2
76com! -nargs=0 NetrwSettings :call NetrwSettings#NetrwSettings()
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 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.
Bram Moolenaar1e015462005-09-25 22:16:38 +0000141if has("win95") && g:netrw_win95ftp
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000142 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
152let &cpo= s:keepcpo
153unlet s:keepcpo
154" ------------------------------------------------------------------------
155" Modelines: {{{1
156" vim:ts=8 fdm=marker