blob: e077e25e743639c3d8d794f0bb1b2e6f0eef9bf4 [file] [log] [blame]
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001" netrw.vim: Handles file transfer and remote directory listing across a network
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002" AUTOLOAD PORTION
3" Last Change: Aug 16, 2005
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00004" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00005" Version: 63
6" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
7" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
Bram Moolenaar572cb562005-08-05 21:35:02 +00008" Permission is hereby granted to use and distribute this code,
9" with or without modifications, provided that this copyright
10" notice is copied with it. Like anything else that's free,
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +000011" netrw.vim is provided *as is* and comes with no warranty
12" of any kind, either expressed or implied. By using this
13" plugin, you agree that in no event will the copyright
14" holder be liable for any damages resulting from the use
15" of this software.
Bram Moolenaar071d4272004-06-13 20:20:40 +000016"
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +000017" But be doers of the Word, and not only hearers, deluding your own selves {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000018" (James 1:22 RSV)
19" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Bram Moolenaar488c6512005-08-11 20:09:58 +000020let s:keepcpo= &cpo
Bram Moolenaar071d4272004-06-13 20:20:40 +000021set cpo&vim
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +000022" call Decho("doing autoload/netrw.vim")
Bram Moolenaar071d4272004-06-13 20:20:40 +000023
24" ---------------------------------------------------------------------
25" Default values for global netrw variables {{{1
26if !exists("g:netrw_ftpmode")
27 let g:netrw_ftpmode= "binary"
28endif
29if !exists("g:netrw_win95ftp")
30 let g:netrw_win95ftp= 1
31endif
32if !exists("g:netrw_cygwin")
Bram Moolenaard4755bb2004-09-02 19:12:26 +000033 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +000034 if &shell == "bash"
35 let g:netrw_cygwin= 1
36 else
37 let g:netrw_cygwin= 0
38 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000039 else
40 let g:netrw_cygwin= 0
41 endif
42endif
Bram Moolenaar843ee412004-06-30 16:16:41 +000043if !exists("g:netrw_list_cmd")
44 if executable("ssh")
45 " provide a default listing command
46 let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
47 else
Bram Moolenaar83bab712005-08-01 21:58:57 +000048" call Decho("ssh is not executable, can't do remote directory exploring with ssh")
Bram Moolenaar843ee412004-06-30 16:16:41 +000049 let g:netrw_list_cmd= ""
50 endif
51endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +000052if !exists("g:netrw_ftp_list_cmd")
53 if has("unix") || exists("g:netrw_cygwin")
54 let g:netrw_ftp_list_cmd= "ls -lF"
55 else
56 let g:netrw_ftp_list_cmd= "dir"
57 endif
58endif
Bram Moolenaar843ee412004-06-30 16:16:41 +000059if !exists("g:netrw_rm_cmd")
60 let g:netrw_rm_cmd = "ssh HOSTNAME rm"
61endif
62if !exists("g:netrw_rmf_cmd")
63 let g:netrw_rmf_cmd = "ssh HOSTNAME rm -f"
64endif
65if !exists("g:netrw_rmdir_cmd")
66 let g:netrw_rmdir_cmd = "ssh HOSTNAME rmdir"
67endif
68if !exists("g:netrw_rename_cmd")
69 let g:netrw_rename_cmd= "ssh HOSTNAME mv"
70endif
71if exists("g:netrw_silent") && g:netrw_silent != 0
72 let g:netrw_silentxfer= "silent "
73else
74 let g:netrw_silentxfer= ""
75endif
76if !exists("g:netrw_winsize")
77 let g:netrw_winsize= ""
78endif
79if !exists("g:netrw_list_hide")
80 let g:netrw_list_hide= ""
81endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +000082if !exists("g:netrw_sort_by")
83 " alternatives: date size
84 let g:netrw_sort_by= "name"
85endif
86if !exists("g:netrw_sort_sequence")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +000087 let g:netrw_sort_sequence= '[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +000088endif
89if !exists("g:netrw_sort_direction")
90 " alternative: reverse (z y x ...)
91 let g:netrw_sort_direction= "normal"
92endif
Bram Moolenaar8299df92004-07-10 09:47:34 +000093if !exists("g:netrw_longlist") || g:netrw_longlist == 0
94 let g:netrw_longlist= 0
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +000095 let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
Bram Moolenaar8299df92004-07-10 09:47:34 +000096else
97 let g:netrw_longlist= 1
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +000098 let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa -l"
99endif
100if !exists("g:netrw_list_cmd")
Bram Moolenaar8299df92004-07-10 09:47:34 +0000101endif
102if !exists("g:netrw_timefmt")
103 let g:netrw_timefmt= "%c"
104endif
105if !exists("g:netrw_local_rmdir")
106 let g:netrw_local_rmdir= "rmdir"
107endif
Bram Moolenaar8299df92004-07-10 09:47:34 +0000108if !exists("g:netrw_local_mkdir")
109 let g:netrw_local_mkdir= "mkdir"
110endif
111if !exists("g:netrw_mkdir_cmd")
112 let g:netrw_mkdir_cmd= "ssh HOSTNAME mkdir"
113endif
Bram Moolenaar269ec652004-07-29 08:43:53 +0000114if !exists("g:netrw_hide")
115 let g:netrw_hide= 1
116endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000117if !exists("g:netrw_ftp_browse_reject")
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000118 let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$'
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000119endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000120if !exists("g:netrw_ssh_browse_reject")
121 let g:netrw_ssh_browse_reject='^total\s\+\d\+$'
122endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000123if !exists("g:netrw_keepdir")
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000124 let g:netrw_keepdir= 1
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000125endif
126if !exists("s:netrw_cd_escape")
127 if has("win32") || has("win95") || has("win64") || has("win16")
128 let s:netrw_cd_escape="#% "
129 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000130 let s:netrw_cd_escape="[]#*$%'\" ?`!&();<>\\"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000131 endif
132endif
133if !exists("s:netrw_glob_escape")
134 if has("win32") || has("win95") || has("win64") || has("win16")
135 let s:netrw_glob_escape= ""
136 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000137 let s:netrw_glob_escape= '[]*?`{~$'
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000138 endif
139endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000140if !exists("g:netrw_alto")
141 let g:netrw_alto= 0
142endif
143if !exists("g:netrw_altv")
144 let g:netrw_altv= 0
145endif
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000146if !exists("g:netrw_maxfilenamelen")
147 let g:netrw_maxfilenamelen= 32
148endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000149if !exists("g:netrw_dirhistmax")
150 let g:netrw_dirhistmax= 10
151endif
152if !exists("g:NETRW_DIRHIST_CNT")
153 let g:NETRW_DIRHIST_CNT= 0
154endif
Bram Moolenaar8299df92004-07-10 09:47:34 +0000155
156" BufEnter event ignored by decho when following variable is true
157" Has a side effect that doau BufReadPost doesn't work, so
158" files read by network transfer aren't appropriately highlighted.
159"let g:decho_bufenter = 1 "Decho
Bram Moolenaar071d4272004-06-13 20:20:40 +0000160
161" ---------------------------------------------------------------------
162" Default values for global protocol variables {{{1
163if !exists("g:netrw_rcp_cmd")
164 let g:netrw_rcp_cmd = "rcp"
165endif
166if !exists("g:netrw_ftp_cmd")
167 let g:netrw_ftp_cmd = "ftp"
168endif
169if !exists("g:netrw_scp_cmd")
170 let g:netrw_scp_cmd = "scp -q"
171endif
172if !exists("g:netrw_sftp_cmd")
173 let g:netrw_sftp_cmd = "sftp"
174endif
175if !exists("g:netrw_http_cmd")
176 if executable("wget")
177 let g:netrw_http_cmd = "wget -q -O"
178 elseif executable("fetch")
179 let g:netrw_http_cmd = "fetch -o"
180 else
181 let g:netrw_http_cmd = ""
182 endif
183endif
184if !exists("g:netrw_dav_cmd")
185 let g:netrw_dav_cmd = "cadaver"
186endif
187if !exists("g:netrw_rsync_cmd")
188 let g:netrw_rsync_cmd = "rsync"
189endif
190if !exists("g:netrw_fetch_cmd")
191 if executable("fetch")
192 let g:netrw_fetch_cmd = "fetch -o"
193 else
194 let g:netrw_fetch_cmd = ""
195 endif
196endif
197
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000198if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199 \ && exists("g:netrw_use_nt_rcp")
200 \ && g:netrw_use_nt_rcp
201 \ && executable( $SystemRoot .'/system32/rcp.exe')
202 let s:netrw_has_nt_rcp = 1
203 let s:netrw_rcpmode = '-b'
204 else
205 let s:netrw_has_nt_rcp = 0
206 let s:netrw_rcpmode = ''
207endif
208
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209" ------------------------------------------------------------------------
210" NetSavePosn: saves position of cursor on screen {{{1
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000211fun! netrw#NetSavePosn()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000212" call Dfunc("NetSavePosn()")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213 " Save current line and column
Bram Moolenaar488c6512005-08-11 20:09:58 +0000214 let w:netrw_winnr= winnr()
215 let w:netrw_line = line(".")
216 let w:netrw_col = virtcol(".")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217
218 " Save top-of-screen line
219 norm! H0
Bram Moolenaar488c6512005-08-11 20:09:58 +0000220 let w:netrw_hline= line(".")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000222 call netrw#NetRestorePosn()
Bram Moolenaar488c6512005-08-11 20:09:58 +0000223" call Dret("NetSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000224endfun
225
226" ------------------------------------------------------------------------
227" NetRestorePosn: restores the cursor and file position as saved by NetSavePosn() {{{1
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000228fun! netrw#NetRestorePosn()
Bram Moolenaar488c6512005-08-11 20:09:58 +0000229" call Dfunc("NetRestorePosn() winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
Bram Moolenaar572cb562005-08-05 21:35:02 +0000230 let eikeep= &ei
231 set ei=all
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232
Bram Moolenaar81695252004-12-29 20:58:21 +0000233 " restore window
Bram Moolenaar488c6512005-08-11 20:09:58 +0000234" call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
235 exe "silent! ".w:netrw_winnr."wincmd w"
Bram Moolenaar572cb562005-08-05 21:35:02 +0000236" if v:shell_error == 0
237" " as suggested by Bram M: redraw on no error
238" " allows protocol error messages to remain visible
239" redraw!
240" endif
Bram Moolenaar81695252004-12-29 20:58:21 +0000241
Bram Moolenaar071d4272004-06-13 20:20:40 +0000242 " restore top-of-screen line
Bram Moolenaar488c6512005-08-11 20:09:58 +0000243" call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
244 exe "norm! ".w:netrw_hline."G0z\<CR>"
Bram Moolenaar81695252004-12-29 20:58:21 +0000245
Bram Moolenaar071d4272004-06-13 20:20:40 +0000246 " restore position
Bram Moolenaar488c6512005-08-11 20:09:58 +0000247" call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
248 exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000249
Bram Moolenaar572cb562005-08-05 21:35:02 +0000250 let &ei= eikeep
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000251" call Dret("NetRestorePosn")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000252endfun
253
254" ------------------------------------------------------------------------
255" NetRead: responsible for reading a file over the net {{{1
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000256fun! netrw#NetRead(...)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000257" call Dfunc("NetRead(a:1<".a:1.">)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000258
259 " save options
260 call s:NetOptionSave()
261
262 " Special Exception: if a file is named "0r", then
263 " "0r" will be used to read the
264 " following files instead of "r"
265 if a:0 == 0
266 let readcmd= "r"
267 let ichoice= 0
268 elseif a:1 == "0r"
269 let readcmd = "0r"
270 let ichoice = 2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000272 let readcmd = "r"
273 let ichoice = 1
274 endif
275
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000276 " get name of a temporary file and set up shell-quoting character
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000277 let tmpfile= tempname()
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000278 if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
279 echohl Error | echo "***netrw*** your ".substitute(tmpfile,'[^/]\+$','','e')." directory is missing!"
280 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
281" call Dret("NetRead")
282 return
283 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000284
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000285" call Decho("ichoice=".ichoice." readcmd<".readcmd.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000286 while ichoice <= a:0
287
288 " attempt to repeat with previous host-file-etc
289 if exists("b:netrw_lastfile") && a:0 == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000290" call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000291 let choice = b:netrw_lastfile
292 let ichoice= ichoice + 1
293
294 else
295 exe "let choice= a:" . ichoice
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000296" call Decho("no lastfile: choice<" . choice . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000297
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000298 if match(choice,"?") == 0
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000299 " give help
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000300 echomsg 'NetRead Usage:'
301 echomsg ':Nread machine:path uses rcp'
302 echomsg ':Nread "machine path" uses ftp with <.netrc>'
303 echomsg ':Nread "machine id password path" uses ftp'
304 echomsg ':Nread dav://machine[:port]/path uses cadaver'
305 echomsg ':Nread fetch://machine/path uses fetch'
306 echomsg ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>'
307 echomsg ':Nread http://[user@]machine/path uses http wget'
308 echomsg ':Nread rcp://[user@]machine/path uses rcp'
309 echomsg ':Nread rsync://machine[:port]/path uses rsync'
310 echomsg ':Nread scp://[user@]machine[[:#]port]/path uses scp'
311 echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000312 break
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000313
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000314 elseif match(choice,"^\"") != -1
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000315 " Reconstruct Choice if choice starts with '"'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000316" call Decho("reconstructing choice")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000317 if match(choice,"\"$") != -1
318 " case "..."
319 let choice=strpart(choice,1,strlen(choice)-2)
320 else
321 " case "... ... ..."
322 let choice = strpart(choice,1,strlen(choice)-1)
323 let wholechoice = ""
324
325 while match(choice,"\"$") == -1
326 let wholechoice = wholechoice . " " . choice
327 let ichoice = ichoice + 1
328 if ichoice > a:0
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000329 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000330 echohl Error | echo "***netrw*** Unbalanced string in filename '". wholechoice ."'" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000331 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000332 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000333" call Dret("NetRead")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000334 return
335 endif
336 let choice= a:{ichoice}
337 endwhile
338 let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
339 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000340 endif
341 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000342
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000343" call Decho("choice<" . choice . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000344 let ichoice= ichoice + 1
345
346 " fix up windows urls
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000347 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000348 let choice = substitute(choice,'\\','/','ge')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000349" call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000350
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000351 exe 'lcd ' . fnamemodify(tmpfile,':h')
352 let tmpfile = fnamemodify(tmpfile,':t')
Bram Moolenaar69a7cb42004-06-20 12:51:53 +0000353 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000354
355 " Determine method of read (ftp, rcp, etc)
356 call s:NetMethod(choice)
357
Bram Moolenaar843ee412004-06-30 16:16:41 +0000358 " Check if NetBrowse() should be handling this request
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000359" call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000360 if choice =~ "^.*[\/]$"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000361 keepjumps call s:NetBrowse(choice)
362" call Dret("NetRead")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000363 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000364 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000365
366 " ============
367 " Perform Read
368 " ============
369
370 ".........................................
371 " rcp: NetRead Method #1
372 if b:netrw_method == 1 " read with rcp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000373" call Decho("read via rcp (method #1)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000374 " ER: noting done with g:netrw_uid yet?
375 " ER: on Win2K" rcp machine[.user]:file tmpfile
376 " ER: if machine contains '.' adding .user is required (use $USERNAME)
377 " ER: the tmpfile is full path: rcp sees C:\... as host C
378 if s:netrw_has_nt_rcp == 1
379 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
380 let uid_machine = g:netrw_machine .'.'. g:netrw_uid
381 else
382 " Any way needed it machine contains a '.'
383 let uid_machine = g:netrw_machine .'.'. $USERNAME
384 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000385 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000386 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
387 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
388 else
389 let uid_machine = g:netrw_machine
390 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000391 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000392" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000393 exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
394 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
395 let b:netrw_lastfile = choice
396
397 ".........................................
398 " ftp + <.netrc>: NetRead Method #2
399 elseif b:netrw_method == 2 " read with ftp + <.netrc>
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000400" call Decho("read via ftp+.netrc (method #2)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000401 let netrw_fname= b:netrw_fname
402 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000403 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000404 exe "put ='".g:netrw_ftpmode."'"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000405 exe "put ='"."get ".netrw_fname." ".tmpfile."'"
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000406 if exists("g:netrw_port") && g:netrw_port != ""
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000407" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000408 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
409 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000410" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000411 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
412 endif
413 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
Bram Moolenaar83bab712005-08-01 21:58:57 +0000414 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000415 let debugkeep= &debug
416 set debug=msg
Bram Moolenaar572cb562005-08-05 21:35:02 +0000417 echohl Error | echo "***netrw*** ".getline(1) | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000418 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000419 let &debug= debugkeep
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000420 endif
421 bd!
422 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
423 let b:netrw_lastfile = choice
424
425 ".........................................
426 " ftp + machine,id,passwd,filename: NetRead Method #3
427 elseif b:netrw_method == 3 " read with ftp + machine, id, passwd, and fname
428 " Construct execution string (four lines) which will be passed through filter
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000429" call Decho("read via ftp+mipf (method #3)")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000430 let netrw_fname= b:netrw_fname
431 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000432 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000433 if exists("g:netrw_port") && g:netrw_port != ""
434 put ='open '.g:netrw_machine.' '.g:netrw_port
435 else
436 put ='open '.g:netrw_machine
437 endif
438
439 if exists("g:netrw_ftp") && g:netrw_ftp == 1
440 put =g:netrw_uid
441 put =g:netrw_passwd
442 else
443 put ='user '.g:netrw_uid.' '.g:netrw_passwd
444 endif
445
446 if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
447 put =g:netrw_ftpmode
448 endif
449 put ='get '.netrw_fname.' '.tmpfile
450
451 " perform ftp:
452 " -i : turns off interactive prompting from ftp
453 " -n unix : DON'T use <.netrc>, even though it exists
454 " -n win32: quit being obnoxious about password
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000455" call Decho('performing ftp -i -n')
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000456 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000457" call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000458 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
459 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
460 if getline(1) !~ "^$"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000461" call Decho("error<".getline(1).">")
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000462 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000463 echohl Error | echo "***netrw*** ".getline(1) | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000464 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000465 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000466 endif
467 bd!
468 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
469 let b:netrw_lastfile = choice
470
471 ".........................................
472 " scp: NetRead Method #4
473 elseif b:netrw_method == 4 " read with scp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000474" call Decho("read via scp (method #4)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000475 if exists("g:netrw_port") && g:netrw_port != ""
476 let useport= " -P ".g:netrw_port
477 else
478 let useport= ""
479 endif
480 if g:netrw_cygwin == 1
481 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000482" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000483 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
484 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000485" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000486 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
487 endif
488 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
489 let b:netrw_lastfile = choice
490
491 ".........................................
492 elseif b:netrw_method == 5 " read with http (wget)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000493" call Decho("read via http (method #5)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000494 if g:netrw_http_cmd == ""
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000495 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000496 echohl Error | echo "***netrw*** neither wget nor fetch command is available" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000497 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000498 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000499 exit
500 endif
501
502 if match(b:netrw_fname,"#") == -1
503 " simple wget
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000504" call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000505 exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&')
506 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
507
508 else
509 " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
510 let netrw_html= substitute(b:netrw_fname,"#.*$","","")
511 let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000512" call Decho("netrw_html<".netrw_html.">")
513" call Decho("netrw_tag <".netrw_tag.">")
514" call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000515 exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html
516 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000517" call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000518 exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
519 endif
520 let b:netrw_lastfile = choice
521
522 ".........................................
523 " cadaver: NetRead Method #6
524 elseif b:netrw_method == 6 " read with cadaver
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000525" call Decho("read via cadaver (method #6)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000526
527 " Construct execution string (four lines) which will be passed through filter
528 let netrw_fname= b:netrw_fname
529 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000530 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000531 if exists("g:netrw_port") && g:netrw_port != ""
532 put ='open '.g:netrw_machine.' '.g:netrw_port
533 else
534 put ='open '.g:netrw_machine
535 endif
536 put ='user '.g:netrw_uid.' '.g:netrw_passwd
537
538 if g:netrw_cygwin == 1
539 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
540 put ='get '.netrw_fname.' '.cygtmpfile
541 else
542 put ='get '.netrw_fname.' '.tmpfile
543 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000544 put ='quit'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000545
546 " perform cadaver operation:
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000547 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000548" call Decho("executing: %!".g:netrw_dav_cmd)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000549 exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
550 bd!
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000551 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000552 let b:netrw_lastfile = choice
553
554 ".........................................
555 " rsync: NetRead Method #7
556 elseif b:netrw_method == 7 " read with rsync
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000557" call Decho("read via rsync (method #7)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000558 if g:netrw_cygwin == 1
559 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000560" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000561 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
562 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000563" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000564 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
565 endif
566 let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
567 let b:netrw_lastfile = choice
568
569 ".........................................
570 " fetch: NetRead Method #8
571 " fetch://[user@]host[:http]/path
572 elseif b:netrw_method == 8 " read with fetch
573 if g:netrw_fetch_cmd == ""
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000574 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000575 echohl Error | echo "***netrw*** fetch command not available" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000576 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000577 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000578 exit
579 endif
580 if exists("g:netrw_option") && g:netrw_option == ":http"
581 let netrw_option= "http"
582 else
583 let netrw_option= "ftp"
584 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000585" call Decho("read via fetch for ".netrw_option)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000586
587 if exists("g:netrw_uid") && g:netrw_uid != "" && exists("g:netrw_passwd") && g:netrw_passwd != ""
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000588" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000589 exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&')
590 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000591" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000592 exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&')
593 endif
594
595 let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
596 let b:netrw_lastfile = choice
597
598 ".........................................
599 " sftp: NetRead Method #9
600 elseif b:netrw_method == 9 " read with sftp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000601" call Decho("read via sftp (method #4)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000602 if g:netrw_cygwin == 1
603 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000604" call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
605" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000606 exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
607 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000608" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000609 exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
610 endif
611 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
612 let b:netrw_lastfile = choice
613
614 ".........................................
615 else " Complain
616 echo "***warning*** unable to comply with your request<" . choice . ">"
617 endif
618 endwhile
619
620 " cleanup
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000621" call Decho("cleanup")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000622 if exists("b:netrw_method")
623 unlet b:netrw_method
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000624 unlet b:netrw_fname
625 endif
626 call s:NetOptionRestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +0000627
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000628" call Dret("NetRead")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000629endfun
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000630
631" ------------------------------------------------------------------------
632" NetGetFile: Function to read file "fname" with command "readcmd". {{{1
633fun! s:NetGetFile(readcmd, fname, method)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000634" call Dfunc("NetGetFile(readcmd<".a:readcmd.">,fname<".a:fname."> method<".a:method.">)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000635
636 if exists("*NetReadFixup")
637 " for the use of NetReadFixup (not otherwise used internally)
638 let line2= line("$")
639 endif
640
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000641 " transform paths from / to \ for Windows (except for cygwin)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000642 if &term == "win32"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000643 if g:netrw_cygwin
644 let fname= a:fname
645" call Decho("(win32 && cygwin) fname<".fname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000646 else
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000647 let fname= substitute(a:fname,'/','\\\\','ge')
648" call Decho("(win32 && !cygwin) fname<".fname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000649 endif
650 else
651 let fname= a:fname
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000652" call Decho("(copied) fname<".fname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000653 endif
654
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000655 if a:readcmd[0] == '0'
Bram Moolenaar81695252004-12-29 20:58:21 +0000656 " get file into buffer
Bram Moolenaar83bab712005-08-01 21:58:57 +0000657
Bram Moolenaar81695252004-12-29 20:58:21 +0000658 " record remote filename
Bram Moolenaar83bab712005-08-01 21:58:57 +0000659 let rfile= bufname(".")
660" call Decho("remotefile<".rfile.">")
661" call Dredir("ls!","starting buffer list")
662
Bram Moolenaar81695252004-12-29 20:58:21 +0000663 " rename the current buffer to the temp file (ie. fname)
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +0000664 if v:version < 700
665 exe "file ".fname
666 else
667 keepalt exe "file ".fname
668 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +0000669" call Dredir("ls!","after renaming current buffer to <".fname.">")
670
Bram Moolenaar81695252004-12-29 20:58:21 +0000671 " edit temporary file
672 e
Bram Moolenaar83bab712005-08-01 21:58:57 +0000673" call Dredir("ls!","after editing temporary file")
674
Bram Moolenaar81695252004-12-29 20:58:21 +0000675 " rename buffer back to remote filename
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +0000676 if v:version < 700
677 exe "file ".rfile
678 else
679 keepalt exe "file ".rfile
680 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +0000681" call Dredir("ls!","renaming buffer back to remote filename<".rfile.">")
Bram Moolenaar81695252004-12-29 20:58:21 +0000682 let line1 = 1
683 let line2 = line("$")
684
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000685 elseif filereadable(fname)
Bram Moolenaar81695252004-12-29 20:58:21 +0000686 " read file after current line
687 let curline = line(".")
688 let lastline= line("$")
689" call Decho("exe<".a:readcmd." ".v:cmdarg." ".fname."> line#".curline)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000690 exe a:readcmd." ".v:cmdarg." ".fname
Bram Moolenaar81695252004-12-29 20:58:21 +0000691 let line1 = curline + 1
692 let line2 = line("$") - lastline + 1
693 let s:netrw_line = s:netrw_line + 1
694 let s:netrw_col = 1
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000695 else
Bram Moolenaar81695252004-12-29 20:58:21 +0000696 " not readable
697" call Dret("NetGetFile : fname<".fname."> not readable")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000698 return
699 endif
700
701 " User-provided (ie. optional) fix-it-up command
702 if exists("*NetReadFixup")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000703" call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000704 call NetReadFixup(a:method, line1, line2)
Bram Moolenaar83bab712005-08-01 21:58:57 +0000705" else " Decho
706" call Decho("NetReadFixup() not called, doesn't exist")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000707 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +0000708
709 " update the Buffers menu
710 if has("gui") && has("gui_running")
711 silent! emenu Buffers.Refresh\ menu
712 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000713
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000714" call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000715
716 " insure that we have the right filetype and that its being displayed
717 filetype detect
718 redraw!
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000719" call Dret("NetGetFile")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000720endfun
721
722" ------------------------------------------------------------------------
723" NetWrite: responsible for writing a file over the net {{{1
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000724fun! netrw#NetWrite(...) range
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000725" call Dfunc("NetWrite(a:0=".a:0.")")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000726
727 " option handling
728 let mod= 0
729 call s:NetOptionSave()
730
731 " Get Temporary Filename
732 let tmpfile= tempname()
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000733 if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
734 echohl Error | echo "***netrw*** your ".substitute(tmpfile,'[^/]\+$','','e')." directory is missing!"
735 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
736" call Dret("NetRead")
737 return
738 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000739
740 if a:0 == 0
741 let ichoice = 0
742 else
743 let ichoice = 1
744 endif
745
746 " write (selected portion of) file to temporary
747 silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
748
749 while ichoice <= a:0
750
751 " attempt to repeat with previous host-file-etc
752 if exists("b:netrw_lastfile") && a:0 == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000753" call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000754 let choice = b:netrw_lastfile
755 let ichoice= ichoice + 1
756 else
757 exe "let choice= a:" . ichoice
758
759 " Reconstruct Choice if choice starts with '"'
760 if match(choice,"?") == 0
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000761 echomsg 'NetWrite Usage:"'
762 echomsg ':Nwrite machine:path uses rcp'
763 echomsg ':Nwrite "machine path" uses ftp with <.netrc>'
764 echomsg ':Nwrite "machine id password path" uses ftp'
765 echomsg ':Nwrite dav://[user@]machine/path uses cadaver'
766 echomsg ':Nwrite fetch://[user@]machine/path uses fetch'
767 echomsg ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)'
768 echomsg ':Nwrite rcp://machine/path uses rcp'
769 echomsg ':Nwrite rsync://[user@]machine/path uses rsync'
770 echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
771 echomsg ':Nwrite sftp://[user@]machine/path uses sftp'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000772 break
773
774 elseif match(choice,"^\"") != -1
775 if match(choice,"\"$") != -1
776 " case "..."
777 let choice=strpart(choice,1,strlen(choice)-2)
778 else
779 " case "... ... ..."
780 let choice = strpart(choice,1,strlen(choice)-1)
781 let wholechoice = ""
782
783 while match(choice,"\"$") == -1
784 let wholechoice= wholechoice . " " . choice
785 let ichoice = ichoice + 1
786 if choice > a:0
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000787 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000788 echohl Error | echo "***netrw*** Unbalanced string in filename '". wholechoice ."'" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000789 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000790 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000791" call Dret("NetWrite")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000792 return
793 endif
794 let choice= a:{ichoice}
795 endwhile
796 let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
797 endif
798 endif
799 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000800" call Decho("choice<" . choice . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000801 let ichoice= ichoice + 1
802
803 " fix up windows urls
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000804 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000805 let choice= substitute(choice,'\\','/','ge')
806 "ER: see NetRead()
807 exe 'lcd ' . fnamemodify(tmpfile,':h')
808 let tmpfile = fnamemodify(tmpfile,':t')
809 endif
810
811 " Determine method of read (ftp, rcp, etc)
812 call s:NetMethod(choice)
813
814 " =============
815 " Perform Write
816 " =============
817
818 ".........................................
819 " rcp: NetWrite Method #1
820 if b:netrw_method == 1 " write with rcp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000821" Decho "write via rcp (method #1)"
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000822 if s:netrw_has_nt_rcp == 1
823 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
824 let uid_machine = g:netrw_machine .'.'. g:netrw_uid
825 else
826 let uid_machine = g:netrw_machine .'.'. $USERNAME
827 endif
828 else
829 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
830 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
831 else
832 let uid_machine = g:netrw_machine
833 endif
834 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000835" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000836 exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&')
837 let b:netrw_lastfile = choice
838
839 ".........................................
840 " ftp + <.netrc>: NetWrite Method #2
841 elseif b:netrw_method == 2 " write with ftp + <.netrc>
842 let netrw_fname = b:netrw_fname
843 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000844 setlocal ff=unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000845 exe "put ='".g:netrw_ftpmode."'"
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000846" call Decho(" NetWrite: put ='".g:netrw_ftpmode."'")
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000847 exe "put ='"."put ".tmpfile." ".netrw_fname."'"
848" call Decho("put ='"."put ".tmpfile." ".netrw_fname."'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000849 if exists("g:netrw_port") && g:netrw_port != ""
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000850" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
Bram Moolenaar69a7cb42004-06-20 12:51:53 +0000851 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
Bram Moolenaar071d4272004-06-13 20:20:40 +0000852 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000853" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
Bram Moolenaar69a7cb42004-06-20 12:51:53 +0000854 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
Bram Moolenaar071d4272004-06-13 20:20:40 +0000855 endif
856 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
857 if getline(1) !~ "^$"
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000858 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000859 echohl Error | echo "***netrw*** ".getline(1) | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000860 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000861 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000862 let mod=1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000863 endif
864 bd!
Bram Moolenaar071d4272004-06-13 20:20:40 +0000865 let b:netrw_lastfile = choice
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000866
867 ".........................................
868 " ftp + machine, id, passwd, filename: NetWrite Method #3
869 elseif b:netrw_method == 3 " write with ftp + machine, id, passwd, and fname
870 let netrw_fname= b:netrw_fname
871 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000872 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000873 if exists("g:netrw_port") && g:netrw_port != ""
874 put ='open '.g:netrw_machine.' '.g:netrw_port
875 else
876 put ='open '.g:netrw_machine
877 endif
878 if exists("g:netrw_ftp") && g:netrw_ftp == 1
879 put =g:netrw_uid
880 put =g:netrw_passwd
881 else
882 put ='user '.g:netrw_uid.' '.g:netrw_passwd
883 endif
884 put ='put '.tmpfile.' '.netrw_fname
885 " save choice/id/password for future use
886 let b:netrw_lastfile = choice
887
888 " perform ftp:
889 " -i : turns off interactive prompting from ftp
890 " -n unix : DON'T use <.netrc>, even though it exists
891 " -n win32: quit being obnoxious about password
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000892" call Decho('performing ftp -i -n')
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000893 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000894" call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000895 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
896 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
897 if getline(1) !~ "^$"
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000898 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000899 echohl Error | echo "***netrw*** ".getline(1) | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000900 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000901 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000902 let mod=1
903 endif
904 bd!
905
906 ".........................................
907 " scp: NetWrite Method #4
908 elseif b:netrw_method == 4 " write with scp
909 if exists("g:netrw_port") && g:netrw_port != ""
910 let useport= " -P ".g:netrw_port
911 else
912 let useport= ""
913 endif
914 if g:netrw_cygwin == 1
915 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000916" call Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000917 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
918 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000919" call Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000920 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
921 endif
922 let b:netrw_lastfile = choice
923
924 ".........................................
925 " http: NetWrite Method #5
926 elseif b:netrw_method == 5
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000927 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000928 echohl Error | echo "***netrw*** currently <netrw.vim> does not support writing using http:" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000929 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000930 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000931
932 ".........................................
933 " dav: NetWrite Method #6
934 elseif b:netrw_method == 6 " write with cadaver
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000935" call Decho("write via cadaver (method #6)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000936
937 " Construct execution string (four lines) which will be passed through filter
938 let netrw_fname= b:netrw_fname
939 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000940 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000941 if exists("g:netrw_port") && g:netrw_port != ""
942 put ='open '.g:netrw_machine.' '.g:netrw_port
943 else
944 put ='open '.g:netrw_machine
945 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000946 put ='user '.g:netrw_uid.' '.g:netrw_passwd
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000947
948 if g:netrw_cygwin == 1
949 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
950 put ='put '.cygtmpfile.' '.netrw_fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000951 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000952 put ='put '.tmpfile.' '.netrw_fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000953 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000954
955 " perform cadaver operation:
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000956 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000957" call Decho("executing: %!".g:netrw_dav_cmd)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000958 exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
959 bd!
960 let b:netrw_lastfile = choice
961
962 ".........................................
963 " rsync: NetWrite Method #7
964 elseif b:netrw_method == 7 " write with rsync
965 if g:netrw_cygwin == 1
966 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000967" call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000968 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000969 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000970" call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000971 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
Bram Moolenaar071d4272004-06-13 20:20:40 +0000972 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000973 let b:netrw_lastfile = choice
974
975 ".........................................
976 " scp: NetWrite Method #9
977 elseif b:netrw_method == 9 " write with sftp
978 let netrw_fname= b:netrw_fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000979 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
980 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
981 else
982 let uid_machine = g:netrw_machine
983 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000984 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000985 setlocal ff=unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000986 put ='put '.tmpfile.' '.netrw_fname
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000987 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000988" call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000989 exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
990 bd!
991 let b:netrw_lastfile= choice
992
993 ".........................................
994 else " Complain
995 echo "***warning*** unable to comply with your request<" . choice . ">"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000996 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000997 endwhile
998
999 " cleanup
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001000" call Decho("cleanup")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001001 let result=delete(tmpfile)
1002 call s:NetOptionRestore()
1003
1004 if a:firstline == 1 && a:lastline == line("$")
1005 let &mod= mod " usually equivalent to set nomod
Bram Moolenaar071d4272004-06-13 20:20:40 +00001006 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001007
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001008" call Dret("NetWrite")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001009endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +00001010
Bram Moolenaar83bab712005-08-01 21:58:57 +00001011" ===========================================
1012" Remote Directory Browsing Support: {{{1
1013" ===========================================
1014
Bram Moolenaar843ee412004-06-30 16:16:41 +00001015" NetBrowse: This function uses the command in g:netrw_list_cmd to get a list {{{2
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001016" of the contents of a remote directory. It is assumed that the
1017" g:netrw_list_cmd has a string, HOSTNAME, that needs to be substituted
1018" with the requested remote hostname first.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001019fun! s:NetBrowse(dirname)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001020" call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".g:netrw_longlist)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001021
Bram Moolenaar488c6512005-08-11 20:09:58 +00001022 if exists("s:netrw_skipbrowse")
1023 unlet s:netrw_skipbrowse
1024" call Dret("NetBrowse")
1025 return
1026 endif
1027
Bram Moolenaar843ee412004-06-30 16:16:41 +00001028 " sanity check
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001029 if exists("b:netrw_method") && b:netrw_method =~ '[235]'
1030" call Decho("b:netrw_method=".b:netrw_method)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001031 if !executable("ftp")
1032 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001033 echohl Error | echo "***netrw*** this system doesn't support remote directory listing via ftp" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001034 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001035 endif
1036" call Dret("NetBrowse")
1037 return
1038 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001039 elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001040 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001041 echohl Error | echo "***netrw*** this system doesn't support remote directory listing via ssh" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001042 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001043 endif
Bram Moolenaar572cb562005-08-05 21:35:02 +00001044
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001045" call Dret("NetBrowse")
1046 return
Bram Moolenaar843ee412004-06-30 16:16:41 +00001047 endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001048
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00001049 " use buffer-oriented WinVars if buffer ones exist but window ones don't
1050 call s:UseBufWinVars()
1051
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001052 " make this buffer modifiable
Bram Moolenaar83bab712005-08-01 21:58:57 +00001053 setlocal ma nonu nowrap
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001054
1055 " analyze a:dirname and g:netrw_list_cmd
1056 let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001057 let dirname = substitute(a:dirname,'\\','/','ge')
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001058" call Decho("dirpat<".dirpat.">")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001059 if dirname !~ dirpat
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001060 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001061 echohl Error | echo "***netrw*** netrw doesn't understand your dirname<".dirname.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001062 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001063 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001064" call Dret("NetBrowse : badly formatted dirname<".dirname.">")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001065 return
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001066 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00001067
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001068 let method = substitute(dirname,dirpat,'\1','')
1069 let user = substitute(dirname,dirpat,'\2','')
1070 let machine = substitute(dirname,dirpat,'\3','')
1071 let path = substitute(dirname,dirpat,'\4','')
1072 let fname = substitute(dirname,'^.*/\ze.','','')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001073" call Decho("set up method <".method .">")
1074" call Decho("set up user <".user .">")
1075" call Decho("set up machine<".machine.">")
1076" call Decho("set up path <".path .">")
1077" call Decho("set up fname <".fname .">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001078
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001079 if method == "ftp" || method == "http"
1080 let method = "ftp"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001081 let listcmd = g:netrw_ftp_list_cmd
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001082 else
1083 let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
1084 endif
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001085
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001086 if exists("b:netrw_method")
Bram Moolenaar488c6512005-08-11 20:09:58 +00001087" call Decho("setting w:netrw_method<".b:netrw_method.">")
1088 let w:netrw_method= b:netrw_method
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001089 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001090
Bram Moolenaar8299df92004-07-10 09:47:34 +00001091 " optionally sort by time (-t) or by size (-S)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001092 if listcmd == "dir" && g:netrw_sort_by =~ "^[ts]"
Bram Moolenaar572cb562005-08-05 21:35:02 +00001093 echohl WarningMsg | echo "***netrw*** windows' ftp doesn't support time/size sorts (get cygwin, set g:netrw_cygwin)" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001094 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001095 else
1096 if g:netrw_sort_by =~ "^t"
1097 let listcmd= listcmd."t"
1098 elseif g:netrw_sort_by =~ "^s"
1099 let listcmd= listcmd."S"
1100 endif
1101 " optionally sort in reverse
1102 if g:netrw_sort_direction =~ "^r" && listcmd == "dir"
1103 let listcmd= listcmd."r"
1104 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00001105 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001106
1107" call Decho("set up listcmd<".listcmd.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001108 if fname =~ '@$' && fname !~ '^"'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001109" call Decho("attempt transfer of symlink as file")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001110 call s:NetBrowse(substitute(dirname,'@$','','e'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001111 redraw!
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001112" call Dret("NetBrowse : symlink")
1113 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001114
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001115 elseif fname !~ '[\/]$' && fname !~ '^"'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001116 " looks like a regular file, attempt transfer
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001117" call Decho("attempt transfer as regular file<".dirname.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001118
1119 " remove any filetype indicator from end of dirname, except for the
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001120 " "this is a directory" indicator (/). There shouldn't be one of those,
1121 " anyway.
1122 let path= substitute(path,'[*=@|]$','','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001123" call Decho("new path<".path.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001124
1125 " remote-read the requested file into current buffer
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001126 enew!
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001127" call Decho("exe file .method."://".user.machine."/".escape(path,s:netrw_cd_escape))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001128 exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001129 exe "silent doau BufReadPre ".fname
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001130 silent call netrw#NetRead(method."://".user.machine."/".path)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001131 exe "silent doau BufReadPost ".fname
Bram Moolenaar8299df92004-07-10 09:47:34 +00001132 keepjumps 1d
Bram Moolenaar572cb562005-08-05 21:35:02 +00001133
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00001134 " save certain window-oriented variables into buffer-oriented variables
1135 call s:BufWinVars()
1136
Bram Moolenaar572cb562005-08-05 21:35:02 +00001137 setlocal nonu nomod noma
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001138
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001139" call Dret("NetBrowse : file<".fname.">")
1140 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001141 endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001142
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001143 " ---------------------------------------------------------------------
1144 " Perform Directory Listing:
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001145" call Decho("Perform directory listing...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001146 " set up new buffer and map
1147 let bufname = method.'://'.user.machine.'/'.path
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001148 let bufnamenr = bufnr(bufname.'$')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001149" call Decho("bufname<".bufname."> bufnamenr=".bufnamenr)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001150 if bufnamenr != -1
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001151 " buffer already exists, switch to it!
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001152" call Decho("buffer already exists, switching to it")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001153 exe "b ".bufnamenr
1154 if line("$") >= 5
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001155" call Dret("NetBrowse")
1156 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001157 endif
1158 else
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001159" call Decho("generate a new buffer")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001160 enew!
1161 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001162
1163 " rename file to reflect where its from
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001164 setlocal bt=nofile bh=wipe nobl noswf
1165 exe "setlocal ts=".g:netrw_maxfilenamelen
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001166" call Decho("exe file ".escape(bufname,s:netrw_cd_escape))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001167 exe 'file '.escape(bufname,s:netrw_cd_escape)
Bram Moolenaar269ec652004-07-29 08:43:53 +00001168" call Decho("renaming file to bufname<".bufname.">")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001169 setlocal bh=hide nobl nonu
1170
1171 " save current directory on directory history list
1172 call <SID>NetBookmarkDir(3,expand("%"))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001173
1174 " set up buffer-local mappings
1175" call Decho("set up buffer-local mappings")
1176 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
Bram Moolenaar572cb562005-08-05 21:35:02 +00001177 nnoremap <buffer> <silent> <c-l> :call <SID>NetRefresh(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
Bram Moolenaar843ee412004-06-30 16:16:41 +00001178 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr>
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001179 nnoremap <buffer> <silent> a :let g:netrw_hide=(g:netrw_hide+1)%3<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001180 nnoremap <buffer> <silent> b :<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
1181 nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr>
1182 nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(0)<cr>
1183 nnoremap <buffer> <silent> i :call <SID>NetLongList(0)<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00001184 nnoremap <buffer> <silent> o :call <SID>NetSplit(0)<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001185 nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr>
1186 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
1187 nnoremap <buffer> <silent> s :call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
1188 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(0)<cr>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001189 nnoremap <buffer> <silent> u :<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
1190 nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00001191 nnoremap <buffer> <silent> v :call <SID>NetSplit(1)<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001192 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
1193 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
Bram Moolenaar843ee412004-06-30 16:16:41 +00001194 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
1195 exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001196 exe 'nnoremap <buffer> <silent> d :call <SID>NetMakeDir("'.user.machine.'")<cr>'
Bram Moolenaar843ee412004-06-30 16:16:41 +00001197 exe 'nnoremap <buffer> <silent> D :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
1198 exe 'vnoremap <buffer> <silent> D :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
1199 exe 'nnoremap <buffer> <silent> R :exe "norm! 0"<bar>call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar269ec652004-07-29 08:43:53 +00001200 exe 'vnoremap <buffer> <silent> R :call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar8299df92004-07-10 09:47:34 +00001201 nnoremap <buffer> ? :he netrw-browse-cmds<cr>
Bram Moolenaar83bab712005-08-01 21:58:57 +00001202 setlocal ma nonu nowrap
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001203
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001204 " Set up the banner
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001205" call Decho("set up the banner: sortby<".g:netrw_sort_by."> method<".method.">")
1206 keepjumps put ='\" ==========================================================================='
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001207 keepjumps put ='\" Netrw Remote Directory Listing'
1208 keepjumps put ='\" '.bufname
Bram Moolenaar488c6512005-08-11 20:09:58 +00001209 let w:netrw_bannercnt = 7
1210 let sortby = g:netrw_sort_by
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001211 if g:netrw_sort_direction =~ "^r"
Bram Moolenaar488c6512005-08-11 20:09:58 +00001212 let sortby = sortby." reversed"
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001213 endif
1214
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001215 if g:netrw_sort_by =~ "^n"
1216 " sorted by name
Bram Moolenaar488c6512005-08-11 20:09:58 +00001217 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001218 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001219 keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence
1220 else
1221 " sorted by size or date
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001222 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001223 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00001224 if g:netrw_list_hide != "" && g:netrw_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001225 if g:netrw_hide == 1
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001226 keepjumps put ='\" Hiding: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001227 else
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001228 keepjumps put ='\" Showing: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001229 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00001230 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaar843ee412004-06-30 16:16:41 +00001231 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001232 keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec'
1233 keepjumps put ='\" ==========================================================================='
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001234
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001235 " remote read the requested directory listing
1236 " Use ftp if that was the file-transfer method selected, otherwise use ssh
1237 " Note that not all ftp servers honor the options for ls
1238 if method == "ftp"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001239 " use ftp to get remote file listing
1240" call Decho("use ftp to get remote file listing")
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001241 call s:NetBrowseFtpCmd(path,listcmd)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001242 keepjumps 1d
1243
1244 if !g:netrw_longlist
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001245 " shorten the listing
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001246" call Decho("generate short listing")
Bram Moolenaar488c6512005-08-11 20:09:58 +00001247 exe "keepjumps ".w:netrw_bannercnt
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001248
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001249 " cleanup
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001250 if g:netrw_ftp_browse_reject != ""
1251 exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
1252 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001253
1254 " if there's no ../ listed, then put ./ and ../ in
1255 let line1= line(".")
1256 keepjumps 1
1257 silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
1258 let line2= line(".")
1259 if line2 == 0
1260 keepjumps put='../'
1261 keepjumps put='./'
1262 endif
1263 exe "keepjumps ".line1
1264 keepjumps norm! 0
1265
1266 " more cleanup
Bram Moolenaar488c6512005-08-11 20:09:58 +00001267 exe 'keepjumps silent! '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
1268 exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
1269 exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001270 endif
1271
1272 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001273 " use ssh to get remote file listing
1274" call Decho("use ssh to get remote file listing")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001275 let shq= &shq? &shq : ( &sxq? &sxq : "'")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001276" call Decho("exe silent r! ".listcmd." '".shq.escape(path,s:netrw_cd_escape).shq."'")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001277 exe "silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq
1278 keepjumps 1d
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001279 " cleanup
1280 if g:netrw_ftp_browse_reject != ""
1281 exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001282 endif
1283 endif
Bram Moolenaar572cb562005-08-05 21:35:02 +00001284
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001285
1286 " set up syntax highlighting
1287 if has("syntax")
1288 setlocal ft=netrwlist
Bram Moolenaar572cb562005-08-05 21:35:02 +00001289 if !exists("g:syntax_on") || !g:syntax_on
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001290 setlocal ft=
Bram Moolenaar572cb562005-08-05 21:35:02 +00001291 " Ugly workaround -- when syntax highlighting is off and laststatus==2,
1292 " sometimes the laststatus highlight bleeds into the entire display.
1293 " Only seems to happen with remote browsing. Weird.
1294 redraw
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001295 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001296 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001297
1298 " manipulate the directory listing (hide, sort)
Bram Moolenaar488c6512005-08-11 20:09:58 +00001299 if line("$") >= w:netrw_bannercnt
Bram Moolenaar269ec652004-07-29 08:43:53 +00001300 if g:netrw_hide && g:netrw_list_hide != ""
1301 call s:NetrwListHide()
Bram Moolenaar843ee412004-06-30 16:16:41 +00001302 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001303
Bram Moolenaar8299df92004-07-10 09:47:34 +00001304 if g:netrw_longlist
1305 " do a long listing; these substitutions need to be done prior to sorting
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001306" call Decho("manipulate long listing")
1307
1308 if method == "ftp"
1309 " cleanup
Bram Moolenaar488c6512005-08-11 20:09:58 +00001310 exe "keepjumps ".w:netrw_bannercnt
Bram Moolenaar572cb562005-08-05 21:35:02 +00001311 while getline(".") =~ g:netrw_ftp_browse_reject
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001312 keepjumps d
1313 endwhile
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001314 " if there's no ../ listed, then put ./ and ../ in
1315 let line1= line(".")
1316 keepjumps 1
1317 silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
1318 let line2= line(".")
1319 if line2 == 0
Bram Moolenaar488c6512005-08-11 20:09:58 +00001320 exe 'keepjumps '.w:netrw_bannercnt."put='./'"
1321 exe 'keepjumps '.w:netrw_bannercnt."put='../'"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001322 endif
1323 exe "keepjumps ".line1
1324 keepjumps norm! 0
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001325 endif
1326
Bram Moolenaar488c6512005-08-11 20:09:58 +00001327 exe 'keepjumps silent '.w:netrw_bannercnt.',$s/ -> .*$//e'
1328 exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
1329 exe w:netrw_bannercnt
Bram Moolenaar8299df92004-07-10 09:47:34 +00001330 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001331
Bram Moolenaar488c6512005-08-11 20:09:58 +00001332 if line("$") >= w:netrw_bannercnt
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001333 if g:netrw_sort_by =~ "^n"
1334 call s:SetSort()
Bram Moolenaar83bab712005-08-01 21:58:57 +00001335 if v:version < 700
Bram Moolenaar488c6512005-08-11 20:09:58 +00001336 exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001337 elseif g:netrw_sort_direction =~ 'n'
Bram Moolenaar488c6512005-08-11 20:09:58 +00001338 exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001339 else
Bram Moolenaar488c6512005-08-11 20:09:58 +00001340 exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
Bram Moolenaar83bab712005-08-01 21:58:57 +00001341 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00001342 exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001343 endif
1344 if g:netrw_longlist
1345 " shorten the list to keep its width <= 80 characters
Bram Moolenaar488c6512005-08-11 20:09:58 +00001346 exe "keepjumps silent ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001347 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00001348 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001349 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00001350 exe "keepjumps ".w:netrw_bannercnt
Bram Moolenaar572cb562005-08-05 21:35:02 +00001351
1352 setlocal nomod noma nonu
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001353
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001354" call Dret("NetBrowse")
1355 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001356endfun
1357
1358" ---------------------------------------------------------------------
Bram Moolenaar843ee412004-06-30 16:16:41 +00001359" NetBrowseChgDir: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001360fun! s:NetBrowseChgDir(dirname,newdir)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001361" call Dfunc("NetBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001362
1363 let dirname= a:dirname
Bram Moolenaar843ee412004-06-30 16:16:41 +00001364 let newdir = a:newdir
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001365
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001366 if newdir !~ '[\/]$'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001367 " handling a file
1368 let dirname= dirname.newdir
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001369" call Decho("handling a file: dirname<".dirname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001370
1371 elseif newdir == './'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001372 " refresh the directory list
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001373" call Decho("refresh directory listing")
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001374 setlocal ma nobl bh=hide
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001375 %d
1376
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001377 elseif newdir == '../'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001378 " go up one directory
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001379 let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','')
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001380
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001381 if trailer =~ '^\%(\.\./\)*$'
1382 " tack on a ../"
1383 let dirname= dirname.'../'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001384
1385 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001386 " strip off a directory name from dirname
1387 let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','')
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001388 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001389" call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001390
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001391 else
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001392 " go down one directory
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001393 let dirname= dirname.newdir
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001394" call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001395 endif
1396
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001397" call Dret("NetBrowseChgDir <".dirname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001398 return dirname
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001399endfun
1400
Bram Moolenaar843ee412004-06-30 16:16:41 +00001401" ---------------------------------------------------------------------
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001402" NetGetWord: it gets the directory named under the cursor
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001403fun! s:NetGetWord()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001404" call Dfunc("NetGetWord() line#".line("."))
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00001405 call s:UseBufWinVars()
1406
Bram Moolenaar488c6512005-08-11 20:09:58 +00001407 if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001408 let dirname= "./"
Bram Moolenaar488c6512005-08-11 20:09:58 +00001409 let curline= getline(".")
1410 if curline =~ '"\s*Sorted by\s'
1411 norm s
1412 let s:netrw_skipbrowse= 1
1413 echo 'Pressing "s" also works'
1414 elseif curline =~ '"\s*Sort sequence:'
1415 let s:netrw_skipbrowse= 1
1416 echo 'Press "S" to edit sorting sequence'
1417 elseif curline =~ '"\s*Quick Help:'
1418 norm ?
1419 let s:netrw_skipbrowse= 1
1420 echo 'Pressing "?" also works'
1421 elseif curline =~ '"\s*\%(Hiding\|Showing\):'
1422 norm a
1423 let s:netrw_skipbrowse= 1
1424 echo 'Pressing "a" also works'
1425 elseif line("$") > w:netrw_bannercnt
1426 exe w:netrw_bannercnt
1427 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001428 else
1429 let dirname= getline(".")
1430 if dirname =~ '\t'
1431 let dirname= substitute(dirname,'\t.*$','','e')
1432 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00001433 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001434" call Dret("NetGetWord <".dirname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001435 return dirname
1436endfun
1437
1438" ---------------------------------------------------------------------
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001439" NetBrowseRm: remove/delete a remote file or directory {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001440fun! s:NetBrowseRm(usrhost,path) range
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001441" call Dfunc("NetBrowseRm(usrhost<".a:usrhost."> path<".a:path.">)")
1442" call Decho("firstline=".a:firstline." lastline=".a:lastline)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001443
1444 " preparation for removing multiple files/directories
1445 let ctr= a:firstline
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001446 let all= 0
Bram Moolenaar843ee412004-06-30 16:16:41 +00001447
1448 " remove multiple files and directories
1449 while ctr <= a:lastline
1450 exe ctr
1451
1452 norm! 0
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001453 let rmfile= s:NetGetWord()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001454" call Decho("rmfile<".rmfile.">")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001455
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001456 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
Bram Moolenaar843ee412004-06-30 16:16:41 +00001457 " attempt to remove file
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001458 if !all
1459 echohl Statement
1460 call inputsave()
1461 let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
1462 call inputrestore()
1463 echohl NONE
1464 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
1465 if ok =~ 'a\%[ll]'
1466 let all= 1
1467 endif
1468 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001469
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001470 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaar488c6512005-08-11 20:09:58 +00001471 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001472 silent! keepjumps .,$d
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001473 call s:NetBrowseFtpCmd(a:path,"delete ".rmfile)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001474 else
1475 let netrw_rm_cmd= substitute(g:netrw_rm_cmd,'HOSTNAME',a:usrhost,'').' "'.escape(a:path.rmfile,s:netrw_cd_escape).'"'
1476" call Decho("attempt to remove file: system(".netrw_rm_cmd.")")
1477 let ret= system(netrw_rm_cmd)
1478" call Decho("returned=".ret." errcode=".v:shell_error)
1479 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001480 elseif ok =~ 'q\%[uit]'
1481 break
Bram Moolenaar843ee412004-06-30 16:16:41 +00001482 endif
1483
1484 else
1485 " attempt to remove directory
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001486 if !all
1487 call inputsave()
1488 let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
1489 call inputrestore()
1490 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
1491 if ok =~ 'a\%[ll]'
1492 let all= 1
1493 endif
1494 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00001495
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001496 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaar488c6512005-08-11 20:09:58 +00001497 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001498 call s:NetBrowseFtpCmd(a:path,"rmdir ".rmfile)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001499 else
1500 let rmfile = a:path.rmfile
1501 let netrw_rmdir_cmd= substitute(g:netrw_rmdir_cmd,'HOSTNAME',a:usrhost,'').' '."'".'"'.rmfile.'"'."'"
1502" call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")")
1503 let ret= system(netrw_rmdir_cmd)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001504" call Decho("returned=".ret." errcode=".v:shell_error)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001505
1506 if v:shell_error != 0
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001507 let netrw_rmf_cmd= substitute(g:netrw_rmf_cmd,'HOSTNAME',a:usrhost,'').' '.substitute(rmfile,'[\/]$','','e')
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001508" call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
1509 let ret= system(netrw_rmf_cmd)
1510" call Decho("returned=".ret." errcode=".v:shell_error)
1511
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001512 if v:shell_error != 0 && !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001513 echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001514 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001515 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00001516 endif
1517 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001518
1519 elseif ok =~ 'q\%[uit]'
1520 break
Bram Moolenaar843ee412004-06-30 16:16:41 +00001521 endif
1522 endif
1523
1524 let ctr= ctr + 1
1525 endwhile
1526
1527 " refresh the directory
1528 let curline= line(".")-1
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001529" call Decho("refresh the directory")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001530 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))
1531 exe curline
1532
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001533" call Dret("NetBrowseRm")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001534endfun
1535
1536" ---------------------------------------------------------------------
1537" NetBrowseRename: rename a remote file or directory {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001538fun! s:NetBrowseRename(usrhost,path) range
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001539" call Dfunc("NetBrowseRename(usrhost<".a:usrhost."> path<".a:path.">)")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001540
1541 " preparation for removing multiple files/directories
1542 let ctr = a:firstline
1543 let rename_cmd = substitute(g:netrw_rename_cmd,'\<HOSTNAME\>',a:usrhost,'')
1544
1545 " attempt to rename files/directories
1546 while ctr <= a:lastline
Bram Moolenaar8299df92004-07-10 09:47:34 +00001547 exe "keepjumps ".ctr
Bram Moolenaar843ee412004-06-30 16:16:41 +00001548
1549 norm! 0
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001550 let oldname= s:NetGetWord()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001551" call Decho("oldname<".oldname.">")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001552
1553 call inputsave()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001554 let newname= input("Moving ".oldname." to : ",oldname)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001555 call inputrestore()
1556
Bram Moolenaar488c6512005-08-11 20:09:58 +00001557 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001558 call s:NetBrowseFtpCmd(a:path,"rename ".oldname." ".newname)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001559 else
1560 let oldname= a:path.oldname
1561 let newname= a:path.newname
1562" call Decho("system(rename_cmd".' "'.escape(oldname," ").'" "'.escape(newname,s:netrw_cd_escape).'"')
1563 let ret= system(rename_cmd.' "'.escape(oldname,s:netrw_cd_escape).'" "'.escape(newname,s:netrw_cd_escape).'"')
1564 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00001565
1566 let ctr= ctr + 1
1567 endwhile
1568
1569 " refresh the directory
1570 let curline= line(".")
1571 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))
Bram Moolenaar8299df92004-07-10 09:47:34 +00001572 exe "keepjumps ".curline
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001573" call Dret("NetBrowseRename")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001574endfun
1575
1576" ---------------------------------------------------------------------
Bram Moolenaar572cb562005-08-05 21:35:02 +00001577" NetRefresh: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001578fun! s:NetRefresh(dirname)
Bram Moolenaar572cb562005-08-05 21:35:02 +00001579" call Dfunc("NetRefresh(dirname<".a:dirname.">)")
1580 set ma
1581 %d
1582 call <SID>NetBrowse(dirname)
1583 redraw!
1584" call Dret("NetRefresh")
1585endfun
1586
1587" ---------------------------------------------------------------------
Bram Moolenaar488c6512005-08-11 20:09:58 +00001588" NetSplit: mode {{{2
1589" =0 : net and o
1590" =1 : net and v
1591" =2 : local and o
1592" =3 : local and v
1593fun! s:NetSplit(mode)
1594" call Dfunc("NetSplit(mode=".a:mode.")")
1595
1596 call s:SaveWinVars()
1597 if a:mode == 0
1598 exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
1599 call s:CopyWinVars()
1600 exe "norm! 0"
1601 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))
1602 elseif a:mode ==1
1603 exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
1604 call s:CopyWinVars()
1605 exe "norm! 0"
1606 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))
1607 elseif a:mode ==2
1608 exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
1609 call s:CopyWinVars()
1610 exe "norm! 0"
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001611 call s:LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))
Bram Moolenaar488c6512005-08-11 20:09:58 +00001612 else
1613 exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
1614 call s:CopyWinVars()
1615 exe "norm! 0"
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001616 call s:LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))
Bram Moolenaar488c6512005-08-11 20:09:58 +00001617 endif
1618
1619" call Dret("NetSplit")
1620endfun
1621
1622" ---------------------------------------------------------------------
Bram Moolenaar843ee412004-06-30 16:16:41 +00001623" NetBrowseX: allows users to write custom functions to operate on {{{2
Bram Moolenaar8299df92004-07-10 09:47:34 +00001624" files given their extension. Passes 0=local, 1=remote
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001625fun! s:NetBrowseX(fname,remote)
Bram Moolenaar8299df92004-07-10 09:47:34 +00001626" call Dfunc("NetBrowseX(".a:fname." remote=".a:remote.")")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001627
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001628 " set up the filename
1629 " (lower case the extension, make a local copy of a remote file)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001630 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001631 if has("win32") || has("win95") || has("win64") || has("win16")
1632 let exten= substitute(exten,'^.*$','\L&\E','')
1633 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001634 let fname= escape(a:fname,"%#")
1635" call Decho("fname<".fname."> after escape()")
1636
1637 if a:remote == 1
1638 " create a local copy
1639 let fname= tempname().".".exten
1640" call Decho("create a local copy of <".a:fname."> as <".fname.">")
1641 exe "keepjumps silent bot 1new ".a:fname
Bram Moolenaar572cb562005-08-05 21:35:02 +00001642 set bh=delete
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001643 exe "w! ".fname
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001644 q
1645 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001646" call Decho("exten<".exten."> "."NetrwFileHandler_".exten."():exists=".exists("*NetrwFileHandler_".exten))
Bram Moolenaar8299df92004-07-10 09:47:34 +00001647
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001648 " set up redirection
1649 if &srr =~ "%s"
1650 let redir= substitute(&srr,"%s","/dev/null"."")
1651 else
1652 let redir= &srr . "/dev/null"
1653 endif
1654" call Decho("redir:".redir.":")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001655
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001656 " execute the file handler
1657 if has("win32") || has("win64")
1658" call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"')
1659 exe 'silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"'
1660 let ret= v:shell_error
1661
1662 elseif has("unix") && executable("kfmclient")
1663" call Decho("exe silent !kfmclient exec '".escape(fname,'%#')."' ".redir)
1664 exe "silent !kfmclient exec '".escape(fname,'%#')."' ".redir
1665 let ret= v:shell_error
1666
1667 elseif has("unix") && executable("gnome-open")
1668" call Decho("exe silent !gnome-open '".escape(fname,'%#')."' ".redir)
1669 exe "silent !gnome-open '".escape(fname,'%#')."'".redir
1670 let ret= v:shell_error
1671
1672 elseif exten != "" && exists("*NetrwFileHandler_".exten)
1673" call Decho("let ret= NetrwFileHandler_".exten.'("'.fname.'")')
Bram Moolenaar8299df92004-07-10 09:47:34 +00001674 exe "let ret= NetrwFileHandler_".exten.'("'.fname.'")'
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001675 endif
1676 redraw!
Bram Moolenaar8299df92004-07-10 09:47:34 +00001677
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001678 " cleanup: remove temporary file,
1679 " delete current buffer if success with handler,
1680 " return to prior buffer (directory listing)
1681 if a:remote == 1 && fname != a:fname
1682" call Decho("deleting temporary file<".fname.">")
1683 call delete(fname)
1684 endif
1685
1686 if a:remote == 1
Bram Moolenaar572cb562005-08-05 21:35:02 +00001687 set bh=delete bt=nofile noswf
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001688 exe "norm! \<c-o>"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001689 redraw!
Bram Moolenaar843ee412004-06-30 16:16:41 +00001690 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00001691
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001692" call Dret("NetBrowseX")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001693endfun
1694
1695" ---------------------------------------------------------------------
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001696" NetBrowseFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2
1697" This function assumes that a long listing will be received. Size, time,
1698" and reverse sorts will be requested of the server but not otherwise
1699" enforced here.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001700fun! s:NetBrowseFtpCmd(path,cmd)
Bram Moolenaar488c6512005-08-11 20:09:58 +00001701" call Dfunc("NetBrowseFtpCmd(path<".a:path."> cmd<".a:cmd.">) netrw_method=".w:netrw_method)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001702
1703 " because WinXX ftp uses unix style input
1704 " curline is one more than the bannercnt in order to account
1705 " for the unwanted first blank line (doing a :put to an empty
1706 " buffer yields a blank first line)
1707 let ffkeep= &ff
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001708 setlocal ma ff=unix
Bram Moolenaar488c6512005-08-11 20:09:58 +00001709 let curline= w:netrw_bannercnt+1
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001710 exe "silent! keepjumps ".curline.",$d"
1711
1712 ".........................................
Bram Moolenaar488c6512005-08-11 20:09:58 +00001713 if w:netrw_method == 2 || w:netrw_method == 5
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001714 " ftp + <.netrc>: Method #2
1715 if a:path != ""
1716 put ='cd '.a:path
1717 endif
1718 exe "put ='".a:cmd."'"
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001719" redraw!|call inputsave()|call input("Pausing...")|call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001720 if exists("g:netrw_port") && g:netrw_port != ""
1721" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
1722 exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
1723 else
1724" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
1725 exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
1726 endif
1727
1728 ".........................................
Bram Moolenaar488c6512005-08-11 20:09:58 +00001729 elseif w:netrw_method == 3
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001730 " ftp + machine,id,passwd,filename: Method #3
1731 setlocal ff=unix
1732 if exists("g:netrw_port") && g:netrw_port != ""
1733 put ='open '.g:netrw_machine.' '.g:netrw_port
1734 else
1735 put ='open '.g:netrw_machine
1736 endif
1737
1738 if exists("g:netrw_ftp") && g:netrw_ftp == 1
1739 put =g:netrw_uid
1740 put =g:netrw_passwd
1741 else
1742 put ='user '.g:netrw_uid.' '.g:netrw_passwd
1743 endif
1744
1745 if a:path != ""
1746 put ='cd '.a:path
1747 endif
1748 exe "put ='".a:cmd."'"
1749
1750 " perform ftp:
1751 " -i : turns off interactive prompting from ftp
1752 " -n unix : DON'T use <.netrc>, even though it exists
1753 " -n win32: quit being obnoxious about password
1754" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
1755 exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n"
1756
1757 ".........................................
1758 else
1759 echo "***warning*** unable to comply with your request<" . choice . ">"
1760 endif
1761
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001762 " cleanup for Windows
1763 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaar83bab712005-08-01 21:58:57 +00001764 keepjumps silent!! %s/\r$//e
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001765 endif
1766 if a:cmd == "dir"
1767 " infer directory/link based on the file permission string
Bram Moolenaar83bab712005-08-01 21:58:57 +00001768 keepjumps silent! g/d\%([-r][-w][-x]\)\{3}/s@$@/@
1769 keepjumps silent! g/l\%([-r][-w][-x]\)\{3}/s/$/@/
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001770 if !g:netrw_longlist
Bram Moolenaar83bab712005-08-01 21:58:57 +00001771 exe "keepjumps silent! ".curline.',$s/^\%(\S\+\s\+\)\{8}//e'
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001772 endif
1773 endif
1774
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001775 " restore settings
1776 let &ff= ffkeep
1777" call Dret("NetBrowseFtpCmd")
1778endfun
1779
1780" ---------------------------------------------------------------------
Bram Moolenaar843ee412004-06-30 16:16:41 +00001781" NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
1782" separated patterns given in g:netrw_list_hide
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001783fun! s:NetrwListHide()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001784" call Dfunc("NetrwListHide() listhide<".g:netrw_list_hide.">")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001785
1786 let listhide= g:netrw_list_hide
1787 while listhide != ""
1788 if listhide =~ ','
1789 let hide = substitute(listhide,',.*$','','e')
1790 let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e')
1791 else
1792 let hide = listhide
1793 let listhide= ""
1794 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001795
1796 " Prune the list by hiding any files which match
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001797" call Decho("pruning <".hide."> listhide<".listhide.">")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001798 if g:netrw_hide == 1
Bram Moolenaar488c6512005-08-11 20:09:58 +00001799 exe 'keepjumps silent '.w:netrw_bannercnt.',$g~'.hide.'~d'
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001800 elseif g:netrw_hide == 2
Bram Moolenaar488c6512005-08-11 20:09:58 +00001801 exe 'keepjumps silent '.w:netrw_bannercnt.',$v~'.hide.'~d'
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001802 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00001803 endwhile
1804
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001805" call Dret("NetrwListHide")
1806endfun
1807
1808" ---------------------------------------------------------------------
1809" NetHideEdit: allows user to edit the file/directory hiding list
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001810fun! s:NetHideEdit(mode)
Bram Moolenaar8299df92004-07-10 09:47:34 +00001811" call Dfunc("NetHideEdit(mode=".a:mode.")")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001812
1813 call inputsave()
1814 let newhide= input("Edit Hiding List: ",g:netrw_list_hide)
1815 call inputrestore()
1816
1817 " refresh the listing
1818 let g:netrw_list_hide= newhide
Bram Moolenaar8299df92004-07-10 09:47:34 +00001819 if a:mode == 0
1820 silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
1821 else
Bram Moolenaar572cb562005-08-05 21:35:02 +00001822 silent call s:LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,"./"))
Bram Moolenaar8299df92004-07-10 09:47:34 +00001823 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001824
1825" call Dret("NetHideEdit")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001826endfun
1827
Bram Moolenaar8299df92004-07-10 09:47:34 +00001828" ---------------------------------------------------------------------
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001829" NetSortSequence: allows user to edit the sorting sequence
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001830fun! s:NetSortSequence(mode)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001831" call Dfunc("NetSortSequence(mode=".a:mode.")")
1832
1833 call inputsave()
1834 let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence)
1835 call inputrestore()
1836
1837 " refresh the listing
1838 let g:netrw_sort_sequence= newsortseq
1839 if a:mode == 0
1840 silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
1841 else
1842 silent call s:LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,"./"))
1843 endif
1844
1845" call Dret("NetSortSequence")
1846endfun
1847
1848" ---------------------------------------------------------------------
Bram Moolenaar8299df92004-07-10 09:47:34 +00001849" NetLongList: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001850fun! s:NetLongList(mode)
Bram Moolenaar8299df92004-07-10 09:47:34 +00001851" call Dfunc("NetLongList(mode=".a:mode.") netrw_longlist=".g:netrw_longlist)
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001852 call netrw#NetSavePosn()
Bram Moolenaar8299df92004-07-10 09:47:34 +00001853
1854 if g:netrw_longlist != 0
1855 " turn long listing off
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001856" call Decho("turn long listing off")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001857 let g:netrw_longlist = 0
1858 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
1859
1860 else
1861 " turn long listing on
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001862" call Decho("turn long listing on")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001863 let g:netrw_longlist = 1
1864 let g:netrw_list_cmd = g:netrw_list_cmd." -l"
1865 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001866 setlocal ma
Bram Moolenaar572cb562005-08-05 21:35:02 +00001867
1868 " clear buffer - this will cause NetBrowse/LocalBrowse to do a refresh
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001869 %d
Bram Moolenaar8299df92004-07-10 09:47:34 +00001870
1871 " refresh the listing
1872 if a:mode == 0
1873 silent call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),"./"))
1874 else
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001875 silent call s:LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,"./"))
Bram Moolenaar8299df92004-07-10 09:47:34 +00001876 endif
1877
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001878 call netrw#NetRestorePosn()
Bram Moolenaar488c6512005-08-11 20:09:58 +00001879
Bram Moolenaar8299df92004-07-10 09:47:34 +00001880" call Dret("NetLongList : g:netrw_longlist=".g:netrw_longlist)
1881endfun
1882
1883" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00001884" NetSaveWordPosn: used by the "s" command in both remote and local {{{2
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001885" browsing. Along with NetRestoreWordPosn(), it keeps the cursor on
1886" the same word even though the sorting has changed its order of appearance.
1887fun! s:NetSaveWordPosn()
1888" call Dfunc("NetSaveWordPosn()")
1889 let s:netrw_saveword= '^'.escape(getline("."),s:netrw_cd_escape).'$'
1890" call Dret("NetSaveWordPosn : saveword<".s:netrw_saveword.">")
1891endfun
1892
1893" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00001894" NetRestoreWordPosn: used by the "s" command; see NetSaveWordPosn() above {{{2
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001895fun! s:NetRestoreWordPosn()
1896" call Dfunc("NetRestoreWordPosn()")
1897 silent! call search(s:netrw_saveword,'w')
1898" call Dret("NetRestoreWordPosn")
1899endfun
1900
1901" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00001902" NetMakeDir: this function makes a directory (both local and remote) {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001903fun! s:NetMakeDir(usrhost)
Bram Moolenaar8299df92004-07-10 09:47:34 +00001904" call Dfunc("NetMakeDir(usrhost<".a:usrhost.">)")
1905
1906 " get name of new directory from user. A bare <CR> will skip.
1907 " if its currently a directory, also request will be skipped, but with
1908 " a message.
1909 call inputsave()
1910 let newdirname= input("Please give directory name: ")
1911 call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001912" call Decho("newdirname<".newdirname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001913
1914 if newdirname == ""
1915" call Dret("NetMakeDir : user aborted with bare <cr>")
1916 return
1917 endif
1918
1919 if a:usrhost == ""
1920
1921 " Local mkdir:
1922 " sanity checks
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001923 let fullnewdir= b:netrw_curdir.'/'.newdirname
1924" call Decho("fullnewdir<".fullnewdir.">")
1925 if isdirectory(fullnewdir)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001926 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001927 echohl WarningMsg | echo "***netrw*** <".newdirname."> is already a directory!" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001928 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001929 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00001930" call Dret("NetMakeDir : directory<".newdirname."> exists previously")
1931 return
1932 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001933 if filereadable(fullnewdir)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001934 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001935 echohl WarningMsg | echo "***netrw*** <".newdirname."> is already a file!" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001936 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001937 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00001938" call Dret("NetMakeDir : file<".newdirname."> exists previously")
1939 return
1940 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00001941
1942 " requested new local directory is neither a pre-existing file or
1943 " directory, so make it!
1944 if exists("*mkdir")
1945 call mkdir(fullnewdir,"p")
1946 else
1947 let netrw_origdir= s:NetGetcwd(1)
1948 exe 'cd '.b:netrw_curdir
1949" call Decho("netrw_origdir<".netrw_origdir."> b:netrw_curdir<".b:netrw_curdir.">")
1950" call Decho("exe silent! !".g:netrw_local_mkdir.' "'.newdirname.'"')
1951 exe "silent! !".g:netrw_local_mkdir.' "'.newdirname.'"'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001952 if !g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00001953 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001954
Bram Moolenaar8299df92004-07-10 09:47:34 +00001955 if v:shell_error == 0
1956 " refresh listing
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001957" call Decho("refresh listing")
1958 let linenum= line(".")
1959 norm! H0
1960 let hline = line(".")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001961 set ma|norm! 2D
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001962 call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,'./'))
1963 exe "norm! ".hline."G0z\<CR>"
1964 exe linenum
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001965 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001966 echohl Error | echo "***netrw*** unable to make directory<".newdirname.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001967 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +00001968 endif
1969 redraw!
1970
1971 else
1972 " Remote mkdir:
1973 let mkdircmd = substitute(g:netrw_mkdir_cmd,'\<HOSTNAME\>',a:usrhost,'')
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001974 let newdirname= "'".'"'.substitute(expand("%"),'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname.'"'."'"
Bram Moolenaar8299df92004-07-10 09:47:34 +00001975" call Decho("exe silent! !".mkdircmd." ".newdirname)
1976 exe "silent! !".mkdircmd." ".newdirname
1977 if v:shell_error == 0
1978 " refresh listing
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001979 let linenum= line(".")
1980 norm! H0
1981 let hline = line(".")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001982 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001983 exe "norm! ".hline."G0z\<CR>"
1984 exe linenum
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001985 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001986 echohl Error | echo "***netrw*** unable to make directory<".newdirname.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001987 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +00001988 endif
1989 redraw!
1990 endif
1991
1992" call Dret("NetMakeDir")
1993endfun
1994
1995" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00001996" NetBookmarkDir: {{{2
Bram Moolenaar572cb562005-08-05 21:35:02 +00001997" 0: (user: <b>) bookmark current directory
1998" 1: (user: <B>) change to the bookmarked directory
1999" 2: (user: <q>) list bookmarks
2000" 3: (LocalBrowse) record current directory history
2001" 4: (user: <u>) go up (previous) bookmark
2002" 5: (user: <U>) go down (next) bookmark
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002003fun! s:NetBookmarkDir(chg,curdir)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002004" call Dfunc("NetBookmarkDir(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count)
Bram Moolenaar488c6512005-08-11 20:09:58 +00002005 if exists("w:netrw_bannercnt") && line(".") <= w:netrw_bannercnt
2006 " looks like a "b" was pressed while in the banner region
2007 if line("$") > w:netrw_bannercnt
2008 exe w:netrw_bannercnt
2009 endif
2010 echo ""
2011" call Dret("NetBookmarkDir - ignoring")
2012 return
2013 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002014
2015 if a:chg == 0
2016 " bookmark the current directory
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00002017 let g:NETRW_BOOKMARKDIR_{v:count}= a:curdir
2018 if !exists("g:NETRW_BOOKMARKMAX")
2019 let g:NETRW_BOOKMARKMAX= v:count
2020 elseif v:count > g:NETRW_BOOKMARKMAX
2021 let g:NETRW_BOOKMARKMAX= v:count
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002022 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002023 echo "bookmarked the current directory"
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002024
2025 elseif a:chg == 1
2026 " change to the bookmarked directory
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00002027 if exists("g:NETRW_BOOKMARKDIR_{v:count}")
2028 exe "e ".g:NETRW_BOOKMARKDIR_{v:count}
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002029 else
2030 echomsg "Sorry, bookmark#".v:count." doesn't exist!"
2031 endif
2032
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002033 elseif a:chg == 2
Bram Moolenaar572cb562005-08-05 21:35:02 +00002034 " list user's bookmarks
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002035 if exists("g:NETRW_BOOKMARKMAX")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002036" call Decho("list bookmarks [0,".g:NETRW_BOOKMARKMAX."]")
2037 let cnt= 0
2038 while cnt <= g:NETRW_BOOKMARKMAX
2039 if exists("g:NETRW_BOOKMARKDIR_{cnt}")
2040" call Decho("Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt})
2041 echo "Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt}
2042 endif
2043 let cnt= cnt + 1
2044 endwhile
2045 endif
2046
2047 " list directory history
2048 let cnt = g:NETRW_DIRHIST_CNT
2049 let first = 1
2050 let histcnt = 0
2051 while ( first || cnt != g:NETRW_DIRHIST_CNT )
2052" call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:NETRW_DIRHIST_CNT)
2053 let histcnt= histcnt + 1
2054 if exists("g:NETRW_DIRHIST_{cnt}")
2055" call Decho("Netrw History#".histcnt.": ".g:NETRW_DIRHIST_{cnt})
2056 echo "Netrw History#".histcnt.": ".g:NETRW_DIRHIST_{cnt}
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002057 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002058 let first = 0
2059 let cnt = ( cnt - 1 ) % g:netrw_dirhistmax
2060 if cnt < 0
2061 let cnt= cnt + g:netrw_dirhistmax
2062 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002063 endwhile
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002064
2065 elseif a:chg == 3
Bram Moolenaar572cb562005-08-05 21:35:02 +00002066 " saves most recently visited directories (when they differ)
2067 if !exists("g:NETRW_DIRHIST_0") || g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT} != a:curdir
2068 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
2069 let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= substitute(a:curdir,'[/\\]$','','e')
2070" call Decho("save dirhist#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
2071 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002072
2073 elseif a:chg == 4
2074 " u: change to the previous directory stored on the history list
2075 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
2076 if g:NETRW_DIRHIST_CNT < 0
2077 let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
2078 endif
2079 if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
2080" call Decho("changedir u#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
2081 exe "e ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
2082 else
2083 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
2084 echo "Sorry, no predecessor directory exists yet"
2085 endif
2086
2087 elseif a:chg == 5
2088 " U: change to the subsequent directory stored on the history list
2089 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
2090 if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
2091" call Decho("changedir U#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
2092 exe "e ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
2093 else
2094 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
2095 if g:NETRW_DIRHIST_CNT < 0
2096 let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
2097 endif
2098 echo "Sorry, no successor directory exists yet"
2099 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002100 endif
2101" call Dret("NetBookmarkDir")
2102endfun
2103
Bram Moolenaar83bab712005-08-01 21:58:57 +00002104" ==========================================
2105" Local Directory Browsing Support: {{{1
2106" ==========================================
Bram Moolenaar8299df92004-07-10 09:47:34 +00002107
2108" ---------------------------------------------------------------------
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002109" LocalBrowse: {{{2
2110fun! s:LocalBrowse(dirname)
2111 " unfortunate interaction -- debugging calls can't be used here;
2112 " the BufEnter event causes triggering when attempts to write to
2113 " the DBG buffer are made.
2114 if isdirectory(a:dirname)
2115 call netrw#DirBrowse(a:dirname)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002116 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002117 " not a directory, ignore it
2118endfun
Bram Moolenaar8299df92004-07-10 09:47:34 +00002119
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002120" ---------------------------------------------------------------------
2121" DirBrowse: supports local file/directory browsing {{{2
2122fun! netrw#DirBrowse(dirname)
2123" call Dfunc("DirBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr()." sortby=".g:netrw_sort_by)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002124" call Dredir("ls!")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002125
Bram Moolenaar488c6512005-08-11 20:09:58 +00002126 if exists("s:netrw_skipbrowse")
2127 unlet s:netrw_skipbrowse
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002128" call Dret("DirBrowse")
Bram Moolenaar488c6512005-08-11 20:09:58 +00002129 return
2130 endif
2131
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002132 if v:version < 603
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002133 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002134 echohl Error | echo "***netrw*** vim version<".v:version."> too old for browsing with netrw" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002135 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002136 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002137" call Dret("DirBrowse : vim version<".v:version."> too old")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002138 return
2139 endif
2140
Bram Moolenaar83bab712005-08-01 21:58:57 +00002141 " record autochdir setting and then insure its unset (tnx to David Fishburn)
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002142 if has("netbeans_intg") || has("sun_workshop")
2143 let keep_autochdir= &autochdir
2144 set noautochdir
2145 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002146
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00002147 " use buffer-oriented WinVars if buffer ones exist but window ones don't
2148 call s:UseBufWinVars()
2149
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002150 " find buffer number of buffer named precisely the same as a:dirname
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002151 let bufnum= bufnr(escape(a:dirname,'\'))
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002152" call Decho("findbuf: bufnum=".bufnum)
2153 if bufnum > 0 && bufname(bufnum) != a:dirname
2154 let ibuf= 1
2155 let buflast= bufnr("$")
2156 while bufname(ibuf) !~ '^'.a:dirname.'\=$' && ibuf <= buflast
2157" call Decho("findbuf: ibuf=".ibuf. " bufname<".bufname(ibuf)."> dirname<".a:dirname.">")
2158 let ibuf= ibuf + 1
2159 endwhile
2160 if ibuf > buflast
2161 let bufnum= -1
2162 else
2163 let bufnum= ibuf
2164 endif
2165" call Decho("findbuf: bufnum=".bufnum." (final)")
2166 endif
2167
2168 " get cleared buffer
2169 if bufnum < 0
2170 if v:version < 700
2171 enew!
2172 else
2173 keepalt enew!
2174 endif
2175" call Decho("enew buffer")
2176 else
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002177 if v:version < 700
2178 exe "b ".bufnum
2179 else
2180 exe "keepalt b ".bufnum
2181 endif
Bram Moolenaar572cb562005-08-05 21:35:02 +00002182 if exists("s:last_sort_by") && g:netrw_sort_by == s:last_sort_by
2183 if getline(2) =~ '^" Directory Listing '
2184 if !g:netrw_keepdir
2185" call Decho("change directory: cd ".b:netrw_curdir)
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002186 exe 'cd '.escape(b:netrw_curdir,s:netrw_cd_escape)
Bram Moolenaar572cb562005-08-05 21:35:02 +00002187 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002188" call Dret("DirBrowse : reusing buffer#".bufnum."<".a:dirname.">")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002189 return
2190 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002191 endif
2192 endif
Bram Moolenaar572cb562005-08-05 21:35:02 +00002193 let s:last_sort_by= g:netrw_sort_by
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002194
2195 " get the new directory name
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002196 if has("win32") || has("win95") || has("win64") || has("win16")
2197 let b:netrw_curdir= substitute(a:dirname,'\\','/','ge')
2198 else
2199 let b:netrw_curdir= a:dirname
2200 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002201 if b:netrw_curdir =~ '[/\\]$'
2202 let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
2203 endif
2204" call Decho("b:netrw_curdir<".b:netrw_curdir.">")
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002205
Bram Moolenaar83bab712005-08-01 21:58:57 +00002206 " make netrw's idea of the current directory vim's if the user wishes
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002207 if !g:netrw_keepdir
Bram Moolenaar83bab712005-08-01 21:58:57 +00002208" call Decho("change directory: cd ".b:netrw_curdir)
Bram Moolenaar488c6512005-08-11 20:09:58 +00002209 try
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002210 exe 'cd '.escape(b:netrw_curdir,s:netrw_cd_escape)
Bram Moolenaar488c6512005-08-11 20:09:58 +00002211 catch /^Vim\%((\a\+)\)\=:E472/
2212 echohl Error | echo "***netrw*** unable to change directory to <".b:netrw_curdir."> (permissions?)" | echohl None
2213 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2214 if exists("w:netrw_prvdir")
2215 let b:netrw_curdir= w:netrw_prvdir
2216 else
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002217" call Dret("DirBrowse : reusing buffer#".bufnum."<".a:dirname.">")
Bram Moolenaar488c6512005-08-11 20:09:58 +00002218 return
2219 endif
2220 endtry
Bram Moolenaar83bab712005-08-01 21:58:57 +00002221 endif
2222
2223 " change the name of the buffer to reflect the b:netrw_curdir
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002224 exe 'silent! file '.escape(b:netrw_curdir,s:netrw_cd_escape)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002225
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002226 " make this buffer modifiable and hidden
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002227 setlocal ma hidden nonu bt=nofile
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00002228 if v:version < 700
2229 silent! %d
2230 else
2231 keepalt silent! %d
2232 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002233
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002234 " ---------------------------
Bram Moolenaar8299df92004-07-10 09:47:34 +00002235 " Perform Directory Listing:
Bram Moolenaar8299df92004-07-10 09:47:34 +00002236
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002237 " save current directory on directory history list
Bram Moolenaar83bab712005-08-01 21:58:57 +00002238 call <SID>NetBookmarkDir(3,b:netrw_curdir)
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002239
Bram Moolenaar8299df92004-07-10 09:47:34 +00002240 " set up all the maps
Bram Moolenaar269ec652004-07-29 08:43:53 +00002241" call Decho("Setting up local browser maps")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002242 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
Bram Moolenaar572cb562005-08-05 21:35:02 +00002243 nnoremap <buffer> <silent> <c-l> :set ma<bar>%d<bar>call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<bar>redraw!<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002244 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'../'))<cr>
Bram Moolenaar572cb562005-08-05 21:35:02 +00002245 nnoremap <buffer> <silent> a :let g:netrw_hide=(g:netrw_hide+1)%3<bar>exe "norm! 0"<bar>call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002246 nnoremap <buffer> <silent> b :<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
2247 nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
2248 nnoremap <buffer> <silent> c :exe "cd ".b:netrw_curdir<cr>
2249 nnoremap <buffer> <silent> d :call <SID>NetMakeDir("")<cr>
2250 nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(1)<cr>
Bram Moolenaar8299df92004-07-10 09:47:34 +00002251 nnoremap <buffer> <silent> i :call <SID>NetLongList(1)<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00002252 nnoremap <buffer> <silent> o :call <SID>NetSplit(2)<cr>
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002253 nnoremap <buffer> <silent> p :exe "norm! 0"<bar>call <SID>LocalPreview(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),1))<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002254 nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<cr>
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002255 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002256 nnoremap <buffer> <silent> s :call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
2257 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(1)<cr>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002258 nnoremap <buffer> <silent> u :<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
2259 nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00002260 nnoremap <buffer> <silent> v :call <SID>NetSplit(3)<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002261 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)<cr>
Bram Moolenaar572cb562005-08-05 21:35:02 +00002262 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
2263 nnoremap <buffer> <silent> <s-up> :Pexplore<cr>
2264 nnoremap <buffer> <silent> <s-down> :Nexplore<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002265 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
2266 exe 'vnoremap <buffer> <silent> <del> :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
2267 exe 'nnoremap <buffer> <silent> D :exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
2268 exe 'vnoremap <buffer> <silent> D :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
2269 exe 'nnoremap <buffer> <silent> R :exe "norm! 0"<bar>call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
2270 exe 'vnoremap <buffer> <silent> R :call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
Bram Moolenaar269ec652004-07-29 08:43:53 +00002271 exe 'nnoremap <buffer> <silent> <Leader>m :call <SID>NetMakeDir("")<cr>'
Bram Moolenaar8299df92004-07-10 09:47:34 +00002272 nnoremap <buffer> ? :he netrw-dir<cr>
2273
2274 " Set up the banner
Bram Moolenaar269ec652004-07-29 08:43:53 +00002275" call Decho("set up banner")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002276 keepjumps put ='\" ============================================================================'
Bram Moolenaar8299df92004-07-10 09:47:34 +00002277 keepjumps 1d
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002278 keepjumps put ='\" Directory Listing (netrw '.g:loaded_netrw.')'
Bram Moolenaar83bab712005-08-01 21:58:57 +00002279 keepjumps put ='\" '.b:netrw_curdir
Bram Moolenaar488c6512005-08-11 20:09:58 +00002280 let w:netrw_bannercnt= 3
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002281
2282 let sortby= g:netrw_sort_by
2283 if g:netrw_sort_direction =~ "^r"
2284 let sortby= sortby." reversed"
2285 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00002286
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002287 " Sorted by...
Bram Moolenaar8299df92004-07-10 09:47:34 +00002288 if g:netrw_sort_by =~ "^n"
Bram Moolenaar269ec652004-07-29 08:43:53 +00002289" call Decho("directories will be sorted by name")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002290 " sorted by name
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002291 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaar8299df92004-07-10 09:47:34 +00002292 keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence
Bram Moolenaar488c6512005-08-11 20:09:58 +00002293 let w:netrw_bannercnt= w:netrw_bannercnt + 2
Bram Moolenaar8299df92004-07-10 09:47:34 +00002294 else
Bram Moolenaar269ec652004-07-29 08:43:53 +00002295" call Decho("directories will be sorted by size or date")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002296 " sorted by size or date
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002297 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaar488c6512005-08-11 20:09:58 +00002298 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaar8299df92004-07-10 09:47:34 +00002299 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002300
2301 " Hiding... -or- Showing...
Bram Moolenaar269ec652004-07-29 08:43:53 +00002302 if g:netrw_list_hide != "" && g:netrw_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002303 if g:netrw_hide == 1
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002304 keepjumps put ='\" Hiding: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002305 else
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002306 keepjumps put ='\" Showing: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002307 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002308 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaar8299df92004-07-10 09:47:34 +00002309 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002310 keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec'
2311 keepjumps put ='\" ============================================================================'
Bram Moolenaar488c6512005-08-11 20:09:58 +00002312 let w:netrw_bannercnt= w:netrw_bannercnt + 2
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002313
2314 " bannercnt should index the line just after the banner
Bram Moolenaar488c6512005-08-11 20:09:58 +00002315 let w:netrw_bannercnt= w:netrw_bannercnt + 1
2316" call Decho("bannercnt=".w:netrw_bannercnt)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002317
2318 " generate the requested directory listing
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002319 call s:LocalBrowseList()
Bram Moolenaar8299df92004-07-10 09:47:34 +00002320
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002321 " set up syntax highlighting
2322 if has("syntax")
2323 setlocal ft=netrwlist
Bram Moolenaar572cb562005-08-05 21:35:02 +00002324 if !exists("g:syntax_on") || !g:syntax_on
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002325 setlocal ft=
2326 endif
2327 endif
2328
Bram Moolenaar8299df92004-07-10 09:47:34 +00002329 " manipulate the directory listing (hide, sort)
Bram Moolenaar488c6512005-08-11 20:09:58 +00002330 if line("$") >= w:netrw_bannercnt
Bram Moolenaar269ec652004-07-29 08:43:53 +00002331 if g:netrw_hide && g:netrw_list_hide != ""
2332 call s:NetrwListHide()
Bram Moolenaar8299df92004-07-10 09:47:34 +00002333 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002334 if line("$") >= w:netrw_bannercnt
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002335
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002336 if g:netrw_sort_by =~ "^n"
2337 call s:SetSort()
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002338
Bram Moolenaar83bab712005-08-01 21:58:57 +00002339 if v:version < 700
Bram Moolenaar488c6512005-08-11 20:09:58 +00002340 exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002341 elseif g:netrw_sort_direction =~ 'n'
Bram Moolenaar488c6512005-08-11 20:09:58 +00002342 exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002343 else
Bram Moolenaar488c6512005-08-11 20:09:58 +00002344 exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
Bram Moolenaar83bab712005-08-01 21:58:57 +00002345 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002346 exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002347
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002348 else
Bram Moolenaar83bab712005-08-01 21:58:57 +00002349 if v:version < 700
Bram Moolenaar488c6512005-08-11 20:09:58 +00002350 exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002351 elseif g:netrw_sort_direction =~ 'n'
Bram Moolenaar488c6512005-08-11 20:09:58 +00002352 exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002353 else
Bram Moolenaar488c6512005-08-11 20:09:58 +00002354 exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
Bram Moolenaar83bab712005-08-01 21:58:57 +00002355 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002356 exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002357 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002358
Bram Moolenaar8299df92004-07-10 09:47:34 +00002359 endif
2360 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002361 if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
2362 exe w:netrw_bannercnt
2363 endif
2364
2365 " record previous current directory
2366 let w:netrw_prvdir= b:netrw_curdir
Bram Moolenaar8299df92004-07-10 09:47:34 +00002367
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00002368 " save certain window-oriented variables into buffer-oriented variables
2369 call s:BufWinVars()
2370
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002371 setlocal noma nomod nonu bh=hide nobl
2372 if has("netbeans_intg") || has("sun_workshop")
2373 let &autochdir= keep_autochdir
2374 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002375
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002376" call Dret("DirBrowse : file<".expand("%:p")."> bufname<".bufname("%").">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002377endfun
2378
2379" ---------------------------------------------------------------------
2380" LocalBrowseList: does the job of "ls" for local directories {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002381fun! s:LocalBrowseList()
Bram Moolenaar83bab712005-08-01 21:58:57 +00002382" call Dfunc("LocalBrowseList() b:netrw_curdir<".b:netrw_curdir.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002383
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002384 " get the list of files contained in the current directory
Bram Moolenaar83bab712005-08-01 21:58:57 +00002385 let dirname = escape(b:netrw_curdir,s:netrw_glob_escape)
2386 let dirnamelen = strlen(b:netrw_curdir)
2387 let filelist = glob(dirname."/*")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002388" call Decho("glob(dirname<".dirname.">,*)=".filelist)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002389 if filelist != ""
2390 let filelist= filelist."\n"
2391 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002392 let filelist= filelist.glob(dirname."/.*")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002393" call Decho("glob(dirname<".dirname.">,.*)=".glob(dirname.".*"))
2394
2395 " if the directory name includes a "$", and possibly other characters,
2396 " the glob() doesn't include "." and ".." entries.
2397 if filelist !~ '[\\/]\.[\\/]\=\(\n\|$\)'
2398" call Decho("forcibly tacking on .")
2399 if filelist == ""
2400 let filelist= dirname."."
2401 else
Bram Moolenaar83bab712005-08-01 21:58:57 +00002402 let filelist= filelist."\n".b:netrw_curdir."."
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002403 endif
2404" call Decho("filelist<".filelist.">")
2405 endif
2406 if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
2407" call Decho("forcibly tacking on ..")
Bram Moolenaar83bab712005-08-01 21:58:57 +00002408 let filelist= filelist."\n".b:netrw_curdir.".."
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002409" call Decho("filelist<".filelist.">")
2410 endif
2411 let filelist= substitute(filelist,'\n\{2,}','\n','ge')
2412
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002413" call Decho("dirname<".dirname.">")
2414" call Decho("dirnamelen<".dirnamelen.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002415" call Decho("filelist<".filelist.">")
2416
2417 while filelist != ""
2418 if filelist =~ '\n'
Bram Moolenaar83bab712005-08-01 21:58:57 +00002419 let filename = substitute(filelist,'\n.*$','','e')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002420 let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
2421 else
Bram Moolenaar83bab712005-08-01 21:58:57 +00002422 let filename = filelist
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00002423 let filelist = ""
Bram Moolenaar8299df92004-07-10 09:47:34 +00002424 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002425 let pfile= filename
2426 if isdirectory(filename)
2427 let pfile= filename."/"
Bram Moolenaar8299df92004-07-10 09:47:34 +00002428 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002429 if pfile =~ '//$'
2430 let pfile= substitute(pfile,'//$','/','e')
2431 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002432 let pfile= strpart(pfile,dirnamelen)
Bram Moolenaar572cb562005-08-05 21:35:02 +00002433 let pfile= substitute(pfile,'^/','','e')
Bram Moolenaar83bab712005-08-01 21:58:57 +00002434" call Decho(" ")
2435" call Decho("filename<".filename.">")
2436" call Decho("pfile <".pfile.">")
2437
Bram Moolenaar8299df92004-07-10 09:47:34 +00002438 if g:netrw_longlist
Bram Moolenaar83bab712005-08-01 21:58:57 +00002439 let sz = getfsize(filename)
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002440 if v:version <= 700
2441 let fsz = strpart(" ",1,15-strlen(sz)).sz
2442 let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
2443 else
2444 let pfile= printf('%-'.g:netrw_maxfilenamelen.'s%15d%s',pfile,sz,getftime(filename))
2445 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002446" call Decho("sz=".sz." fsz=".fsz)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002447 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002448
Bram Moolenaar8299df92004-07-10 09:47:34 +00002449 if g:netrw_sort_by =~ "^t"
2450 " sort by time (handles time up to 1 quintillion seconds, US)
Bram Moolenaar83bab712005-08-01 21:58:57 +00002451" call Decho("getftime(".filename.")=".getftime(filename))
2452 let t = getftime(filename)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002453 let ft = strpart("000000000000000000",1,18-strlen(t)).t
Bram Moolenaar83bab712005-08-01 21:58:57 +00002454" call Decho("exe keepjumps put ='".ft.'/'.filename."'")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002455 let ftpfile= ft.'/'.pfile
2456 keepjumps put=ftpfile
2457
Bram Moolenaar8299df92004-07-10 09:47:34 +00002458 elseif g:netrw_sort_by =~ "^s"
2459 " sort by size (handles file sizes up to 1 quintillion bytes, US)
Bram Moolenaar83bab712005-08-01 21:58:57 +00002460" call Decho("getfsize(".filename.")=".getfsize(filename))
2461 let sz = getfsize(filename)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002462 let fsz = strpart("000000000000000000",1,18-strlen(sz)).sz
Bram Moolenaar83bab712005-08-01 21:58:57 +00002463" call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002464 let fszpfile= fsz.'/'.pfile
2465 keepjumps put =fszpfile
2466
Bram Moolenaar8299df92004-07-10 09:47:34 +00002467 else
2468 " sort by name
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002469" call Decho("exe keepjumps put ='".pfile."'")
2470 keepjumps put=pfile
Bram Moolenaar8299df92004-07-10 09:47:34 +00002471 endif
2472 endwhile
Bram Moolenaar83bab712005-08-01 21:58:57 +00002473 setlocal ts=32
Bram Moolenaar8299df92004-07-10 09:47:34 +00002474
2475" call Dret("LocalBrowseList")
2476endfun
2477
2478" ---------------------------------------------------------------------
2479" LocalBrowseChgDir: constructs a new directory based on the current {{{2
2480" directory and a new directory name
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002481fun! s:LocalBrowseChgDir(dirname,newdir,...)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002482" call Dfunc("LocalBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">) a:0=".a:0)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002483
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002484 let dirname= substitute(a:dirname,'\\','','ge')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002485 let newdir = a:newdir
2486
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002487 if dirname !~ '[\/]$'
Bram Moolenaar8299df92004-07-10 09:47:34 +00002488 " apparently vim is "recognizing" that it is in the home directory and
2489 " is removing the "/". Bad idea, so I have to put it back.
2490 let dirname= dirname.'/'
2491" call Decho("adjusting dirname<".dirname.">")
2492 endif
2493
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002494 if newdir !~ '[\/]$'
Bram Moolenaar8299df92004-07-10 09:47:34 +00002495 " handling a file
2496 let dirname= dirname.newdir
2497" call Decho("handling a file: dirname<".dirname.">")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002498 " this lets NetBrowseX avoid the edit
2499 if a:0 < 1
Bram Moolenaar83bab712005-08-01 21:58:57 +00002500" call Decho("dirname<".dirname."> netrw_cd_escape<".s:netrw_cd_escape.">")
2501" call Decho("about to edit<".escape(dirname,s:netrw_cd_escape).">")
2502 exe "e! ".escape(dirname,s:netrw_cd_escape)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002503 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002504
2505 elseif newdir == './'
2506 " refresh the directory list
2507" call Decho("refresh directory listing")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002508
2509 elseif newdir == '../'
2510 " go up one directory
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002511 let dirname= substitute(dirname,'^\(.*/\)\([^/]\+[\/]$\)','\1','e')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002512" call Decho("go up one dir: dirname<".dirname.">")
2513
2514 else
2515 " go down one directory
2516 let dirname= dirname.newdir
2517" call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
2518 endif
2519
2520" call Dret("LocalBrowseChgDir <".dirname.">")
2521 return dirname
2522endfun
2523
2524" ---------------------------------------------------------------------
Bram Moolenaar572cb562005-08-05 21:35:02 +00002525" LocalBrowseRm: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002526fun! s:LocalBrowseRm(path) range
Bram Moolenaar8299df92004-07-10 09:47:34 +00002527" call Dfunc("LocalBrowseRm(path<".a:path.">)")
2528" call Decho("firstline=".a:firstline." lastline=".a:lastline)
2529
2530 " preparation for removing multiple files/directories
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002531 let ctr = a:firstline
2532 let ret = 0
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002533 let all= 0
Bram Moolenaar8299df92004-07-10 09:47:34 +00002534
2535 " remove multiple files and directories
2536 while ctr <= a:lastline
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002537 exe "keepjumps ".ctr
2538
2539 " sanity checks
Bram Moolenaar488c6512005-08-11 20:09:58 +00002540 if line(".") < w:netrw_bannercnt
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002541 let ctr= ctr + 1
2542 continue
2543 endif
2544 let curword= s:NetGetWord()
2545 if curword == "./" || curword == "../"
2546 let ctr= ctr + 1
2547 continue
2548 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002549
2550 norm! 0
Bram Moolenaar83bab712005-08-01 21:58:57 +00002551 let rmfile= a:path."/".curword
Bram Moolenaar8299df92004-07-10 09:47:34 +00002552" call Decho("rmfile<".rmfile.">")
2553
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002554 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002555 " attempt to remove file
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002556 if !all
2557 echohl Statement
2558 call inputsave()
2559 let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
2560 call inputrestore()
2561 echohl NONE
2562 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
2563 if ok =~ 'a\%[ll]'
2564 let all= 1
2565 endif
2566 endif
2567
2568 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002569 let ret= delete(rmfile)
2570" call Decho("errcode=".v:shell_error." ret=".ret)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002571 elseif ok =~ 'q\%[uit]'
2572 break
Bram Moolenaar8299df92004-07-10 09:47:34 +00002573 endif
2574
2575 else
2576 " attempt to remove directory
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002577 if !all
2578 echohl Statement
2579 call inputsave()
2580 let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
2581 call inputrestore()
2582 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
2583 if ok =~ 'a\%[ll]'
2584 let all= 1
2585 endif
2586 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002587 let rmfile= substitute(rmfile,'[\/]$','','e')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002588
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002589 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002590" call Decho("1st attempt: system(".g:netrw_local_rmdir.' "'.rmfile.'")')
2591 call system(g:netrw_local_rmdir.' "'.rmfile.'"')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002592" call Decho("v:shell_error=".v:shell_error)
2593
2594 if v:shell_error != 0
2595" call Decho("2nd attempt to remove directory<".rmfile.">")
2596 let errcode= delete(rmfile)
2597" call Decho("errcode=".errcode)
2598
2599 if errcode != 0
2600 if has("unix")
2601" call Decho("3rd attempt to remove directory<".rmfile.">")
2602 call system("rm ".rmfile)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002603 if v:shell_error != 0 && !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002604 echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002605 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +00002606 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002607 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002608 echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002609 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +00002610 endif
2611 endif
2612 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002613
2614 elseif ok =~ 'q\%[uit]'
2615 break
Bram Moolenaar8299df92004-07-10 09:47:34 +00002616 endif
2617 endif
2618
2619 let ctr= ctr + 1
2620 endwhile
2621
2622 " refresh the directory
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002623 let curline= line(".")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002624" call Decho("refresh the directory")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002625 call s:LocalRefresh(s:LocalBrowseChgDir(b:netrw_curdir,'./'))
Bram Moolenaar8299df92004-07-10 09:47:34 +00002626 exe curline
2627
2628" call Dret("LocalBrowseRm")
2629endfun
2630
2631" ---------------------------------------------------------------------
2632" LocalBrowseRename: rename a remote file or directory {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002633fun! s:LocalBrowseRename(path) range
Bram Moolenaar8299df92004-07-10 09:47:34 +00002634" call Dfunc("LocalBrowseRename(path<".a:path.">)")
2635
2636 " preparation for removing multiple files/directories
2637 let ctr= a:firstline
2638
2639 " attempt to rename files/directories
2640 while ctr <= a:lastline
2641 exe "keepjumps ".ctr
2642
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002643 " sanity checks
Bram Moolenaar488c6512005-08-11 20:09:58 +00002644 if line(".") < w:netrw_bannercnt
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002645 let ctr= ctr + 1
2646 continue
2647 endif
2648 let curword= s:NetGetWord()
2649 if curword == "./" || curword == "../"
2650 let ctr= ctr + 1
2651 continue
2652 endif
2653
Bram Moolenaar8299df92004-07-10 09:47:34 +00002654 norm! 0
Bram Moolenaar572cb562005-08-05 21:35:02 +00002655 let oldname= a:path."/".curword
Bram Moolenaar8299df92004-07-10 09:47:34 +00002656" call Decho("oldname<".oldname.">")
2657
2658 call inputsave()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002659 let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
Bram Moolenaar8299df92004-07-10 09:47:34 +00002660 call inputrestore()
2661
Bram Moolenaar83bab712005-08-01 21:58:57 +00002662 let ret= rename(oldname,newname)
2663" call Decho("renaming <".oldname."> to <".newname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002664
2665 let ctr= ctr + 1
2666 endwhile
2667
2668 " refresh the directory
2669 let curline= line(".")
Bram Moolenaar269ec652004-07-29 08:43:53 +00002670" call Decho("refresh the directory listing")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002671 call s:LocalRefresh(s:LocalBrowseChgDir(b:netrw_curdir,'./'))
Bram Moolenaar8299df92004-07-10 09:47:34 +00002672 exe "keepjumps ".curline
2673" call Dret("LocalBrowseRename")
2674endfun
2675
2676" ---------------------------------------------------------------------
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002677" LocalPreview: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002678fun! s:LocalPreview(path) range
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002679" call Dfunc("LocalPreview(path<".a:path.">)")
2680 if has("quickfix")
2681 if !isdirectory(a:path)
2682 exe "pedit ".a:path
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002683 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002684 echohl WarningMsg | echo "***netrw*** sorry, cannot preview a directory such as <".a:path.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002685 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002686 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002687 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002688 echohl WarningMsg | echo "***netrw*** sorry, to preview your vim needs the quickfix feature compiled in" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002689 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002690 endif
2691" call Dret("LocalPreview")
2692endfun
2693
2694" ---------------------------------------------------------------------
Bram Moolenaar572cb562005-08-05 21:35:02 +00002695" LocalRefresh: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002696fun! s:LocalRefresh(dirname)
Bram Moolenaar572cb562005-08-05 21:35:02 +00002697" call Dfunc("LocalRefresh(dirname<".a:dirname.">)")
2698 set ma
2699 %d
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002700 call s:LocalBrowse(a:dirname)
Bram Moolenaar572cb562005-08-05 21:35:02 +00002701 redraw!
2702" call Dret("LocalRefresh")
2703endfun
2704
2705" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00002706" Explore: launch the local browser in the directory of the current file {{{2
2707" dosplit==0: the window will be split iff the current file has
2708" been modified
2709" dosplit==1: the window will be split before running the local
2710" browser
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002711fun! netrw#Explore(indx,dosplit,style,...)
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002712" call Dfunc("Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.")")
Bram Moolenaar83bab712005-08-01 21:58:57 +00002713
2714 " if dosplit or file has been modified
2715 if a:dosplit || &modified
Bram Moolenaar488c6512005-08-11 20:09:58 +00002716 call <SID>SaveWinVars()
2717
Bram Moolenaar83bab712005-08-01 21:58:57 +00002718 if a:style == 0 " Explore, Sexplore
2719 exe g:netrw_winsize."wincmd s"
Bram Moolenaar488c6512005-08-11 20:09:58 +00002720" call Decho("style=0: Explore or Sexplore")
2721
Bram Moolenaar83bab712005-08-01 21:58:57 +00002722 elseif a:style == 1 "Explore!, Sexplore!
2723 exe g:netrw_winsize."wincmd v"
Bram Moolenaar488c6512005-08-11 20:09:58 +00002724" call Decho("style=1: Explore! or Sexplore!")
2725
Bram Moolenaar83bab712005-08-01 21:58:57 +00002726 elseif a:style == 2 " Hexplore
2727 exe "bel ".g:netrw_winsize."wincmd s"
Bram Moolenaar488c6512005-08-11 20:09:58 +00002728" call Decho("style=2: Hexplore")
2729
Bram Moolenaar83bab712005-08-01 21:58:57 +00002730 elseif a:style == 3 " Hexplore!
2731 exe "abo ".g:netrw_winsize."wincmd s"
Bram Moolenaar488c6512005-08-11 20:09:58 +00002732" call Decho("style=3: Hexplore!")
2733
Bram Moolenaar83bab712005-08-01 21:58:57 +00002734 elseif a:style == 4 " Vexplore
2735 exe "lefta ".g:netrw_winsize."wincmd v"
Bram Moolenaar488c6512005-08-11 20:09:58 +00002736" call Decho("style=4: Vexplore")
2737
Bram Moolenaar83bab712005-08-01 21:58:57 +00002738 elseif a:style == 5 " Vexplore!
2739 exe "rightb ".g:netrw_winsize."wincmd v"
Bram Moolenaar488c6512005-08-11 20:09:58 +00002740" call Decho("style=5: Vexplore!")
Bram Moolenaar83bab712005-08-01 21:58:57 +00002741 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002742 call s:CopyWinVars()
Bram Moolenaar83bab712005-08-01 21:58:57 +00002743 endif
2744 norm! 0
2745
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002746 if a:1 == "" && a:indx >= 0
Bram Moolenaar488c6512005-08-11 20:09:58 +00002747 " Explore Hexplore Vexplore Sexplore
2748 let newdir= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
2749 if newdir =~ '^scp:' || newdir =~ '^ftp:'
2750" call Decho("calling NetBrowse(newdir<".newdir.">)")
2751 call s:NetBrowse(newdir)
2752 else
2753" call Decho("calling LocalBrowse(newdir<".newdir.">)")
2754 call s:LocalBrowse(newdir)
2755 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002756
Bram Moolenaar572cb562005-08-05 21:35:02 +00002757 elseif a:1 =~ '\*\*/' || a:indx < 0
Bram Moolenaar488c6512005-08-11 20:09:58 +00002758 " Nexplore Pexplore -or- Explore **/...
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002759
Bram Moolenaar488c6512005-08-11 20:09:58 +00002760 if has("path_extra") && v:version >= 700
2761 if !exists("w:netrw_explore_indx")
2762 let w:netrw_explore_indx= 0
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002763 endif
2764 let indx = a:indx
2765 if indx == -1
Bram Moolenaar488c6512005-08-11 20:09:58 +00002766 let indx= w:netrw_explore_indx + 1
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002767 elseif indx == -2
Bram Moolenaar488c6512005-08-11 20:09:58 +00002768 let indx= w:netrw_explore_indx - 1
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002769 else
Bram Moolenaar488c6512005-08-11 20:09:58 +00002770 let w:netrw_explore_indx = 0
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00002771 if !exists("b:netrw_curdir")
Bram Moolenaar488c6512005-08-11 20:09:58 +00002772 let b:netrw_curdir= getcwd()
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00002773 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002774 let w:netrw_explore_list = split(expand(b:netrw_curdir."/".a:1),'\n')
2775 let w:netrw_explore_listlen = len(w:netrw_explore_list)
2776 if w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/'
Bram Moolenaar572cb562005-08-05 21:35:02 +00002777 echohl WarningMsg | echo "***netrw*** no files matched" | echohl None
2778 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2779" call Dret("Explore")
2780 return
2781 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002782 endif
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00002783
2784 " NetrwStatusLine support
Bram Moolenaar488c6512005-08-11 20:09:58 +00002785 let w:netrw_explore_indx= indx
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00002786 if !exists("s:netrw_explore_stl")
2787 let s:netrw_explore_stl= &stl
2788 endif
2789 set stl=%f\ %h%m%r%=%{NetrwStatusLine()}
Bram Moolenaar488c6512005-08-11 20:09:58 +00002790" call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002791
2792 " sanity check
Bram Moolenaar488c6512005-08-11 20:09:58 +00002793 if indx >= w:netrw_explore_listlen || indx < 0
2794 let indx= (indx < 0)? 0 : ( w:netrw_explore_listlen - 1 )
Bram Moolenaar572cb562005-08-05 21:35:02 +00002795 echohl WarningMsg | echo "***netrw*** no more files match Explore pattern" | echohl None
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002796 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2797" call Dret("Explore")
2798 return
2799 endif
2800
Bram Moolenaar488c6512005-08-11 20:09:58 +00002801 exe "let dirfile= w:netrw_explore_list[".indx."]"
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002802" call Decho("dirfile<".dirfile."> indx=".indx)
2803 let newdir= substitute(dirfile,'/[^/]*$','','e')
2804" call Decho("newdir<".newdir.">")
2805" call Decho("calling LocalBrowse(newdir<".newdir.">)")
2806 call s:LocalBrowse(newdir)
2807 call search(substitute(dirfile,"^.*/","",""),"W")
Bram Moolenaar488c6512005-08-11 20:09:58 +00002808 let w:netrw_explore_mtchcnt = indx + 1
2809 let w:netrw_explore_bufnr = bufnr(".")
2810 let w:netrw_explore_line = line(".")
2811" call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002812
2813 else
2814 if v:version < 700
Bram Moolenaar572cb562005-08-05 21:35:02 +00002815 echohl WarningMsg | echo "***netrw*** you need vim version 7.0 or later for Exploring with **!" | echohl None
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002816 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002817 echohl WarningMsg | echo "***netrw*** your vim needs the +path_extra feature for Exploring with **!" | echohl None | echohl None
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002818 endif
2819 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2820 endif
2821
Bram Moolenaar83bab712005-08-01 21:58:57 +00002822 else
2823 let newdir= a:1
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002824" call Decho("calling LocalBrowse(newdir<".newdir.">)")
2825 call s:LocalBrowse(newdir)
Bram Moolenaar83bab712005-08-01 21:58:57 +00002826 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002827
2828" call Dret("Explore")
2829endfun
2830
2831" ---------------------------------------------------------------------
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00002832" NetrwStatusLine: {{{2
2833fun! NetrwStatusLine()
Bram Moolenaar488c6512005-08-11 20:09:58 +00002834" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".")
2835 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")
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00002836 let &stl= s:netrw_explore_stl
Bram Moolenaar488c6512005-08-11 20:09:58 +00002837 if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
2838 if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00002839 return ""
2840 else
Bram Moolenaar488c6512005-08-11 20:09:58 +00002841 return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00002842 endif
2843endfun
2844
2845" ---------------------------------------------------------------------
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002846" NetGetcwd: get the current directory. {{{2
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002847" Change backslashes to forward slashes, if any.
2848" If doesc is true, escape certain troublesome characters
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002849fun! s:NetGetcwd(doesc)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002850" call Dfunc("NetGetcwd(doesc=".a:doesc.")")
2851 let curdir= substitute(getcwd(),'\\','/','ge')
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002852 if curdir !~ '[\/]$'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002853 let curdir= curdir.'/'
2854 endif
2855 if a:doesc
2856 let curdir= escape(curdir,s:netrw_cd_escape)
2857 endif
2858" call Dret("NetGetcwd <".curdir.">")
2859 return curdir
2860endfun
2861
2862" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00002863" NetMethod: determine method of transfer {{{1
2864" method == 1: rcp
2865" 2: ftp + <.netrc>
2866" 3: ftp + machine, id, password, and [path]filename
2867" 4: scp
2868" 5: http (wget)
2869" 6: cadaver
2870" 7: rsync
2871" 8: fetch
2872" 9: sftp
2873fun! s:NetMethod(choice) " globals: method machine id passwd fname
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002874" call Dfunc("NetMethod(a:choice<".a:choice.">)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002875
2876 " initialization
2877 let b:netrw_method = 0
2878 let g:netrw_machine = ""
2879 let b:netrw_fname = ""
2880 let g:netrw_port = ""
2881
2882 " Patterns:
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002883 " mipf : a:machine a:id password filename Use ftp
2884 " mf : a:machine filename Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002885 " ftpurm : ftp://[user@]host[[#:]port]/filename Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002886 " rcpurm : rcp://[user@]host/filename Use rcp
2887 " rcphf : [user@]host:filename Use rcp
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002888 " scpurm : scp://[user@]host[[#:]port]/filename Use scp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002889 " httpurm : http://[user@]host/filename Use wget
2890 " davurm : [s]dav://host[:port]/path Use cadaver
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002891 " rsyncurm : rsync://host[:port]/path Use rsync
2892 " fetchurm : fetch://[user@]host[:http]/filename Use fetch (defaults to ftp, override for http)
2893 " sftpurm : sftp://[user@]host/filename Use scp
2894 let mipf = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
2895 let mf = '^\(\S\+\)\s\+\(\S\+\)$'
2896 let ftpurm = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
Bram Moolenaar83bab712005-08-01 21:58:57 +00002897 let rcpurm = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002898 let rcphf = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
2899 let scpurm = '^scp://\([^/]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
2900 let httpurm = '^http://\([^/]\{-}\)\(/.*\)\=$'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002901 let davurm = '^s\=dav://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002902 let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
2903 let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
2904 let sftpurm = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
2905
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002906" call Decho("determine method:")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002907 " Determine Method
2908 " rcp://user@hostname/...path-to-file
2909 if match(a:choice,rcpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002910" call Decho("rcp://...")
Bram Moolenaar83bab712005-08-01 21:58:57 +00002911 let b:netrw_method = 1
2912 let userid = substitute(a:choice,rcpurm,'\1',"")
2913 let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"")
2914 let b:netrw_fname = substitute(a:choice,rcpurm,'\3',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002915 if userid != ""
2916 let g:netrw_uid= userid
Bram Moolenaar071d4272004-06-13 20:20:40 +00002917 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002918
2919 " scp://user@hostname/...path-to-file
2920 elseif match(a:choice,scpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002921" call Decho("scp://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002922 let b:netrw_method = 4
Bram Moolenaar83bab712005-08-01 21:58:57 +00002923 let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
2924 let g:netrw_port = substitute(a:choice,scpurm,'\2',"")
2925 let b:netrw_fname = substitute(a:choice,scpurm,'\3',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002926
2927 " http://user@hostname/...path-to-file
2928 elseif match(a:choice,httpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002929" call Decho("http://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002930 let b:netrw_method = 5
2931 let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
2932 let b:netrw_fname = substitute(a:choice,httpurm,'\2',"")
2933
2934 " dav://hostname[:port]/..path-to-file..
2935 elseif match(a:choice,davurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002936" call Decho("dav://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002937 let b:netrw_method= 6
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002938 if a:choice =~ '^s'
2939 let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
2940 else
2941 let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
2942 endif
2943 let b:netrw_fname = substitute(a:choice,davurm,'\3',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002944
2945 " rsync://user@hostname/...path-to-file
2946 elseif match(a:choice,rsyncurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002947" call Decho("rsync://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002948 let b:netrw_method = 7
2949 let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
2950 let b:netrw_fname = substitute(a:choice,rsyncurm,'\2',"")
2951
2952 " ftp://[user@]hostname[[:#]port]/...path-to-file
2953 elseif match(a:choice,ftpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002954" call Decho("ftp://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002955 let userid = substitute(a:choice,ftpurm,'\2',"")
2956 let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
2957 let g:netrw_port = substitute(a:choice,ftpurm,'\4',"")
2958 let b:netrw_fname = substitute(a:choice,ftpurm,'\5',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002959 if userid != ""
2960 let g:netrw_uid= userid
2961 endif
2962 if exists("g:netrw_uid") && exists("g:netrw_passwd")
2963 let b:netrw_method = 3
2964 else
2965 if filereadable(expand("$HOME/.netrc")) && !exists("g:netrw_ignorenetrc")
2966 let b:netrw_method= 2
2967 else
2968 if !exists("g:netrw_uid") || g:netrw_uid == ""
2969 call NetUserPass()
2970 elseif !exists("g:netrw_passwd") || g:netrw_passwd == ""
2971 call NetUserPass(g:netrw_uid)
2972 " else just use current g:netrw_uid and g:netrw_passwd
2973 endif
2974 let b:netrw_method= 3
2975 endif
2976 endif
2977
2978 elseif match(a:choice,fetchurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002979" call Decho("fetch://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002980 let b:netrw_method = 8
2981 let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
2982 let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
2983 let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
2984 let b:netrw_fname = substitute(a:choice,fetchurm,'\5',"")
2985
2986 " Issue an ftp : "machine id password [path/]filename"
2987 elseif match(a:choice,mipf) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002988" call Decho("(ftp) host id pass file")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002989 let b:netrw_method = 3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002990 let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
2991 let g:netrw_uid = substitute(a:choice,mipf,'\2',"")
2992 let g:netrw_passwd = substitute(a:choice,mipf,'\3',"")
2993 let b:netrw_fname = substitute(a:choice,mipf,'\4',"")
2994
2995 " Issue an ftp: "hostname [path/]filename"
2996 elseif match(a:choice,mf) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002997" call Decho("(ftp) host file")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00002998 if exists("g:netrw_uid") && exists("g:netrw_passwd")
2999 let b:netrw_method = 3
3000 let g:netrw_machine = substitute(a:choice,mf,'\1',"")
3001 let b:netrw_fname = substitute(a:choice,mf,'\2',"")
3002
3003 elseif filereadable(expand("$HOME/.netrc"))
3004 let b:netrw_method = 2
3005 let g:netrw_machine = substitute(a:choice,mf,'\1',"")
3006 let b:netrw_fname = substitute(a:choice,mf,'\2',"")
3007 endif
3008
3009 " sftp://user@hostname/...path-to-file
3010 elseif match(a:choice,sftpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003011" call Decho("sftp://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003012 let b:netrw_method = 9
3013 let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
3014 let b:netrw_fname = substitute(a:choice,sftpurm,'\2',"")
3015
3016 " Issue an rcp: hostname:filename" (this one should be last)
3017 elseif match(a:choice,rcphf) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003018" call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003019 let b:netrw_method = 1
3020 let userid = substitute(a:choice,rcphf,'\2',"")
3021 let g:netrw_machine= substitute(a:choice,rcphf,'\3',"")
3022 let b:netrw_fname = substitute(a:choice,rcphf,'\4',"")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003023" call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
3024" call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
3025" call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
3026" call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003027 if userid != ""
3028 let g:netrw_uid= userid
3029 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003030 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003031 " don't let PCs try <.netrc>
3032 let b:netrw_method = 3
3033 endif
3034
3035 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003036 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00003037 echohl Error | echo "***netrw*** cannot determine method" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003038 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003039 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003040 let b:netrw_method = -1
Bram Moolenaar071d4272004-06-13 20:20:40 +00003041 endif
Bram Moolenaar81695252004-12-29 20:58:21 +00003042
3043 " remove any leading [:#] from port number
3044 if g:netrw_port != ""
3045 let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
3046 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003047
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003048" call Decho("a:choice <".a:choice.">")
3049" call Decho("b:netrw_method <".b:netrw_method.">")
3050" call Decho("g:netrw_machine<".g:netrw_machine.">")
3051" call Decho("g:netrw_port <".g:netrw_port.">")
3052" if exists("g:netrw_uid") "Decho
3053" call Decho("g:netrw_uid <".g:netrw_uid.">")
3054" endif "Decho
3055" if exists("g:netrw_passwd") "Decho
3056" call Decho("g:netrw_passwd <".g:netrw_passwd.">")
3057" endif "Decho
3058" call Decho("b:netrw_fname <".b:netrw_fname.">")
3059" call Dret("NetMethod")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003060endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +00003061
3062" ------------------------------------------------------------------------
3063" NetUserPass: set username and password for subsequent ftp transfer {{{1
3064" Usage: :call NetUserPass() -- will prompt for userid and password
3065" :call NetUserPass("uid") -- will prompt for password
3066" :call NetUserPass("uid","password") -- sets global userid and password
3067fun! NetUserPass(...)
3068
3069 " get/set userid
3070 if a:0 == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003071" call Dfunc("NetUserPass(a:0<".a:0.">)")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003072 if !exists("g:netrw_uid") || g:netrw_uid == ""
3073 " via prompt
3074 let g:netrw_uid= input('Enter username: ')
3075 endif
3076 else " from command line
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003077" call Dfunc("NetUserPass(a:1<".a:1.">) {")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003078 let g:netrw_uid= a:1
3079 endif
3080
3081 " get password
3082 if a:0 <= 1 " via prompt
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003083" call Decho("a:0=".a:0." case <=1:")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003084 let g:netrw_passwd= inputsecret("Enter Password: ")
3085 else " from command line
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003086" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003087 let g:netrw_passwd=a:2
3088 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003089" call Dret("NetUserPass")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003090endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +00003091
3092" ------------------------------------------------------------------------
3093" NetOptionSave: save options and set to "standard" form {{{1
3094fun!s:NetOptionSave()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003095" call Dfunc("NetOptionSave()")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003096
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003097 " Get Temporary Filename
3098 let s:aikeep = &ai
3099 let s:cinkeep = &cin
3100 let s:cinokeep = &cino
3101 let s:comkeep = &com
3102 let s:cpokeep = &cpo
3103 let s:dirkeep = getcwd()
3104 let s:gdkeep = &gd
3105 let s:twkeep = &tw
Bram Moolenaar8299df92004-07-10 09:47:34 +00003106 setlocal cino =
3107 setlocal com =
3108 setlocal cpo -=aA
3109 setlocal nocin noai
3110 setlocal tw =0
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003111 if has("win32") && !has("win95")
3112 let s:swfkeep= &swf
Bram Moolenaar8299df92004-07-10 09:47:34 +00003113 setlocal noswf
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003114" call Decho("setting s:swfkeep to <".&swf.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003115 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003116
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003117" call Dret("NetOptionSave")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003118endfun
3119
3120" ------------------------------------------------------------------------
3121" NetOptionRestore: restore options {{{1
3122fun! s:NetOptionRestore()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003123" call Dfunc("NetOptionRestore()")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003124
3125 let &ai = s:aikeep
3126 let &cin = s:cinkeep
3127 let &cino = s:cinokeep
3128 let &com = s:comkeep
3129 let &cpo = s:cpokeep
3130 exe "lcd ".s:dirkeep
3131 let &gd = s:gdkeep
3132 let &tw = s:twkeep
3133 if exists("s:swfkeep")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003134 if &directory == ""
3135 " user hasn't specified a swapfile directory;
3136 " netrw will temporarily make the swapfile
3137 " directory the current local one.
3138 let &directory = getcwd()
3139 silent! let &swf = s:swfkeep
3140 set directory=
3141 else
3142 let &swf= s:swfkeep
3143 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003144 unlet s:swfkeep
3145 endif
3146 unlet s:aikeep
3147 unlet s:cinkeep
3148 unlet s:cinokeep
3149 unlet s:comkeep
3150 unlet s:cpokeep
3151 unlet s:gdkeep
3152 unlet s:twkeep
3153 unlet s:dirkeep
3154
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003155" call Dret("NetOptionRestore")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003156endfun
3157
3158" ------------------------------------------------------------------------
3159" NetReadFixup: this sort of function is typically written by the user {{{1
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003160" to handle extra junk that their system's ftp dumps
3161" into the transfer. This function is provided as an
3162" example and as a fix for a Windows 95 problem: in my
3163" experience, win95's ftp always dumped four blank lines
3164" at the end of the transfer.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003165if has("win95") && g:netrw_win95ftp
3166 fun! NetReadFixup(method, line1, line2)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003167" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003168 if method == 3 " ftp (no <.netrc>)
3169 let fourblanklines= line2 - 3
3170 silent fourblanklines.",".line2."g/^\s*/d"
3171 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003172" call Dret("NetReadFixup")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003173 endfun
3174endif
3175
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003176" ---------------------------------------------------------------------
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003177" NetSort: Piet Delport's BISort2() function, modified to take a range {{{1
Bram Moolenaar83bab712005-08-01 21:58:57 +00003178if v:version < 700
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003179 fun! s:NetSort() range
Bram Moolenaar83bab712005-08-01 21:58:57 +00003180" " call Dfunc("NetSort()")
3181
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003182 let i = a:firstline + 1
3183 while i <= a:lastline
3184 " find insertion point via binary search
3185 let i_val = getline(i)
3186 let lo = a:firstline
3187 let hi = i
3188 while lo < hi
Bram Moolenaar83bab712005-08-01 21:58:57 +00003189 let mid = (lo + hi) / 2
3190 let mid_val = getline(mid)
3191 if g:netrw_sort_direction =~ '^n'
3192 " normal sorting order
3193 if i_val < mid_val
3194 let hi = mid
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003195 else
Bram Moolenaar83bab712005-08-01 21:58:57 +00003196 let lo = mid + 1
3197 if i_val == mid_val | break | endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003198 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00003199 else
3200 " reverse sorting order
3201 if i_val > mid_val
3202 let hi = mid
3203 else
3204 let lo = mid + 1
3205 if i_val == mid_val | break | endif
3206 endif
3207 endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003208 endwhile
3209 " do insert
3210 if lo < i
Bram Moolenaar83bab712005-08-01 21:58:57 +00003211 exe 'keepjumps '.i.'d_'
3212 keepjumps call append(lo - 1, i_val)
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003213 endif
3214 let i = i + 1
3215 endwhile
Bram Moolenaar83bab712005-08-01 21:58:57 +00003216
3217" " call Dret("NetSort")
3218 endfun
3219endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003220
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003221" ---------------------------------------------------------------------
Bram Moolenaar8299df92004-07-10 09:47:34 +00003222" SetSort: sets up the sort based on the g:netrw_sort_sequence {{{1
3223" What this function does is to compute a priority for the patterns
3224" in the g:netrw_sort_sequence. It applies a substitute to any
3225" "files" that satisfy each pattern, putting the priority / in
3226" front. An "*" pattern handles the default priority.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003227fun! s:SetSort()
Bram Moolenaar488c6512005-08-11 20:09:58 +00003228" call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
Bram Moolenaar8299df92004-07-10 09:47:34 +00003229 if g:netrw_longlist
3230 let seqlist = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
3231 else
3232 let seqlist = g:netrw_sort_sequence
3233 endif
3234 " sanity check -- insure that * appears somewhere
3235 if seqlist == ""
3236 let seqlist= '*'
3237 elseif seqlist !~ '\*'
3238 let seqlist= seqlist.',*'
3239 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003240 let priority = 1
3241 while seqlist != ""
3242 if seqlist =~ ','
3243 let seq = substitute(seqlist,',.*$','','e')
3244 let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e')
3245 else
3246 let seq = seqlist
3247 let seqlist = ""
3248 endif
3249 let eseq= escape(seq,'/')
3250 if priority < 10
3251 let spriority= "00".priority.'\/'
3252 elseif priority < 100
3253 let spriority= "0".priority.'\/'
3254 else
3255 let spriority= priority.'\/'
3256 endif
3257" call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
3258
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003259 " sanity check
Bram Moolenaar488c6512005-08-11 20:09:58 +00003260 if w:netrw_bannercnt > line("$")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003261 " apparently no files were left after a Hiding pattern was used
3262" call Dret("SetSort : no files left after hiding")
3263 return
3264 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003265 if seq == '*'
Bram Moolenaar488c6512005-08-11 20:09:58 +00003266 exe 'keepjumps silent '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003267 else
Bram Moolenaar488c6512005-08-11 20:09:58 +00003268 exe 'keepjumps silent '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003269 endif
3270 let priority = priority + 1
3271 endwhile
3272
Bram Moolenaar488c6512005-08-11 20:09:58 +00003273 exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003274
3275" call Dret("SetSort")
3276endfun
3277
Bram Moolenaar488c6512005-08-11 20:09:58 +00003278" ---------------------------------------------------------------------
3279" SaveWinVars: (used by Explore()) {{{1
3280fun! s:SaveWinVars()
3281" call Dfunc("SaveWinVars()")
3282 if exists("w:netrw_bannercnt") |let s:bannercnt = w:netrw_bannercnt |endif
3283 if exists("w:netrw_method") |let s:method = w:netrw_method |endif
3284 if exists("w:netrw_prvdir") |let s:prvdir = w:netrw_prvdir |endif
3285 if exists("w:netrw_explore_indx") |let s:explore_indx = w:netrw_explore_indx |endif
3286 if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif
3287 if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif
3288 if exists("w:netrw_explore_bufnr") |let s:explore_bufnr = w:netrw_explore_bufnr |endif
3289 if exists("w:netrw_explore_line") |let s:explore_line = w:netrw_explore_line |endif
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00003290 if exists("w:netrw_explore_list") |let s:explore_list = w:netrw_explore_list |endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003291" call Dret("SaveWinVars")
3292endfun
3293
3294" ---------------------------------------------------------------------
3295" CopyWinVars: (used by Explore()) {{{1
3296fun! s:CopyWinVars()
3297" call Dfunc("CopyWinVars()")
3298 if exists("s:bannercnt") |let w:netrw_bannercnt = s:bannercnt |unlet s:bannercnt |endif
3299 if exists("s:method") |let w:netrw_method = s:method |unlet s:method |endif
3300 if exists("s:prvdir") |let w:netrw_prvdir = s:prvdir |unlet s:prvdir |endif
3301 if exists("s:explore_indx") |let w:netrw_explore_indx = s:explore_indx |unlet s:explore_indx |endif
3302 if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif
3303 if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif
3304 if exists("s:explore_bufnr") |let w:netrw_explore_bufnr = s:explore_bufnr |unlet s:explore_bufnr |endif
3305 if exists("s:explore_line") |let w:netrw_explore_line = s:explore_line |unlet s:explore_line |endif
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00003306 if exists("s:explore_list") |let w:netrw_explore_list = s:explore_list |unlet s:explore_list |endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003307" call Dret("CopyWinVars")
3308endfun
3309
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00003310" ---------------------------------------------------------------------
3311" BufWinVars: (used by NetBrowse() and LocalBrowse()) {{{1
3312" To allow separate windows to have their own activities, such as
3313" Explore **/pattern, several variables have been made window-oriented.
3314" However, when the user splits a browser window (ex: ctrl-w s), these
3315" variables are not inherited by the new window. BufWinVars() and
3316" UseBufWinVars() get around that.
3317fun! s:BufWinVars()
3318" call Dfunc("BufWinVars()")
3319 if exists("w:netrw_bannercnt") |let b:netrw_bannercnt = w:netrw_bannercnt |endif
3320 if exists("w:netrw_method") |let b:netrw_method = w:netrw_method |endif
3321 if exists("w:netrw_prvdir") |let b:netrw_prvdir = w:netrw_prvdir |endif
3322 if exists("w:netrw_explore_indx") |let b:netrw_explore_indx = w:netrw_explore_indx |endif
3323 if exists("w:netrw_explore_listlen")|let b:netrw_explore_listlen = w:netrw_explore_listlen|endif
3324 if exists("w:netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt = w:netrw_explore_mtchcnt|endif
3325 if exists("w:netrw_explore_bufnr") |let b:netrw_explore_bufnr = w:netrw_explore_bufnr |endif
3326 if exists("w:netrw_explore_line") |let b:netrw_explore_line = w:netrw_explore_line |endif
3327 if exists("w:netrw_explore_list") |let b:netrw_explore_list = w:netrw_explore_list |endif
3328" call Dret("BufWinVars")
3329endfun
3330
3331" ---------------------------------------------------------------------
3332" UseBufWinVars: (used by NetBrowse() and LocalBrowse() {{{1
3333" Matching function to BufferWinVars()
3334fun! s:UseBufWinVars()
3335" call Dfunc("UseBufWinVars()")
3336 if exists("b:netrw_bannercnt") && !exists("w:netrw_bannercnt") |let w:netrw_bannercnt = b:netrw_bannercnt |endif
3337 if exists("b:netrw_method") && !exists("w:netrw_method") |let w:netrw_method = b:netrw_method |endif
3338 if exists("b:netrw_prvdir") && !exists("w:netrw_prvdir") |let w:netrw_prvdir = b:netrw_prvdir |endif
3339 if exists("b:netrw_explore_indx") && !exists("w:netrw_explore_indx") |let w:netrw_explore_indx = b:netrw_explore_indx |endif
3340 if exists("b:netrw_explore_listlen") && !exists("w:netrw_explore_listlen")|let w:netrw_explore_listlen = b:netrw_explore_listlen|endif
3341 if exists("b:netrw_explore_mtchcnt") && !exists("w:netrw_explore_mtchcnt")|let w:netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif
3342 if exists("b:netrw_explore_bufnr") && !exists("w:netrw_explore_bufnr") |let w:netrw_explore_bufnr = b:netrw_explore_bufnr |endif
3343 if exists("b:netrw_explore_line") && !exists("w:netrw_explore_line") |let w:netrw_explore_line = b:netrw_explore_line |endif
3344 if exists("b:netrw_explore_list") && !exists("w:netrw_explore_list") |let w:netrw_explore_list = b:netrw_explore_list |endif
3345" call Dret("UseBufWinVars")
3346endfun
3347
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003348" ------------------------------------------------------------------------
3349" Settings Restoration: {{{1
Bram Moolenaar83bab712005-08-01 21:58:57 +00003350let &cpo= s:keepcpo
3351unlet s:keepcpo
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003352
Bram Moolenaar071d4272004-06-13 20:20:40 +00003353" ------------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00003354" Modelines: {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +00003355" vim:ts=8 fdm=marker