blob: d989dc00f28ca4c81ddc5fd6a000aee69995f943 [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
Bram Moolenaar61036992005-10-12 20:54:52 +00003" Date: Oct 12, 2005
4" Version: 73
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00005" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00006" 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 Moolenaar482aaeb2005-09-29 18:26:07 +000011" netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
12" *as is* and comes with no warranty of any kind, either
13" expressed or implied. By using this plugin, you agree that
14" in no event will the copyright holder be liable for any damages
15" resulting from the use of this software.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +000016" of this software.
Bram Moolenaar071d4272004-06-13 20:20:40 +000017"
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +000018" But be doers of the Word, and not only hearers, deluding your own selves {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000019" (James 1:22 RSV)
20" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000021
22" Exception for &cp: {{{1
23if &cp || exists("g:loaded_netrw")
24 finish
25endif
Bram Moolenaar61036992005-10-12 20:54:52 +000026let g:loaded_netrw = "v73"
Bram Moolenaar578b49e2005-09-10 19:22:57 +000027if v:version < 700
28 echohl WarningMsg | echo "***netrw*** you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw" | echohl None
29 finish
30endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000031let s:keepcpo = &cpo
32set cpo&vim
33" call Decho("doing autoload/netrw.vim")
Bram Moolenaar071d4272004-06-13 20:20:40 +000034
35" ---------------------------------------------------------------------
Bram Moolenaar61036992005-10-12 20:54:52 +000036" Default values for netrw's global protocol variables {{{1
37if !exists("g:netrw_dav_cmd")
38 let g:netrw_dav_cmd = "cadaver"
Bram Moolenaar071d4272004-06-13 20:20:40 +000039endif
Bram Moolenaar61036992005-10-12 20:54:52 +000040if !exists("g:netrw_fetch_cmd")
41 if executable("fetch")
42 let g:netrw_fetch_cmd = "fetch -o"
43 else
44 let g:netrw_fetch_cmd = ""
45 endif
46endif
47if !exists("g:netrw_ftp_cmd")
48 let g:netrw_ftp_cmd = "ftp"
49endif
50if !exists("g:netrw_http_cmd")
51 if executable("wget")
52 let g:netrw_http_cmd = "wget -q -O"
53 elseif executable("fetch")
54 let g:netrw_http_cmd = "fetch -o"
55 else
56 let g:netrw_http_cmd = ""
57 endif
58endif
59if !exists("g:netrw_rcp_cmd")
60 let g:netrw_rcp_cmd = "rcp"
61endif
62if !exists("g:netrw_rsync_cmd")
63 let g:netrw_rsync_cmd = "rsync"
64endif
65if !exists("g:netrw_scp_cmd")
66 let g:netrw_scp_cmd = "scp -q"
67endif
68if !exists("g:netrw_sftp_cmd")
69 let g:netrw_sftp_cmd = "sftp"
70endif
71if !exists("g:netrw_ssh_cmd")
72 let g:netrw_ssh_cmd= "ssh"
73endif
74
75if has("win32") || has("win95") || has("win64") || has("win16")
76 \ && exists("g:netrw_use_nt_rcp")
77 \ && g:netrw_use_nt_rcp
78 \ && executable( $SystemRoot .'/system32/rcp.exe')
79 let s:netrw_has_nt_rcp = 1
80 let s:netrw_rcpmode = '-b'
81 else
82 let s:netrw_has_nt_rcp = 0
83 let s:netrw_rcpmode = ''
84endif
85
86" ---------------------------------------------------------------------
87" Default values for netrw's global variables {{{1
88" Default values - a-c ---------- {{{2
89if !exists("g:netrw_alto")
90 let g:netrw_alto= 0
91endif
92if !exists("g:netrw_altv")
93 let g:netrw_altv= 0
Bram Moolenaar071d4272004-06-13 20:20:40 +000094endif
95if !exists("g:netrw_cygwin")
Bram Moolenaard4755bb2004-09-02 19:12:26 +000096 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +000097 if &shell == "bash"
98 let g:netrw_cygwin= 1
99 else
100 let g:netrw_cygwin= 0
101 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102 else
103 let g:netrw_cygwin= 0
104 endif
105endif
Bram Moolenaar61036992005-10-12 20:54:52 +0000106" Default values - d-f ---------- {{{2
107if !exists("g:NETRW_DIRHIST_CNT")
108 let g:NETRW_DIRHIST_CNT= 0
109endif
110if !exists("g:netrw_dirhistmax")
111 let g:netrw_dirhistmax= 10
112endif
113if !exists("g:netrw_ftp_browse_reject")
114 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 Moolenaar843ee412004-06-30 16:16:41 +0000115endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000116if !exists("g:netrw_ftp_list_cmd")
117 if has("unix") || exists("g:netrw_cygwin")
118 let g:netrw_ftp_list_cmd= "ls -lF"
119 else
120 let g:netrw_ftp_list_cmd= "dir"
121 endif
122endif
Bram Moolenaar61036992005-10-12 20:54:52 +0000123if !exists("g:netrw_ftpmode")
124 let g:netrw_ftpmode= "binary"
Bram Moolenaar843ee412004-06-30 16:16:41 +0000125endif
Bram Moolenaar61036992005-10-12 20:54:52 +0000126" Default values - h-lh ---------- {{{2
127if !exists("g:netrw_hide")
128 let g:netrw_hide= 1
Bram Moolenaar843ee412004-06-30 16:16:41 +0000129endif
Bram Moolenaar61036992005-10-12 20:54:52 +0000130if !exists("g:netrw_keepdir")
131 let g:netrw_keepdir= 1
132endif
133if !exists("g:netrw_list_cmd")
134 if executable(g:netrw_ssh_cmd)
135 " provide a default listing command
136 let g:netrw_list_cmd= g:netrw_ssh_cmd." HOSTNAME ls -FLa"
137 else
138" call Decho(g:netrw_ssh_cmd." is not executable, can't do remote directory exploring)
139 let g:netrw_list_cmd= ""
140 endif
141endif
142if !exists("g:netrw_list_hide")
143 let g:netrw_list_hide= ""
144endif
145" Default values - lh-lz ---------- {{{2
146if !exists("g:netrw_local_mkdir")
147 let g:netrw_local_mkdir= "mkdir"
148endif
149if !exists("g:netrw_local_rmdir")
150 let g:netrw_local_rmdir= "rmdir"
151endif
152if !exists("g:netrw_longlist")
153 let g:netrw_longlist= 0
154endif
155if g:netrw_longlist < 0 || g:netrw_longlist > 2
156 " sanity check
157 let g:netrw_longlist= 0
158endif
159if g:netrw_longlist == 1
160 let g:netrw_list_cmd= g:netrw_list_cmd." -l"
161endif
162" Default values - m-r ---------- {{{2
163if !exists("g:netrw_maxfilenamelen")
164 let g:netrw_maxfilenamelen= 32
165endif
166if !exists("g:netrw_mkdir_cmd")
167 let g:netrw_mkdir_cmd= g:netrw_ssh_cmd." HOSTNAME mkdir"
Bram Moolenaar843ee412004-06-30 16:16:41 +0000168endif
169if !exists("g:netrw_rename_cmd")
Bram Moolenaar61036992005-10-12 20:54:52 +0000170 let g:netrw_rename_cmd= g:netrw_ssh_cmd." HOSTNAME mv"
Bram Moolenaar843ee412004-06-30 16:16:41 +0000171endif
Bram Moolenaar61036992005-10-12 20:54:52 +0000172if !exists("g:netrw_rm_cmd")
173 let g:netrw_rm_cmd = g:netrw_ssh_cmd." HOSTNAME rm"
174endif
175if !exists("g:netrw_rmdir_cmd")
176 let g:netrw_rmdir_cmd = g:netrw_ssh_cmd." HOSTNAME rmdir"
177endif
178if !exists("g:netrw_rmf_cmd")
179 let g:netrw_rmf_cmd = g:netrw_ssh_cmd." HOSTNAME rm -f"
180endif
181" Default values - s ---------- {{{2
Bram Moolenaar843ee412004-06-30 16:16:41 +0000182if exists("g:netrw_silent") && g:netrw_silent != 0
183 let g:netrw_silentxfer= "silent "
184else
185 let g:netrw_silentxfer= ""
186endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000187if !exists("g:netrw_sort_by")
188 " alternatives: date size
189 let g:netrw_sort_by= "name"
190endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000191if !exists("g:netrw_sort_direction")
192 " alternative: reverse (z y x ...)
193 let g:netrw_sort_direction= "normal"
194endif
Bram Moolenaar61036992005-10-12 20:54:52 +0000195if !exists("g:netrw_sort_sequence")
196 let g:netrw_sort_sequence= '[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$'
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000197endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000198if !exists("g:netrw_ssh_browse_reject")
199 let g:netrw_ssh_browse_reject='^total\s\+\d\+$'
200endif
Bram Moolenaar61036992005-10-12 20:54:52 +0000201" Default values - t-w ---------- {{{2
202if !exists("g:netrw_timefmt")
203 let g:netrw_timefmt= "%c"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000204endif
Bram Moolenaar61036992005-10-12 20:54:52 +0000205if !exists("g:netrw_win95ftp")
206 let g:netrw_win95ftp= 1
207endif
208if !exists("g:netrw_winsize")
209 let g:netrw_winsize= ""
210endif
211" ---------------------------------------------------------------------
212" Default values for netrw's script variables: {{{1
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000213if !exists("s:netrw_cd_escape")
214 if has("win32") || has("win95") || has("win64") || has("win16")
215 let s:netrw_cd_escape="#% "
216 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000217 let s:netrw_cd_escape="[]#*$%'\" ?`!&();<>\\"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000218 endif
219endif
220if !exists("s:netrw_glob_escape")
221 if has("win32") || has("win95") || has("win64") || has("win16")
222 let s:netrw_glob_escape= ""
223 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000224 let s:netrw_glob_escape= '[]*?`{~$'
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000225 endif
226endif
Bram Moolenaar8299df92004-07-10 09:47:34 +0000227
228" BufEnter event ignored by decho when following variable is true
229" Has a side effect that doau BufReadPost doesn't work, so
230" files read by network transfer aren't appropriately highlighted.
231"let g:decho_bufenter = 1 "Decho
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232
Bram Moolenaar071d4272004-06-13 20:20:40 +0000233" ------------------------------------------------------------------------
234" NetSavePosn: saves position of cursor on screen {{{1
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000235fun! netrw#NetSavePosn()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000236" call Dfunc("NetSavePosn()")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000237 " Save current line and column
Bram Moolenaar488c6512005-08-11 20:09:58 +0000238 let w:netrw_winnr= winnr()
239 let w:netrw_line = line(".")
240 let w:netrw_col = virtcol(".")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000241
242 " Save top-of-screen line
243 norm! H0
Bram Moolenaar488c6512005-08-11 20:09:58 +0000244 let w:netrw_hline= line(".")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000245
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000246 call netrw#NetRestorePosn()
Bram Moolenaar488c6512005-08-11 20:09:58 +0000247" 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 +0000248endfun
249
250" ------------------------------------------------------------------------
251" NetRestorePosn: restores the cursor and file position as saved by NetSavePosn() {{{1
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000252fun! netrw#NetRestorePosn()
Bram Moolenaar488c6512005-08-11 20:09:58 +0000253" 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 +0000254 let eikeep= &ei
255 set ei=all
Bram Moolenaar071d4272004-06-13 20:20:40 +0000256
Bram Moolenaar81695252004-12-29 20:58:21 +0000257 " restore window
Bram Moolenaar488c6512005-08-11 20:09:58 +0000258" call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
259 exe "silent! ".w:netrw_winnr."wincmd w"
Bram Moolenaar572cb562005-08-05 21:35:02 +0000260" if v:shell_error == 0
261" " as suggested by Bram M: redraw on no error
262" " allows protocol error messages to remain visible
263" redraw!
264" endif
Bram Moolenaar81695252004-12-29 20:58:21 +0000265
Bram Moolenaar071d4272004-06-13 20:20:40 +0000266 " restore top-of-screen line
Bram Moolenaar488c6512005-08-11 20:09:58 +0000267" call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
268 exe "norm! ".w:netrw_hline."G0z\<CR>"
Bram Moolenaar81695252004-12-29 20:58:21 +0000269
Bram Moolenaar071d4272004-06-13 20:20:40 +0000270 " restore position
Bram Moolenaar488c6512005-08-11 20:09:58 +0000271" call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
272 exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273
Bram Moolenaar572cb562005-08-05 21:35:02 +0000274 let &ei= eikeep
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000275" call Dret("NetRestorePosn")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276endfun
277
278" ------------------------------------------------------------------------
279" NetRead: responsible for reading a file over the net {{{1
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000280fun! netrw#NetRead(...)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000281" call Dfunc("NetRead(a:1<".a:1.">)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000282
283 " save options
284 call s:NetOptionSave()
285
286 " Special Exception: if a file is named "0r", then
287 " "0r" will be used to read the
288 " following files instead of "r"
289 if a:0 == 0
290 let readcmd= "r"
291 let ichoice= 0
292 elseif a:1 == "0r"
293 let readcmd = "0r"
294 let ichoice = 2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000295 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000296 let readcmd = "r"
297 let ichoice = 1
298 endif
299
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000300 " get name of a temporary file and set up shell-quoting character
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000301 let tmpfile= tempname()
Bram Moolenaar578b49e2005-09-10 19:22:57 +0000302 let tmpfile= substitute(tmpfile,'\','/','ge')
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000303 if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
Bram Moolenaar578b49e2005-09-10 19:22:57 +0000304 echohl Error | echo "***netrw*** your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!"
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000305 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
306" call Dret("NetRead")
307 return
308 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000309
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000310" call Decho("ichoice=".ichoice." readcmd<".readcmd.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000311 while ichoice <= a:0
312
313 " attempt to repeat with previous host-file-etc
314 if exists("b:netrw_lastfile") && a:0 == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000315" call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000316 let choice = b:netrw_lastfile
317 let ichoice= ichoice + 1
318
319 else
320 exe "let choice= a:" . ichoice
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000321" call Decho("no lastfile: choice<" . choice . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000322
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000323 if match(choice,"?") == 0
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000324 " give help
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000325 echomsg 'NetRead Usage:'
326 echomsg ':Nread machine:path uses rcp'
327 echomsg ':Nread "machine path" uses ftp with <.netrc>'
328 echomsg ':Nread "machine id password path" uses ftp'
329 echomsg ':Nread dav://machine[:port]/path uses cadaver'
330 echomsg ':Nread fetch://machine/path uses fetch'
331 echomsg ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>'
332 echomsg ':Nread http://[user@]machine/path uses http wget'
333 echomsg ':Nread rcp://[user@]machine/path uses rcp'
334 echomsg ':Nread rsync://machine[:port]/path uses rsync'
335 echomsg ':Nread scp://[user@]machine[[:#]port]/path uses scp'
336 echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000337 break
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000338
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000339 elseif match(choice,"^\"") != -1
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000340 " Reconstruct Choice if choice starts with '"'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000341" call Decho("reconstructing choice")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000342 if match(choice,"\"$") != -1
343 " case "..."
344 let choice=strpart(choice,1,strlen(choice)-2)
345 else
346 " case "... ... ..."
347 let choice = strpart(choice,1,strlen(choice)-1)
348 let wholechoice = ""
349
350 while match(choice,"\"$") == -1
351 let wholechoice = wholechoice . " " . choice
352 let ichoice = ichoice + 1
353 if ichoice > a:0
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000354 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000355 echohl Error | echo "***netrw*** Unbalanced string in filename '". wholechoice ."'" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000356 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000357 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000358" call Dret("NetRead")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000359 return
360 endif
361 let choice= a:{ichoice}
362 endwhile
363 let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
364 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000365 endif
366 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000367
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000368" call Decho("choice<" . choice . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000369 let ichoice= ichoice + 1
370
371 " fix up windows urls
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000372 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000373 let choice = substitute(choice,'\\','/','ge')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000374" call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000375
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000376 exe 'lcd ' . fnamemodify(tmpfile,':h')
377 let tmpfile = fnamemodify(tmpfile,':t')
Bram Moolenaar69a7cb42004-06-20 12:51:53 +0000378 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000379
380 " Determine method of read (ftp, rcp, etc)
381 call s:NetMethod(choice)
382
Bram Moolenaar843ee412004-06-30 16:16:41 +0000383 " Check if NetBrowse() should be handling this request
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000384" call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000385 if choice =~ "^.*[\/]$"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000386 keepjumps call s:NetBrowse(choice)
387" call Dret("NetRead")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000388 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000389 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000390
391 " ============
392 " Perform Read
393 " ============
394
395 ".........................................
396 " rcp: NetRead Method #1
397 if b:netrw_method == 1 " read with rcp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000398" call Decho("read via rcp (method #1)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000399 " ER: noting done with g:netrw_uid yet?
400 " ER: on Win2K" rcp machine[.user]:file tmpfile
401 " ER: if machine contains '.' adding .user is required (use $USERNAME)
402 " ER: the tmpfile is full path: rcp sees C:\... as host C
403 if s:netrw_has_nt_rcp == 1
404 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
405 let uid_machine = g:netrw_machine .'.'. g:netrw_uid
406 else
407 " Any way needed it machine contains a '.'
408 let uid_machine = g:netrw_machine .'.'. $USERNAME
409 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000410 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000411 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
412 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
413 else
414 let uid_machine = g:netrw_machine
415 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000416 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000417" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000418 exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
419 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
420 let b:netrw_lastfile = choice
421
422 ".........................................
423 " ftp + <.netrc>: NetRead Method #2
424 elseif b:netrw_method == 2 " read with ftp + <.netrc>
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000425" call Decho("read via ftp+.netrc (method #2)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000426 let netrw_fname= b:netrw_fname
427 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000428 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000429 exe "put ='".g:netrw_ftpmode."'"
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000430" call Decho("filter input: ".getline("."))
431 exe "put ='".'get \"'.netrw_fname.'\" '.tmpfile."'"
432" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000433 if exists("g:netrw_port") && g:netrw_port != ""
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000434" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000435 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
436 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000437" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000438 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
439 endif
440 " 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 +0000441 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000442 let debugkeep= &debug
443 set debug=msg
Bram Moolenaar572cb562005-08-05 21:35:02 +0000444 echohl Error | echo "***netrw*** ".getline(1) | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000445 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000446 let &debug= debugkeep
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000447 endif
448 bd!
Bram Moolenaar61036992005-10-12 20:54:52 +0000449 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000450 let b:netrw_lastfile = choice
451
452 ".........................................
453 " ftp + machine,id,passwd,filename: NetRead Method #3
454 elseif b:netrw_method == 3 " read with ftp + machine, id, passwd, and fname
455 " Construct execution string (four lines) which will be passed through filter
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000456" call Decho("read via ftp+mipf (method #3)")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000457 let netrw_fname= b:netrw_fname
458 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000459 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000460 if exists("g:netrw_port") && g:netrw_port != ""
461 put ='open '.g:netrw_machine.' '.g:netrw_port
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000462" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000463 else
464 put ='open '.g:netrw_machine
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000465" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000466 endif
467
468 if exists("g:netrw_ftp") && g:netrw_ftp == 1
469 put =g:netrw_uid
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000470" call Decho("filter input: ".getline("."))
471 put ='\"'.g:netrw_passwd.'\"'
472" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000473 else
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000474 put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
475" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000476 endif
477
478 if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
479 put =g:netrw_ftpmode
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000480" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000481 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000482 put ='get \"'.netrw_fname.'\" '.tmpfile
483" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000484
485 " perform ftp:
486 " -i : turns off interactive prompting from ftp
487 " -n unix : DON'T use <.netrc>, even though it exists
488 " -n win32: quit being obnoxious about password
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000489 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000490" call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000491 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
492 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
493 if getline(1) !~ "^$"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000494" call Decho("error<".getline(1).">")
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*** ".getline(1) | 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 endif
500 bd!
501 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
502 let b:netrw_lastfile = choice
503
504 ".........................................
505 " scp: NetRead Method #4
506 elseif b:netrw_method == 4 " read with scp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000507" call Decho("read via scp (method #4)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000508 if exists("g:netrw_port") && g:netrw_port != ""
509 let useport= " -P ".g:netrw_port
510 else
511 let useport= ""
512 endif
513 if g:netrw_cygwin == 1
514 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000515" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000516 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
517 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000518" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000519 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
520 endif
Bram Moolenaar61036992005-10-12 20:54:52 +0000521 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000522 let b:netrw_lastfile = choice
523
524 ".........................................
525 elseif b:netrw_method == 5 " read with http (wget)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000526" call Decho("read via http (method #5)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000527 if g:netrw_http_cmd == ""
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000528 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000529 echohl Error | echo "***netrw*** neither wget nor fetch command is available" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000530 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000531 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000532" call Dret("NetRead")
533 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000534 endif
535
536 if match(b:netrw_fname,"#") == -1
537 " simple wget
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000538" call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000539 exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&')
540 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
541
542 else
543 " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
544 let netrw_html= substitute(b:netrw_fname,"#.*$","","")
545 let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000546" call Decho("netrw_html<".netrw_html.">")
547" call Decho("netrw_tag <".netrw_tag.">")
548" call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000549 exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html
550 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000551" call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000552 exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
553 endif
554 let b:netrw_lastfile = choice
555
556 ".........................................
557 " cadaver: NetRead Method #6
558 elseif b:netrw_method == 6 " read with cadaver
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000559" call Decho("read via cadaver (method #6)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000560
561 " Construct execution string (four lines) which will be passed through filter
562 let netrw_fname= b:netrw_fname
563 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000564 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000565 if exists("g:netrw_port") && g:netrw_port != ""
566 put ='open '.g:netrw_machine.' '.g:netrw_port
567 else
568 put ='open '.g:netrw_machine
569 endif
570 put ='user '.g:netrw_uid.' '.g:netrw_passwd
571
572 if g:netrw_cygwin == 1
573 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
574 put ='get '.netrw_fname.' '.cygtmpfile
575 else
576 put ='get '.netrw_fname.' '.tmpfile
577 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000578 put ='quit'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000579
580 " perform cadaver operation:
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000581 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000582" call Decho("executing: %!".g:netrw_dav_cmd)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000583 exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
584 bd!
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000585 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000586 let b:netrw_lastfile = choice
587
588 ".........................................
589 " rsync: NetRead Method #7
590 elseif b:netrw_method == 7 " read with rsync
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000591" call Decho("read via rsync (method #7)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000592 if g:netrw_cygwin == 1
593 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000594" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000595 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
596 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000597" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000598 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
599 endif
600 let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
601 let b:netrw_lastfile = choice
602
603 ".........................................
604 " fetch: NetRead Method #8
605 " fetch://[user@]host[:http]/path
606 elseif b:netrw_method == 8 " read with fetch
607 if g:netrw_fetch_cmd == ""
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000608 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000609 echohl Error | echo "***netrw*** fetch command not available" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000610 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000611 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000612" call Dret("NetRead")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000613 endif
614 if exists("g:netrw_option") && g:netrw_option == ":http"
615 let netrw_option= "http"
616 else
617 let netrw_option= "ftp"
618 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000619" call Decho("read via fetch for ".netrw_option)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000620
621 if exists("g:netrw_uid") && g:netrw_uid != "" && exists("g:netrw_passwd") && g:netrw_passwd != ""
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000622" 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 +0000623 exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&')
624 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000625" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000626 exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&')
627 endif
628
629 let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
630 let b:netrw_lastfile = choice
631
632 ".........................................
633 " sftp: NetRead Method #9
634 elseif b:netrw_method == 9 " read with sftp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000635" call Decho("read via sftp (method #4)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000636 if g:netrw_cygwin == 1
637 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000638" call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
639" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000640 exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
641 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000642" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000643 exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
644 endif
645 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
646 let b:netrw_lastfile = choice
647
648 ".........................................
649 else " Complain
650 echo "***warning*** unable to comply with your request<" . choice . ">"
651 endif
652 endwhile
653
654 " cleanup
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000655" call Decho("cleanup")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000656 if exists("b:netrw_method")
657 unlet b:netrw_method
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000658 unlet b:netrw_fname
659 endif
660 call s:NetOptionRestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +0000661
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000662" call Dret("NetRead")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000663endfun
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000664
665" ------------------------------------------------------------------------
666" NetGetFile: Function to read file "fname" with command "readcmd". {{{1
667fun! s:NetGetFile(readcmd, fname, method)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000668" call Dfunc("NetGetFile(readcmd<".a:readcmd.">,fname<".a:fname."> method<".a:method.">)")
Bram Moolenaar61036992005-10-12 20:54:52 +0000669
670 " record remote filename
671 let rfile= bufname("%")
672" call Decho("rfile<".rfile.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000673
674 if exists("*NetReadFixup")
675 " for the use of NetReadFixup (not otherwise used internally)
676 let line2= line("$")
677 endif
678
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000679 " transform paths from / to \ for Windows (except for cygwin)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000680 if &term == "win32"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000681 if g:netrw_cygwin
682 let fname= a:fname
683" call Decho("(win32 && cygwin) fname<".fname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000684 else
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000685 let fname= substitute(a:fname,'/','\\\\','ge')
686" call Decho("(win32 && !cygwin) fname<".fname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000687 endif
688 else
689 let fname= a:fname
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000690" call Decho("fname=a:fname<".fname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000691 endif
692
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000693 if a:readcmd[0] == '0'
Bram Moolenaar81695252004-12-29 20:58:21 +0000694 " get file into buffer
Bram Moolenaar83bab712005-08-01 21:58:57 +0000695
Bram Moolenaar83bab712005-08-01 21:58:57 +0000696" call Dredir("ls!","starting buffer list")
697
Bram Moolenaar81695252004-12-29 20:58:21 +0000698 " rename the current buffer to the temp file (ie. fname)
Bram Moolenaar578b49e2005-09-10 19:22:57 +0000699 keepalt exe "file ".fname
Bram Moolenaar83bab712005-08-01 21:58:57 +0000700" call Dredir("ls!","after renaming current buffer to <".fname.">")
701
Bram Moolenaar81695252004-12-29 20:58:21 +0000702 " edit temporary file
703 e
Bram Moolenaar83bab712005-08-01 21:58:57 +0000704" call Dredir("ls!","after editing temporary file")
705
Bram Moolenaar81695252004-12-29 20:58:21 +0000706 " rename buffer back to remote filename
Bram Moolenaar578b49e2005-09-10 19:22:57 +0000707 keepalt exe "file ".rfile
Bram Moolenaar83bab712005-08-01 21:58:57 +0000708" call Dredir("ls!","renaming buffer back to remote filename<".rfile.">")
Bram Moolenaar81695252004-12-29 20:58:21 +0000709 let line1 = 1
710 let line2 = line("$")
711
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000712 elseif filereadable(fname)
Bram Moolenaar81695252004-12-29 20:58:21 +0000713 " read file after current line
714 let curline = line(".")
715 let lastline= line("$")
716" call Decho("exe<".a:readcmd." ".v:cmdarg." ".fname."> line#".curline)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000717 exe a:readcmd." ".v:cmdarg." ".fname
Bram Moolenaar81695252004-12-29 20:58:21 +0000718 let line1 = curline + 1
719 let line2 = line("$") - lastline + 1
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000720
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000721 else
Bram Moolenaar81695252004-12-29 20:58:21 +0000722 " not readable
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000723" call Dfunc("NetGetFile(readcmd<".a:readcmd.">,fname<".a:fname."> method<".a:method.">)")
724 echohl WarningMsg | echo "***netrw*** file <".fname."> not readable"| echohl None
725 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar81695252004-12-29 20:58:21 +0000726" call Dret("NetGetFile : fname<".fname."> not readable")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000727 return
728 endif
729
730 " User-provided (ie. optional) fix-it-up command
731 if exists("*NetReadFixup")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000732" call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000733 call NetReadFixup(a:method, line1, line2)
Bram Moolenaar83bab712005-08-01 21:58:57 +0000734" else " Decho
735" call Decho("NetReadFixup() not called, doesn't exist")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000736 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +0000737
738 " update the Buffers menu
739 if has("gui") && has("gui_running")
740 silent! emenu Buffers.Refresh\ menu
741 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000742
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000743" call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000744
745 " insure that we have the right filetype and that its being displayed
746 filetype detect
747 redraw!
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000748" call Dret("NetGetFile")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000749endfun
750
751" ------------------------------------------------------------------------
752" NetWrite: responsible for writing a file over the net {{{1
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000753fun! netrw#NetWrite(...) range
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000754" call Dfunc("NetWrite(a:0=".a:0.")")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000755
756 " option handling
757 let mod= 0
758 call s:NetOptionSave()
759
760 " Get Temporary Filename
761 let tmpfile= tempname()
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000762 if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
763 echohl Error | echo "***netrw*** your ".substitute(tmpfile,'[^/]\+$','','e')." directory is missing!"
764 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000765" call Dret("NetWrite")
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000766 return
767 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000768
769 if a:0 == 0
770 let ichoice = 0
771 else
772 let ichoice = 1
773 endif
774
775 " write (selected portion of) file to temporary
776 silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
777
778 while ichoice <= a:0
779
780 " attempt to repeat with previous host-file-etc
781 if exists("b:netrw_lastfile") && a:0 == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000782" call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000783 let choice = b:netrw_lastfile
784 let ichoice= ichoice + 1
785 else
786 exe "let choice= a:" . ichoice
787
788 " Reconstruct Choice if choice starts with '"'
789 if match(choice,"?") == 0
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000790 echomsg 'NetWrite Usage:"'
791 echomsg ':Nwrite machine:path uses rcp'
792 echomsg ':Nwrite "machine path" uses ftp with <.netrc>'
793 echomsg ':Nwrite "machine id password path" uses ftp'
794 echomsg ':Nwrite dav://[user@]machine/path uses cadaver'
795 echomsg ':Nwrite fetch://[user@]machine/path uses fetch'
796 echomsg ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)'
797 echomsg ':Nwrite rcp://machine/path uses rcp'
798 echomsg ':Nwrite rsync://[user@]machine/path uses rsync'
799 echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
800 echomsg ':Nwrite sftp://[user@]machine/path uses sftp'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000801 break
802
803 elseif match(choice,"^\"") != -1
804 if match(choice,"\"$") != -1
805 " case "..."
806 let choice=strpart(choice,1,strlen(choice)-2)
807 else
808 " case "... ... ..."
809 let choice = strpart(choice,1,strlen(choice)-1)
810 let wholechoice = ""
811
812 while match(choice,"\"$") == -1
813 let wholechoice= wholechoice . " " . choice
814 let ichoice = ichoice + 1
815 if choice > a:0
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000816 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000817 echohl Error | echo "***netrw*** Unbalanced string in filename '". wholechoice ."'" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000818 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000819 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000820" call Dret("NetWrite")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000821 return
822 endif
823 let choice= a:{ichoice}
824 endwhile
825 let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
826 endif
827 endif
828 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000829" call Decho("choice<" . choice . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000830 let ichoice= ichoice + 1
831
832 " fix up windows urls
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000833 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000834 let choice= substitute(choice,'\\','/','ge')
835 "ER: see NetRead()
836 exe 'lcd ' . fnamemodify(tmpfile,':h')
837 let tmpfile = fnamemodify(tmpfile,':t')
838 endif
839
840 " Determine method of read (ftp, rcp, etc)
841 call s:NetMethod(choice)
842
843 " =============
844 " Perform Write
845 " =============
846
847 ".........................................
848 " rcp: NetWrite Method #1
849 if b:netrw_method == 1 " write with rcp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000850" Decho "write via rcp (method #1)"
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000851 if s:netrw_has_nt_rcp == 1
852 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
853 let uid_machine = g:netrw_machine .'.'. g:netrw_uid
854 else
855 let uid_machine = g:netrw_machine .'.'. $USERNAME
856 endif
857 else
858 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
859 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
860 else
861 let uid_machine = g:netrw_machine
862 endif
863 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000864" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000865 exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&')
866 let b:netrw_lastfile = choice
867
868 ".........................................
869 " ftp + <.netrc>: NetWrite Method #2
870 elseif b:netrw_method == 2 " write with ftp + <.netrc>
871 let netrw_fname = b:netrw_fname
872 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000873 setlocal ff=unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000874 exe "put ='".g:netrw_ftpmode."'"
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000875" call Decho(" filter input: ".getline("."))
876 exe "put ='"."put ".tmpfile.' \"'.netrw_fname.'\"'."'"
877" call Decho(" filter input: ".getline("."))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000878 if exists("g:netrw_port") && g:netrw_port != ""
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000879" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
Bram Moolenaar69a7cb42004-06-20 12:51:53 +0000880 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
Bram Moolenaar071d4272004-06-13 20:20:40 +0000881 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000882" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
Bram Moolenaar69a7cb42004-06-20 12:51:53 +0000883 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
Bram Moolenaar071d4272004-06-13 20:20:40 +0000884 endif
885 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
886 if getline(1) !~ "^$"
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000887 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000888 echohl Error | echo "***netrw*** ".getline(1) | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000889 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000890 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000891 let mod=1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000892 endif
893 bd!
Bram Moolenaar071d4272004-06-13 20:20:40 +0000894 let b:netrw_lastfile = choice
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000895
896 ".........................................
897 " ftp + machine, id, passwd, filename: NetWrite Method #3
898 elseif b:netrw_method == 3 " write with ftp + machine, id, passwd, and fname
899 let netrw_fname= b:netrw_fname
900 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000901 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000902 if exists("g:netrw_port") && g:netrw_port != ""
903 put ='open '.g:netrw_machine.' '.g:netrw_port
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000904" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000905 else
906 put ='open '.g:netrw_machine
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000907" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000908 endif
909 if exists("g:netrw_ftp") && g:netrw_ftp == 1
910 put =g:netrw_uid
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000911" call Decho("filter input: ".getline("."))
912 put ='\"'.g:netrw_passwd.'\"'
913" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000914 else
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000915 put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
916" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000917 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000918 put ='put '.tmpfile.' \"'.netrw_fname.'\"'
919" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000920 " save choice/id/password for future use
921 let b:netrw_lastfile = choice
922
923 " perform ftp:
924 " -i : turns off interactive prompting from ftp
925 " -n unix : DON'T use <.netrc>, even though it exists
926 " -n win32: quit being obnoxious about password
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000927 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000928" call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000929 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
930 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
931 if getline(1) !~ "^$"
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000932 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000933 echohl Error | echo "***netrw*** ".getline(1) | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000934 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000935 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000936 let mod=1
937 endif
938 bd!
939
940 ".........................................
941 " scp: NetWrite Method #4
942 elseif b:netrw_method == 4 " write with scp
943 if exists("g:netrw_port") && g:netrw_port != ""
944 let useport= " -P ".g:netrw_port
945 else
946 let useport= ""
947 endif
948 if g:netrw_cygwin == 1
949 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000950" call Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000951 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
952 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000953" call Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000954 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
955 endif
956 let b:netrw_lastfile = choice
957
958 ".........................................
959 " http: NetWrite Method #5
960 elseif b:netrw_method == 5
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000961 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000962 echohl Error | echo "***netrw*** currently <netrw.vim> does not support writing using http:" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000963 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000964 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000965
966 ".........................................
967 " dav: NetWrite Method #6
968 elseif b:netrw_method == 6 " write with cadaver
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000969" call Decho("write via cadaver (method #6)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000970
971 " Construct execution string (four lines) which will be passed through filter
972 let netrw_fname= b:netrw_fname
973 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000974 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000975 if exists("g:netrw_port") && g:netrw_port != ""
976 put ='open '.g:netrw_machine.' '.g:netrw_port
977 else
978 put ='open '.g:netrw_machine
979 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000980 put ='user '.g:netrw_uid.' '.g:netrw_passwd
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000981
982 if g:netrw_cygwin == 1
983 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
984 put ='put '.cygtmpfile.' '.netrw_fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000985 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000986 put ='put '.tmpfile.' '.netrw_fname
Bram Moolenaar071d4272004-06-13 20:20:40 +0000987 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000988
989 " perform cadaver operation:
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000990 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000991" call Decho("executing: %!".g:netrw_dav_cmd)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000992 exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
993 bd!
994 let b:netrw_lastfile = choice
995
996 ".........................................
997 " rsync: NetWrite Method #7
998 elseif b:netrw_method == 7 " write with rsync
999 if g:netrw_cygwin == 1
1000 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001001" call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001002 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
Bram Moolenaar071d4272004-06-13 20:20:40 +00001003 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001004" call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001005 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
Bram Moolenaar071d4272004-06-13 20:20:40 +00001006 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001007 let b:netrw_lastfile = choice
1008
1009 ".........................................
1010 " scp: NetWrite Method #9
1011 elseif b:netrw_method == 9 " write with sftp
1012 let netrw_fname= b:netrw_fname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001013 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
1014 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
1015 else
1016 let uid_machine = g:netrw_machine
1017 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001018 new
Bram Moolenaar8299df92004-07-10 09:47:34 +00001019 setlocal ff=unix
Bram Moolenaar071d4272004-06-13 20:20:40 +00001020 put ='put '.tmpfile.' '.netrw_fname
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001021 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001022" call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001023 exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
1024 bd!
1025 let b:netrw_lastfile= choice
1026
1027 ".........................................
1028 else " Complain
1029 echo "***warning*** unable to comply with your request<" . choice . ">"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001030 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001031 endwhile
1032
1033 " cleanup
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001034" call Decho("cleanup")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001035 let result=delete(tmpfile)
1036 call s:NetOptionRestore()
1037
1038 if a:firstline == 1 && a:lastline == line("$")
1039 let &mod= mod " usually equivalent to set nomod
Bram Moolenaar071d4272004-06-13 20:20:40 +00001040 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001041
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001042" call Dret("NetWrite")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001043endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +00001044
Bram Moolenaar83bab712005-08-01 21:58:57 +00001045" ===========================================
1046" Remote Directory Browsing Support: {{{1
1047" ===========================================
1048
Bram Moolenaar843ee412004-06-30 16:16:41 +00001049" NetBrowse: This function uses the command in g:netrw_list_cmd to get a list {{{2
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001050" of the contents of a remote directory. It is assumed that the
1051" g:netrw_list_cmd has a string, HOSTNAME, that needs to be substituted
1052" with the requested remote hostname first.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001053fun! s:NetBrowse(dirname)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001054 if !exists("w:netrw_longlist")|let w:netrw_longlist= g:netrw_longlist|endif
1055" call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".w:netrw_longlist)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001056
Bram Moolenaar488c6512005-08-11 20:09:58 +00001057 if exists("s:netrw_skipbrowse")
1058 unlet s:netrw_skipbrowse
1059" call Dret("NetBrowse")
1060 return
1061 endif
1062
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001063 call s:NetOptionSave()
1064
Bram Moolenaar843ee412004-06-30 16:16:41 +00001065 " sanity check
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001066 if exists("b:netrw_method") && b:netrw_method =~ '[235]'
1067" call Decho("b:netrw_method=".b:netrw_method)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001068 if !executable("ftp")
1069 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001070 echohl Error | echo "***netrw*** this system doesn't support remote directory listing via ftp" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001071 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001072 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001073 call s:NetOptionRestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001074" call Dret("NetBrowse")
1075 return
1076 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001077 elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001078 if !exists("g:netrw_quiet")
Bram Moolenaar61036992005-10-12 20:54:52 +00001079 echohl Error | echo "***netrw*** this system doesn't support remote directory listing via ".g:netrw_list_cmd | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001080 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001081 endif
Bram Moolenaar572cb562005-08-05 21:35:02 +00001082
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001083 call s:NetOptionRestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001084" call Dret("NetBrowse")
1085 return
Bram Moolenaar843ee412004-06-30 16:16:41 +00001086 endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001087
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00001088 " use buffer-oriented WinVars if buffer ones exist but window ones don't
1089 call s:UseBufWinVars()
1090
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001091 " make this buffer modifiable
Bram Moolenaar83bab712005-08-01 21:58:57 +00001092 setlocal ma nonu nowrap
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001093
1094 " analyze a:dirname and g:netrw_list_cmd
1095 let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001096 let dirname = substitute(a:dirname,'\\','/','ge')
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001097" call Decho("dirname<".dirname.">")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001098 if dirname !~ dirpat
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001099 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001100 echohl Error | echo "***netrw*** netrw doesn't understand your dirname<".dirname.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001101 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001102 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001103 call s:NetOptionRestore()
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001104" call Dret("NetBrowse : badly formatted dirname<".dirname.">")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001105 return
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001106 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00001107
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001108 let method = substitute(dirname,dirpat,'\1','')
1109 let user = substitute(dirname,dirpat,'\2','')
1110 let machine = substitute(dirname,dirpat,'\3','')
1111 let path = substitute(dirname,dirpat,'\4','')
1112 let fname = substitute(dirname,'^.*/\ze.','','')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001113" call Decho("set up method <".method .">")
1114" call Decho("set up user <".user .">")
1115" call Decho("set up machine<".machine.">")
1116" call Decho("set up path <".path .">")
1117" call Decho("set up fname <".fname .">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001118
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001119 if method == "ftp" || method == "http"
1120 let method = "ftp"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001121 let listcmd = g:netrw_ftp_list_cmd
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001122 else
1123 let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
1124 endif
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001125
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001126 if exists("b:netrw_method")
Bram Moolenaar488c6512005-08-11 20:09:58 +00001127" call Decho("setting w:netrw_method<".b:netrw_method.">")
1128 let w:netrw_method= b:netrw_method
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001129 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001130
Bram Moolenaar8299df92004-07-10 09:47:34 +00001131 " optionally sort by time (-t) or by size (-S)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001132 if listcmd == "dir" && g:netrw_sort_by =~ "^[ts]"
Bram Moolenaar572cb562005-08-05 21:35:02 +00001133 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 +00001134 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001135 else
1136 if g:netrw_sort_by =~ "^t"
1137 let listcmd= listcmd."t"
1138 elseif g:netrw_sort_by =~ "^s"
1139 let listcmd= listcmd."S"
1140 endif
1141 " optionally sort in reverse
1142 if g:netrw_sort_direction =~ "^r" && listcmd == "dir"
1143 let listcmd= listcmd."r"
1144 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00001145 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001146
1147" call Decho("set up listcmd<".listcmd.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001148 if fname =~ '@$' && fname !~ '^"'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001149" call Decho("attempt transfer of symlink as file")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001150 call s:NetBrowse(substitute(dirname,'@$','','e'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001151 redraw!
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001152 call s:NetOptionRestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001153" call Dret("NetBrowse : symlink")
1154 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001155
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001156 elseif fname !~ '[\/]$' && fname !~ '^"'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001157 " looks like a regular file, attempt transfer
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001158" call Decho("attempt transfer as regular file<".dirname.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001159
1160 " remove any filetype indicator from end of dirname, except for the
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001161 " "this is a directory" indicator (/). There shouldn't be one of those,
1162 " anyway.
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001163 let path= substitute(path,'[*=@|]\r\=$','','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001164" call Decho("new path<".path.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001165
1166 " remote-read the requested file into current buffer
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001167 keepjumps keepalt enew!
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001168 set ma
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001169" call Decho("exe file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001170 exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001171 exe "silent doau BufReadPre ".fname
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001172 silent call netrw#NetRead(method."://".user.machine."/".path)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001173 exe "silent doau BufReadPost ".fname
Bram Moolenaar8299df92004-07-10 09:47:34 +00001174 keepjumps 1d
Bram Moolenaar572cb562005-08-05 21:35:02 +00001175
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00001176 " save certain window-oriented variables into buffer-oriented variables
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001177 call s:SetBufWinVars()
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001178 call s:NetOptionRestore()
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001179 setlocal nomod
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001180
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001181" call Dret("NetBrowse : file<".fname.">")
1182 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001183 endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001184
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001185 " ---------------------------------------------------------------------
1186 " Perform Directory Listing:
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001187" call Decho("Perform directory listing...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001188 " set up new buffer and map
1189 let bufname = method.'://'.user.machine.'/'.path
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001190 let bufnamenr = bufnr(bufname.'$')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001191" call Decho("bufname<".bufname."> bufnamenr=".bufnamenr)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001192 if bufnamenr != -1
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001193 " buffer already exists, switch to it!
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001194" call Decho("buffer already exists, switching to it")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001195 exe "b ".bufnamenr
1196 if line("$") >= 5
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001197 call s:NetOptionRestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001198" call Dret("NetBrowse")
1199 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001200 endif
1201 else
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001202" call Decho("generate a new buffer")
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001203 keepjumps keepalt enew!
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001204 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001205
1206 " rename file to reflect where its from
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001207 setlocal bt=nofile bh=wipe nobl noswf
1208 exe "setlocal ts=".g:netrw_maxfilenamelen
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001209" call Decho("exe file ".escape(bufname,s:netrw_cd_escape))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001210 exe 'file '.escape(bufname,s:netrw_cd_escape)
Bram Moolenaar269ec652004-07-29 08:43:53 +00001211" call Decho("renaming file to bufname<".bufname.">")
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001212 setlocal bh=hide bt=nofile nobl nonu
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001213
1214 " save current directory on directory history list
1215 call <SID>NetBookmarkDir(3,expand("%"))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001216
1217 " set up buffer-local mappings
1218" call Decho("set up buffer-local mappings")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001219 nnoremap <buffer> <silent> <cr> :call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
Bram Moolenaar572cb562005-08-05 21:35:02 +00001220 nnoremap <buffer> <silent> <c-l> :call <SID>NetRefresh(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
Bram Moolenaar843ee412004-06-30 16:16:41 +00001221 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr>
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001222 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 Moolenaar578b49e2005-09-10 19:22:57 +00001223 if w:netrw_longlist != 2
1224 nnoremap <buffer> <silent> b :<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
1225 nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr>
1226 endif
1227 nnoremap <buffer> <silent> Nb :<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
1228 nnoremap <buffer> <silent> NB :<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001229 nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(0)<cr>
1230 nnoremap <buffer> <silent> i :call <SID>NetLongList(0)<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00001231 nnoremap <buffer> <silent> o :call <SID>NetSplit(0)<cr>
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001232 nnoremap <buffer> <silent> O :call <SID>NetObtain()<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001233 nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr>
1234 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>
1235 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>
1236 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(0)<cr>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001237 nnoremap <buffer> <silent> u :<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
1238 nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00001239 nnoremap <buffer> <silent> v :call <SID>NetSplit(1)<cr>
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001240 nnoremap <buffer> <silent> x :call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001241 nnoremap <buffer> <silent> <2-leftmouse> :call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001242 exe 'nnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar843ee412004-06-30 16:16:41 +00001243 exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001244 exe 'nnoremap <buffer> <silent> d :call <SID>NetMakeDir("'.user.machine.'")<cr>'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001245 exe 'nnoremap <buffer> <silent> D :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar843ee412004-06-30 16:16:41 +00001246 exe 'vnoremap <buffer> <silent> D :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001247 exe 'nnoremap <buffer> <silent> R :call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar269ec652004-07-29 08:43:53 +00001248 exe 'vnoremap <buffer> <silent> R :call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar8299df92004-07-10 09:47:34 +00001249 nnoremap <buffer> ? :he netrw-browse-cmds<cr>
Bram Moolenaar83bab712005-08-01 21:58:57 +00001250 setlocal ma nonu nowrap
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001251
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001252 " Set up the banner
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001253" call Decho("set up the banner: sortby<".g:netrw_sort_by."> method<".method.">")
1254 keepjumps put ='\" ==========================================================================='
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001255 keepjumps put ='\" Netrw Remote Directory Listing (netrw '.g:loaded_netrw.')'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001256 keepjumps put ='\" '.bufname
Bram Moolenaar488c6512005-08-11 20:09:58 +00001257 let w:netrw_bannercnt = 7
1258 let sortby = g:netrw_sort_by
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001259 if g:netrw_sort_direction =~ "^r"
Bram Moolenaar488c6512005-08-11 20:09:58 +00001260 let sortby = sortby." reversed"
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001261 endif
1262
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001263 if g:netrw_sort_by =~ "^n"
1264 " sorted by name
Bram Moolenaar488c6512005-08-11 20:09:58 +00001265 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001266 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001267 keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence
1268 else
1269 " sorted by size or date
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001270 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001271 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00001272 if g:netrw_list_hide != "" && g:netrw_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001273 if g:netrw_hide == 1
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001274 keepjumps put ='\" Hiding: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001275 else
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001276 keepjumps put ='\" Showing: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001277 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00001278 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaar843ee412004-06-30 16:16:41 +00001279 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001280 keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec'
1281 keepjumps put ='\" ==========================================================================='
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001282
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001283 " remote read the requested directory listing
1284 " Use ftp if that was the file-transfer method selected, otherwise use ssh
1285 " Note that not all ftp servers honor the options for ls
1286 if method == "ftp"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001287 " use ftp to get remote file listing
1288" call Decho("use ftp to get remote file listing")
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001289 call s:NetBrowseFtpCmd(path,listcmd)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001290 keepjumps 1d
1291
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001292 if w:netrw_longlist == 0 || w:netrw_longlist == 2
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001293 " shorten the listing
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001294" call Decho("generate short listing")
Bram Moolenaar488c6512005-08-11 20:09:58 +00001295 exe "keepjumps ".w:netrw_bannercnt
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001296
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001297 " cleanup
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001298 if g:netrw_ftp_browse_reject != ""
1299 exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
1300 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001301 silent! keepjumps %s/\r$//e
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001302
1303 " if there's no ../ listed, then put ./ and ../ in
1304 let line1= line(".")
1305 keepjumps 1
1306 silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
1307 let line2= line(".")
1308 if line2 == 0
1309 keepjumps put='../'
1310 keepjumps put='./'
1311 endif
1312 exe "keepjumps ".line1
1313 keepjumps norm! 0
1314
1315 " more cleanup
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001316 exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
1317 exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
1318 exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001319 endif
1320
1321 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001322 " use ssh to get remote file listing
1323" call Decho("use ssh to get remote file listing")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001324 let shq= &shq? &shq : ( &sxq? &sxq : "'")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001325" call Decho("exe silent r! ".listcmd." '".shq.escape(path,s:netrw_cd_escape).shq."'")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001326 exe "silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq
1327 keepjumps 1d
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001328 " cleanup
1329 if g:netrw_ftp_browse_reject != ""
1330 exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001331 endif
1332 endif
1333
1334 " set up syntax highlighting
1335 if has("syntax")
1336 setlocal ft=netrwlist
Bram Moolenaar572cb562005-08-05 21:35:02 +00001337 if !exists("g:syntax_on") || !g:syntax_on
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001338 setlocal ft=
Bram Moolenaar572cb562005-08-05 21:35:02 +00001339 " Ugly workaround -- when syntax highlighting is off and laststatus==2,
1340 " sometimes the laststatus highlight bleeds into the entire display.
1341 " Only seems to happen with remote browsing. Weird.
1342 redraw
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001343 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001344 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001345
1346 " manipulate the directory listing (hide, sort)
Bram Moolenaar488c6512005-08-11 20:09:58 +00001347 if line("$") >= w:netrw_bannercnt
Bram Moolenaar269ec652004-07-29 08:43:53 +00001348 if g:netrw_hide && g:netrw_list_hide != ""
1349 call s:NetrwListHide()
Bram Moolenaar843ee412004-06-30 16:16:41 +00001350 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001351
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001352 if w:netrw_longlist == 1
Bram Moolenaar8299df92004-07-10 09:47:34 +00001353 " do a long listing; these substitutions need to be done prior to sorting
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001354" call Decho("manipulate long listing")
1355
1356 if method == "ftp"
1357 " cleanup
Bram Moolenaar488c6512005-08-11 20:09:58 +00001358 exe "keepjumps ".w:netrw_bannercnt
Bram Moolenaar572cb562005-08-05 21:35:02 +00001359 while getline(".") =~ g:netrw_ftp_browse_reject
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001360 keepjumps d
1361 endwhile
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001362 " if there's no ../ listed, then put ./ and ../ in
1363 let line1= line(".")
1364 keepjumps 1
1365 silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
1366 let line2= line(".")
1367 if line2 == 0
Bram Moolenaar488c6512005-08-11 20:09:58 +00001368 exe 'keepjumps '.w:netrw_bannercnt."put='./'"
1369 exe 'keepjumps '.w:netrw_bannercnt."put='../'"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001370 endif
1371 exe "keepjumps ".line1
1372 keepjumps norm! 0
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001373 endif
1374
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001375 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e'
1376 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
1377 exe 'silent keepjumps '.w:netrw_bannercnt
Bram Moolenaar8299df92004-07-10 09:47:34 +00001378 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001379
Bram Moolenaar488c6512005-08-11 20:09:58 +00001380 if line("$") >= w:netrw_bannercnt
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001381 if g:netrw_sort_by =~ "^n"
1382 call s:SetSort()
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001383 if g:netrw_sort_direction =~ 'n'
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001384 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001385 else
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001386 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
Bram Moolenaar83bab712005-08-01 21:58:57 +00001387 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001388 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001389 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001390 if w:netrw_longlist == 1
1391 " shorten the list to keep its width <= winwidth characters
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001392 exe "silent keepjumps ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001393 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00001394 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001395 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001396
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001397 call s:NetrwWideListing()
1398 if line("$") >= w:netrw_bannercnt
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001399 " place cursor on the top-left corner of the file listing
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001400 exe "keepjumps ".w:netrw_bannercnt
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001401 norm! 0
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001402 endif
Bram Moolenaar572cb562005-08-05 21:35:02 +00001403
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001404 call s:NetOptionRestore()
Bram Moolenaar572cb562005-08-05 21:35:02 +00001405 setlocal nomod noma nonu
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001406
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001407" call Dret("NetBrowse")
1408 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001409endfun
1410
1411" ---------------------------------------------------------------------
Bram Moolenaar843ee412004-06-30 16:16:41 +00001412" NetBrowseChgDir: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001413fun! s:NetBrowseChgDir(dirname,newdir)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001414" call Dfunc("NetBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001415
1416 let dirname= a:dirname
Bram Moolenaar843ee412004-06-30 16:16:41 +00001417 let newdir = a:newdir
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001418
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001419 if newdir !~ '[\/]$'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001420 " handling a file
1421 let dirname= dirname.newdir
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001422" call Decho("handling a file: dirname<".dirname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001423
1424 elseif newdir == './'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001425 " refresh the directory list
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001426" call Decho("refresh directory listing")
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001427 setlocal ma nobl bh=hide
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001428 %d
1429
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001430 elseif newdir == '../'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001431 " go up one directory
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001432 let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','')
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001433
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001434 if trailer =~ '^\%(\.\./\)*$'
1435 " tack on a ../"
1436 let dirname= dirname.'../'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001437
1438 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001439 " strip off a directory name from dirname
1440 let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','')
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001441 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001442" call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001443
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001444 else
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001445 " go down one directory
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001446 let dirname= dirname.newdir
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001447" call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001448 endif
1449
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001450" call Dret("NetBrowseChgDir <".dirname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001451 return dirname
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001452endfun
1453
Bram Moolenaar843ee412004-06-30 16:16:41 +00001454" ---------------------------------------------------------------------
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001455" NetGetWord: it gets the directory named under the cursor
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001456fun! s:NetGetWord()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001457" call Dfunc("NetGetWord() line#".line("."))
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00001458 call s:UseBufWinVars()
1459
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001460 " insure that w:netrw_longlist is set up
1461 if !exists("w:netrw_longlist")
1462 if exists("g:netrw_longlist")
1463 let w:netrw_longlist= g:netrw_longlist
1464 else
1465 let w:netrw_longlist= 0
1466 endif
1467 endif
1468
Bram Moolenaar488c6512005-08-11 20:09:58 +00001469 if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001470 " Active Banner support
1471" call Decho("active banner handling")
1472 norm! 0
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001473 let dirname= "./"
Bram Moolenaar488c6512005-08-11 20:09:58 +00001474 let curline= getline(".")
1475 if curline =~ '"\s*Sorted by\s'
1476 norm s
1477 let s:netrw_skipbrowse= 1
1478 echo 'Pressing "s" also works'
1479 elseif curline =~ '"\s*Sort sequence:'
1480 let s:netrw_skipbrowse= 1
1481 echo 'Press "S" to edit sorting sequence'
1482 elseif curline =~ '"\s*Quick Help:'
1483 norm ?
1484 let s:netrw_skipbrowse= 1
1485 echo 'Pressing "?" also works'
1486 elseif curline =~ '"\s*\%(Hiding\|Showing\):'
1487 norm a
1488 let s:netrw_skipbrowse= 1
1489 echo 'Pressing "a" also works'
1490 elseif line("$") > w:netrw_bannercnt
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001491 exe 'silent keepjumps '.w:netrw_bannercnt
Bram Moolenaar488c6512005-08-11 20:09:58 +00001492 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001493
1494 elseif w:netrw_longlist == 0
1495" call Decho("thin column handling")
1496 norm! 0
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001497 let dirname= getline(".")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001498
1499 elseif w:netrw_longlist == 1
1500" call Decho("long column handling")
1501 norm! 0
1502 let dirname= substitute(getline("."),'^\(\%(\S\+\s\)*\S\+\).\{-}$','\1','e')
1503
1504 else
1505" call Decho("obtain word from wide listing")
1506 let dirname= getline(".")
1507
1508 if !exists("b:netrw_cpf")
1509 let b:netrw_cpf= 0
1510 exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
1511" call Decho("computed cpf")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001512 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001513
1514 let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
1515" call Decho("virtcol=".virtcol(".")." cpf=".b:netrw_cpf." bannercnt=".w:netrw_bannercnt." filestart=".filestart)
1516" call Decho("1: dirname<".dirname.">")
1517 if filestart > 0|let dirname= substitute(dirname,'^.\{'.filestart.'}','','')|endif
1518" call Decho("2: dirname<".dirname.">")
1519 let dirname = substitute(dirname,'^\(.\{'.b:netrw_cpf.'}\).*$','\1','e')
1520" call Decho("3: dirname<".dirname.">")
1521 let dirname = substitute(dirname,'\s\+$','','e')
1522" call Decho("4: dirname<".dirname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001523 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001524
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001525" call Dret("NetGetWord <".dirname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001526 return dirname
1527endfun
1528
1529" ---------------------------------------------------------------------
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001530" NetBrowseRm: remove/delete a remote file or directory {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001531fun! s:NetBrowseRm(usrhost,path) range
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001532" call Dfunc("NetBrowseRm(usrhost<".a:usrhost."> path<".a:path.">)")
1533" call Decho("firstline=".a:firstline." lastline=".a:lastline)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001534
1535 " preparation for removing multiple files/directories
1536 let ctr= a:firstline
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001537 let all= 0
Bram Moolenaar843ee412004-06-30 16:16:41 +00001538
1539 " remove multiple files and directories
1540 while ctr <= a:lastline
1541 exe ctr
1542
1543 norm! 0
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001544 let rmfile= s:NetGetWord()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001545" call Decho("rmfile<".rmfile.">")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001546
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001547 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
Bram Moolenaar843ee412004-06-30 16:16:41 +00001548 " attempt to remove file
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001549 if !all
1550 echohl Statement
1551 call inputsave()
1552 let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
1553 call inputrestore()
1554 echohl NONE
Bram Moolenaar61036992005-10-12 20:54:52 +00001555 if ok == ""
1556 let ok="no"
1557 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001558 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
1559 if ok =~ 'a\%[ll]'
1560 let all= 1
1561 endif
1562 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001563
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001564 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaar488c6512005-08-11 20:09:58 +00001565 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001566 silent! keepjumps .,$d
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001567 call s:NetBrowseFtpCmd(a:path,"delete ".rmfile)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001568 else
1569 let netrw_rm_cmd= substitute(g:netrw_rm_cmd,'HOSTNAME',a:usrhost,'').' "'.escape(a:path.rmfile,s:netrw_cd_escape).'"'
1570" call Decho("attempt to remove file: system(".netrw_rm_cmd.")")
1571 let ret= system(netrw_rm_cmd)
1572" call Decho("returned=".ret." errcode=".v:shell_error)
1573 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001574 elseif ok =~ 'q\%[uit]'
1575 break
Bram Moolenaar843ee412004-06-30 16:16:41 +00001576 endif
1577
1578 else
1579 " attempt to remove directory
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001580 if !all
1581 call inputsave()
1582 let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
1583 call inputrestore()
Bram Moolenaar61036992005-10-12 20:54:52 +00001584 if ok == ""
1585 let ok="no"
1586 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001587 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
1588 if ok =~ 'a\%[ll]'
1589 let all= 1
1590 endif
1591 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00001592
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001593 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaar488c6512005-08-11 20:09:58 +00001594 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001595 call s:NetBrowseFtpCmd(a:path,"rmdir ".rmfile)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001596 else
1597 let rmfile = a:path.rmfile
1598 let netrw_rmdir_cmd= substitute(g:netrw_rmdir_cmd,'HOSTNAME',a:usrhost,'').' '."'".'"'.rmfile.'"'."'"
1599" call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")")
1600 let ret= system(netrw_rmdir_cmd)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001601" call Decho("returned=".ret." errcode=".v:shell_error)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001602
1603 if v:shell_error != 0
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001604 let netrw_rmf_cmd= substitute(g:netrw_rmf_cmd,'HOSTNAME',a:usrhost,'').' '.substitute(rmfile,'[\/]$','','e')
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001605" call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
1606 let ret= system(netrw_rmf_cmd)
1607" call Decho("returned=".ret." errcode=".v:shell_error)
1608
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001609 if v:shell_error != 0 && !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001610 echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001611 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001612 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00001613 endif
1614 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001615
1616 elseif ok =~ 'q\%[uit]'
1617 break
Bram Moolenaar843ee412004-06-30 16:16:41 +00001618 endif
1619 endif
1620
1621 let ctr= ctr + 1
1622 endwhile
1623
1624 " refresh the directory
1625 let curline= line(".")-1
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001626" call Decho("refresh the directory")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001627 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))
1628 exe curline
1629
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001630" call Dret("NetBrowseRm")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001631endfun
1632
1633" ---------------------------------------------------------------------
1634" NetBrowseRename: rename a remote file or directory {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001635fun! s:NetBrowseRename(usrhost,path) range
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001636" call Dfunc("NetBrowseRename(usrhost<".a:usrhost."> path<".a:path.">)")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001637
1638 " preparation for removing multiple files/directories
1639 let ctr = a:firstline
1640 let rename_cmd = substitute(g:netrw_rename_cmd,'\<HOSTNAME\>',a:usrhost,'')
1641
1642 " attempt to rename files/directories
1643 while ctr <= a:lastline
Bram Moolenaar8299df92004-07-10 09:47:34 +00001644 exe "keepjumps ".ctr
Bram Moolenaar843ee412004-06-30 16:16:41 +00001645
1646 norm! 0
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001647 let oldname= s:NetGetWord()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001648" call Decho("oldname<".oldname.">")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001649
1650 call inputsave()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001651 let newname= input("Moving ".oldname." to : ",oldname)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001652 call inputrestore()
1653
Bram Moolenaar488c6512005-08-11 20:09:58 +00001654 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001655 call s:NetBrowseFtpCmd(a:path,"rename ".oldname." ".newname)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001656 else
1657 let oldname= a:path.oldname
1658 let newname= a:path.newname
1659" call Decho("system(rename_cmd".' "'.escape(oldname," ").'" "'.escape(newname,s:netrw_cd_escape).'"')
1660 let ret= system(rename_cmd.' "'.escape(oldname,s:netrw_cd_escape).'" "'.escape(newname,s:netrw_cd_escape).'"')
1661 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00001662
1663 let ctr= ctr + 1
1664 endwhile
1665
1666 " refresh the directory
1667 let curline= line(".")
1668 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))
Bram Moolenaar8299df92004-07-10 09:47:34 +00001669 exe "keepjumps ".curline
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001670" call Dret("NetBrowseRename")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001671endfun
1672
1673" ---------------------------------------------------------------------
Bram Moolenaar572cb562005-08-05 21:35:02 +00001674" NetRefresh: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001675fun! s:NetRefresh(dirname)
Bram Moolenaar572cb562005-08-05 21:35:02 +00001676" call Dfunc("NetRefresh(dirname<".a:dirname.">)")
1677 set ma
1678 %d
1679 call <SID>NetBrowse(dirname)
1680 redraw!
1681" call Dret("NetRefresh")
1682endfun
1683
1684" ---------------------------------------------------------------------
Bram Moolenaar488c6512005-08-11 20:09:58 +00001685" NetSplit: mode {{{2
1686" =0 : net and o
1687" =1 : net and v
1688" =2 : local and o
1689" =3 : local and v
1690fun! s:NetSplit(mode)
1691" call Dfunc("NetSplit(mode=".a:mode.")")
1692
1693 call s:SaveWinVars()
1694 if a:mode == 0
1695 exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
1696 call s:CopyWinVars()
1697 exe "norm! 0"
1698 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))
1699 elseif a:mode ==1
1700 exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
1701 call s:CopyWinVars()
1702 exe "norm! 0"
1703 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))
1704 elseif a:mode ==2
1705 exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
1706 call s:CopyWinVars()
1707 exe "norm! 0"
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001708 call s:LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))
Bram Moolenaar488c6512005-08-11 20:09:58 +00001709 else
1710 exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
1711 call s:CopyWinVars()
1712 exe "norm! 0"
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001713 call s:LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))
Bram Moolenaar488c6512005-08-11 20:09:58 +00001714 endif
1715
1716" call Dret("NetSplit")
1717endfun
1718
1719" ---------------------------------------------------------------------
Bram Moolenaar843ee412004-06-30 16:16:41 +00001720" NetBrowseX: allows users to write custom functions to operate on {{{2
Bram Moolenaar8299df92004-07-10 09:47:34 +00001721" files given their extension. Passes 0=local, 1=remote
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001722fun! s:NetBrowseX(fname,remote)
Bram Moolenaar8299df92004-07-10 09:47:34 +00001723" call Dfunc("NetBrowseX(".a:fname." remote=".a:remote.")")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001724
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001725 " set up the filename
1726 " (lower case the extension, make a local copy of a remote file)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001727 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001728 if has("win32") || has("win95") || has("win64") || has("win16")
1729 let exten= substitute(exten,'^.*$','\L&\E','')
1730 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001731 let fname= escape(a:fname,"%#")
1732" call Decho("fname<".fname."> after escape()")
1733
1734 if a:remote == 1
1735 " create a local copy
1736 let fname= tempname().".".exten
1737" call Decho("create a local copy of <".a:fname."> as <".fname.">")
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001738 exe "silent keepjumps bot 1new ".a:fname
Bram Moolenaar572cb562005-08-05 21:35:02 +00001739 set bh=delete
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001740 exe "w! ".fname
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001741 q
1742 endif
Bram Moolenaar61036992005-10-12 20:54:52 +00001743" call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
Bram Moolenaar8299df92004-07-10 09:47:34 +00001744
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001745 " set up redirection
1746 if &srr =~ "%s"
1747 let redir= substitute(&srr,"%s","/dev/null"."")
1748 else
1749 let redir= &srr . "/dev/null"
1750 endif
1751" call Decho("redir:".redir.":")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001752
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001753 " execute the file handler
1754 if has("win32") || has("win64")
1755" call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"')
1756 exe 'silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"'
1757 let ret= v:shell_error
1758
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001759 elseif has("unix") && executable("gnome-open")
1760" call Decho("exe silent !gnome-open '".escape(fname,'%#')."' ".redir)
1761 exe "silent !gnome-open '".escape(fname,'%#')."'".redir
1762 let ret= v:shell_error
1763
Bram Moolenaar61036992005-10-12 20:54:52 +00001764 elseif has("unix") && executable("kfmclient")
1765" call Decho("exe silent !kfmclient exec '".escape(fname,'%#')."' ".redir)
1766 exe "silent !kfmclient exec '".escape(fname,'%#')."' ".redir
1767 let ret= v:shell_error
1768
1769 else
1770 call netrwFileHandlers#Init()
1771 if exten != "" && exists("*netrwFileHandlers#NFH_".exten)
1772" call Decho("let ret= netrwFileHandlers#NFH_".exten.'("'.fname.'")')
1773 exe "let ret= netrwFileHandlers#NFH_".exten.'("'.fname.'")'
1774 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001775 endif
1776 redraw!
Bram Moolenaar8299df92004-07-10 09:47:34 +00001777
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001778 " cleanup: remove temporary file,
1779 " delete current buffer if success with handler,
1780 " return to prior buffer (directory listing)
1781 if a:remote == 1 && fname != a:fname
1782" call Decho("deleting temporary file<".fname.">")
1783 call delete(fname)
1784 endif
1785
1786 if a:remote == 1
Bram Moolenaar572cb562005-08-05 21:35:02 +00001787 set bh=delete bt=nofile noswf
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001788 exe "norm! \<c-o>"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001789 redraw!
Bram Moolenaar843ee412004-06-30 16:16:41 +00001790 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00001791
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001792" call Dret("NetBrowseX")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001793endfun
1794
1795" ---------------------------------------------------------------------
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001796" NetBrowseFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2
1797" This function assumes that a long listing will be received. Size, time,
1798" and reverse sorts will be requested of the server but not otherwise
1799" enforced here.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001800fun! s:NetBrowseFtpCmd(path,cmd)
Bram Moolenaar488c6512005-08-11 20:09:58 +00001801" call Dfunc("NetBrowseFtpCmd(path<".a:path."> cmd<".a:cmd.">) netrw_method=".w:netrw_method)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001802
1803 " because WinXX ftp uses unix style input
1804 " curline is one more than the bannercnt in order to account
1805 " for the unwanted first blank line (doing a :put to an empty
1806 " buffer yields a blank first line)
1807 let ffkeep= &ff
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001808 setlocal ma ff=unix
Bram Moolenaar488c6512005-08-11 20:09:58 +00001809 let curline= w:netrw_bannercnt+1
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001810 exe "silent! keepjumps ".curline.",$d"
1811
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001812 ".........................................
1813 if w:netrw_method == 2 || w:netrw_method == 5
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001814 " ftp + <.netrc>: Method #2
1815 if a:path != ""
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001816 put ='cd \"'.a:path.'\"'
1817" call Decho('ftp: '.getline("."))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001818 endif
1819 exe "put ='".a:cmd."'"
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001820" call Decho("ftp: ".getline("."))
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001821" redraw!|call inputsave()|call input("Pausing...")|call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001822 if exists("g:netrw_port") && g:netrw_port != ""
1823" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
1824 exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
1825 else
1826" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
1827 exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
1828 endif
1829
1830 ".........................................
Bram Moolenaar488c6512005-08-11 20:09:58 +00001831 elseif w:netrw_method == 3
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001832 " ftp + machine,id,passwd,filename: Method #3
1833 setlocal ff=unix
1834 if exists("g:netrw_port") && g:netrw_port != ""
1835 put ='open '.g:netrw_machine.' '.g:netrw_port
1836 else
1837 put ='open '.g:netrw_machine
1838 endif
1839
1840 if exists("g:netrw_ftp") && g:netrw_ftp == 1
1841 put =g:netrw_uid
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001842 put ='\"'.g:netrw_passwd.'\"'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001843 else
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001844 put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001845 endif
1846
1847 if a:path != ""
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001848 put ='cd \"'.a:path.'\"'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001849 endif
1850 exe "put ='".a:cmd."'"
1851
1852 " perform ftp:
1853 " -i : turns off interactive prompting from ftp
1854 " -n unix : DON'T use <.netrc>, even though it exists
1855 " -n win32: quit being obnoxious about password
1856" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
1857 exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n"
1858
1859 ".........................................
1860 else
1861 echo "***warning*** unable to comply with your request<" . choice . ">"
1862 endif
1863
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001864 " cleanup for Windows
1865 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001866 silent! keepjumps! %s/\r$//e
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001867 endif
1868 if a:cmd == "dir"
1869 " infer directory/link based on the file permission string
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001870 silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@
1871 silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001872 if w:netrw_longlist == 0 || w:netrw_longlist == 2
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001873 exe "silent! keepjumps ".curline.',$s/^\%(\S\+\s\+\)\{8}//e'
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001874 endif
1875 endif
1876
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001877 " ftp's ls doesn't seem to include ./ or ../
1878 if !search('^\.\/$','wn')
1879 exe 'keepjumps '.curline
1880 if a:path !~ '^$'
1881 put ='../'
1882 endif
1883 put ='./'
1884 exe 'keepjumps '.curline
1885 endif
1886
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001887 " restore settings
1888 let &ff= ffkeep
1889" call Dret("NetBrowseFtpCmd")
1890endfun
1891
1892" ---------------------------------------------------------------------
Bram Moolenaar843ee412004-06-30 16:16:41 +00001893" NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
1894" separated patterns given in g:netrw_list_hide
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001895fun! s:NetrwListHide()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001896" call Dfunc("NetrwListHide() listhide<".g:netrw_list_hide.">")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001897
1898 let listhide= g:netrw_list_hide
1899 while listhide != ""
1900 if listhide =~ ','
1901 let hide = substitute(listhide,',.*$','','e')
1902 let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e')
1903 else
1904 let hide = listhide
1905 let listhide= ""
1906 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001907
1908 " Prune the list by hiding any files which match
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001909" call Decho("pruning <".hide."> listhide<".listhide.">")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001910 if g:netrw_hide == 1
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001911 exe 'silent keepjumps '.w:netrw_bannercnt.',$g~'.hide.'~d'
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001912 elseif g:netrw_hide == 2
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001913 exe 'silent keepjumps '.w:netrw_bannercnt.',$v~'.hide.'~d'
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001914 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00001915 endwhile
1916
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001917" call Dret("NetrwListHide")
1918endfun
1919
1920" ---------------------------------------------------------------------
1921" NetHideEdit: allows user to edit the file/directory hiding list
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001922fun! s:NetHideEdit(mode)
Bram Moolenaar8299df92004-07-10 09:47:34 +00001923" call Dfunc("NetHideEdit(mode=".a:mode.")")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001924
1925 call inputsave()
1926 let newhide= input("Edit Hiding List: ",g:netrw_list_hide)
1927 call inputrestore()
1928
1929 " refresh the listing
1930 let g:netrw_list_hide= newhide
Bram Moolenaar8299df92004-07-10 09:47:34 +00001931 if a:mode == 0
1932 silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
1933 else
Bram Moolenaar572cb562005-08-05 21:35:02 +00001934 silent call s:LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,"./"))
Bram Moolenaar8299df92004-07-10 09:47:34 +00001935 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001936
1937" call Dret("NetHideEdit")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001938endfun
1939
Bram Moolenaar8299df92004-07-10 09:47:34 +00001940" ---------------------------------------------------------------------
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001941" NetSortSequence: allows user to edit the sorting sequence
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001942fun! s:NetSortSequence(mode)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001943" call Dfunc("NetSortSequence(mode=".a:mode.")")
1944
1945 call inputsave()
1946 let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence)
1947 call inputrestore()
1948
1949 " refresh the listing
1950 let g:netrw_sort_sequence= newsortseq
1951 if a:mode == 0
1952 silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
1953 else
1954 silent call s:LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,"./"))
1955 endif
1956
1957" call Dret("NetSortSequence")
1958endfun
1959
1960" ---------------------------------------------------------------------
Bram Moolenaar8299df92004-07-10 09:47:34 +00001961" NetLongList: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001962fun! s:NetLongList(mode)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001963" call Dfunc("NetLongList(mode=".a:mode.") netrw_longlist=".w:netrw_longlist)
1964 let fname = s:NetGetWord()
1965 let w:netrw_longlist = (w:netrw_longlist + 1) % 3
1966" call Decho("fname<".fname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001967
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001968 if w:netrw_longlist == 0
1969 " use one column listing
1970" call Decho("use one column list")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001971 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
1972
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001973 elseif w:netrw_longlist == 1
1974 " use long list
1975" call Decho("use long list")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001976 let g:netrw_list_cmd = g:netrw_list_cmd." -l"
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001977
1978 else
1979 " give wide list
1980" call Decho("use wide list")
1981 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
Bram Moolenaar8299df92004-07-10 09:47:34 +00001982 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001983 setlocal ma
Bram Moolenaar572cb562005-08-05 21:35:02 +00001984
1985 " clear buffer - this will cause NetBrowse/LocalBrowse to do a refresh
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001986 %d
Bram Moolenaar8299df92004-07-10 09:47:34 +00001987
1988 " refresh the listing
1989 if a:mode == 0
1990 silent call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),"./"))
1991 else
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001992 silent call s:LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,"./"))
Bram Moolenaar8299df92004-07-10 09:47:34 +00001993 endif
1994
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001995 " keep cursor on the filename
1996 silent keepjumps $
1997 if fname =~ '/$'
1998 silent call search('\%(^\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bW')
1999 else
2000 silent call search('\%(^\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bW')
2001 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002002
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002003" call Dret("NetLongList : w:netrw_longlist=".w:netrw_longlist)
2004endfun
2005
2006" ---------------------------------------------------------------------
2007" NetrwWideListing: {{{2
2008fun! s:NetrwWideListing()
2009" call Dfunc("NetrwWideListing()")
2010
2011 if w:netrw_longlist == 2
2012 " look for longest filename (cpf=characters per filename)
2013 " cpf: characters per file
2014 " fpl: files per line
2015 " fpc: files per column
2016 set ma
2017 let b:netrw_cpf= 0
2018 if line("$") >= w:netrw_bannercnt
2019 exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
2020 else
2021" call Dret("NetrwWideListing")
2022 return
2023 endif
2024" call Decho("max file strlen+1=".b:netrw_cpf)
2025 let b:netrw_cpf= b:netrw_cpf + 1
2026
2027 " determine qty files per line (fpl)
2028 let w:netrw_fpl= winwidth(0)/b:netrw_cpf
2029" call Decho("fpl= ".winwidth(0)."/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
2030
2031 " make wide display
2032 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^.*$/\=printf("%-'.b:netrw_cpf.'s",submatch(0))/'
2033 let fpc = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
2034 let newcolstart = w:netrw_bannercnt + fpc
2035 let newcolend = newcolstart + fpc - 1
2036" call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]")
2037 while line("$") >= newcolstart
2038 if newcolend > line("$") | let newcolend= line("$") | endif
2039 let newcolqty= newcolend - newcolstart
2040 exe newcolstart
2041 if newcolqty == 0
2042 exe "silent keepjumps norm! 0\<c-v>$hx".w:netrw_bannercnt."G$p"
2043 else
2044 exe "silent keepjumps norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p'
2045 endif
2046 exe "silent keepjumps ".newcolstart.','.newcolend.'d'
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002047 exe 'silent keepjumps '.w:netrw_bannercnt
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002048 endwhile
2049 exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002050 setlocal noma nomod
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002051 endif
2052
2053" call Dret("NetrwWideListing")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002054endfun
2055
2056" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00002057" NetSaveWordPosn: used by the "s" command in both remote and local {{{2
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002058" browsing. Along with NetRestoreWordPosn(), it keeps the cursor on
2059" the same word even though the sorting has changed its order of appearance.
2060fun! s:NetSaveWordPosn()
2061" call Dfunc("NetSaveWordPosn()")
2062 let s:netrw_saveword= '^'.escape(getline("."),s:netrw_cd_escape).'$'
2063" call Dret("NetSaveWordPosn : saveword<".s:netrw_saveword.">")
2064endfun
2065
2066" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00002067" NetRestoreWordPosn: used by the "s" command; see NetSaveWordPosn() above {{{2
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002068fun! s:NetRestoreWordPosn()
2069" call Dfunc("NetRestoreWordPosn()")
2070 silent! call search(s:netrw_saveword,'w')
2071" call Dret("NetRestoreWordPosn")
2072endfun
2073
2074" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00002075" NetMakeDir: this function makes a directory (both local and remote) {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002076fun! s:NetMakeDir(usrhost)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002077" call Dfunc("NetMakeDir(usrhost<".a:usrhost.">)")
2078
2079 " get name of new directory from user. A bare <CR> will skip.
2080 " if its currently a directory, also request will be skipped, but with
2081 " a message.
2082 call inputsave()
2083 let newdirname= input("Please give directory name: ")
2084 call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002085" call Decho("newdirname<".newdirname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002086
2087 if newdirname == ""
2088" call Dret("NetMakeDir : user aborted with bare <cr>")
2089 return
2090 endif
2091
2092 if a:usrhost == ""
2093
2094 " Local mkdir:
2095 " sanity checks
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002096 let fullnewdir= b:netrw_curdir.'/'.newdirname
2097" call Decho("fullnewdir<".fullnewdir.">")
2098 if isdirectory(fullnewdir)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002099 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002100 echohl WarningMsg | echo "***netrw*** <".newdirname."> is already a directory!" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002101 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002102 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002103" call Dret("NetMakeDir : directory<".newdirname."> exists previously")
2104 return
2105 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002106 if filereadable(fullnewdir)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002107 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002108 echohl WarningMsg | echo "***netrw*** <".newdirname."> is already a file!" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002109 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002110 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002111" call Dret("NetMakeDir : file<".newdirname."> exists previously")
2112 return
2113 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002114
2115 " requested new local directory is neither a pre-existing file or
2116 " directory, so make it!
2117 if exists("*mkdir")
2118 call mkdir(fullnewdir,"p")
2119 else
2120 let netrw_origdir= s:NetGetcwd(1)
2121 exe 'cd '.b:netrw_curdir
2122" call Decho("netrw_origdir<".netrw_origdir."> b:netrw_curdir<".b:netrw_curdir.">")
2123" call Decho("exe silent! !".g:netrw_local_mkdir.' "'.newdirname.'"')
2124 exe "silent! !".g:netrw_local_mkdir.' "'.newdirname.'"'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002125 if !g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002126 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002127
Bram Moolenaar8299df92004-07-10 09:47:34 +00002128 if v:shell_error == 0
2129 " refresh listing
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002130" call Decho("refresh listing")
2131 let linenum= line(".")
2132 norm! H0
2133 let hline = line(".")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002134 set ma|norm! 2D
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002135 call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,'./'))
2136 exe "norm! ".hline."G0z\<CR>"
2137 exe linenum
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002138 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002139 echohl Error | echo "***netrw*** unable to make directory<".newdirname.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002140 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +00002141 endif
2142 redraw!
2143
2144 else
2145 " Remote mkdir:
2146 let mkdircmd = substitute(g:netrw_mkdir_cmd,'\<HOSTNAME\>',a:usrhost,'')
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002147 let newdirname= "'".'"'.substitute(expand("%"),'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname.'"'."'"
Bram Moolenaar8299df92004-07-10 09:47:34 +00002148" call Decho("exe silent! !".mkdircmd." ".newdirname)
2149 exe "silent! !".mkdircmd." ".newdirname
2150 if v:shell_error == 0
2151 " refresh listing
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002152 let linenum= line(".")
2153 norm! H0
2154 let hline = line(".")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002155 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002156 exe "norm! ".hline."G0z\<CR>"
2157 exe linenum
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002158 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002159 echohl Error | echo "***netrw*** unable to make directory<".newdirname.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002160 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +00002161 endif
2162 redraw!
2163 endif
2164
2165" call Dret("NetMakeDir")
2166endfun
2167
2168" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00002169" NetBookmarkDir: {{{2
Bram Moolenaar572cb562005-08-05 21:35:02 +00002170" 0: (user: <b>) bookmark current directory
2171" 1: (user: <B>) change to the bookmarked directory
2172" 2: (user: <q>) list bookmarks
2173" 3: (LocalBrowse) record current directory history
2174" 4: (user: <u>) go up (previous) bookmark
2175" 5: (user: <U>) go down (next) bookmark
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002176fun! s:NetBookmarkDir(chg,curdir)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002177" call Dfunc("NetBookmarkDir(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count)
Bram Moolenaar488c6512005-08-11 20:09:58 +00002178 if exists("w:netrw_bannercnt") && line(".") <= w:netrw_bannercnt
2179 " looks like a "b" was pressed while in the banner region
2180 if line("$") > w:netrw_bannercnt
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002181 exe 'silent keepjumps '.w:netrw_bannercnt
Bram Moolenaar488c6512005-08-11 20:09:58 +00002182 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002183 if &ch > 1
2184 " "clear" the message
2185 echo ""
2186 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002187" call Dret("NetBookmarkDir - ignoring")
2188 return
2189 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002190
2191 if a:chg == 0
2192 " bookmark the current directory
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00002193 let g:NETRW_BOOKMARKDIR_{v:count}= a:curdir
2194 if !exists("g:NETRW_BOOKMARKMAX")
2195 let g:NETRW_BOOKMARKMAX= v:count
2196 elseif v:count > g:NETRW_BOOKMARKMAX
2197 let g:NETRW_BOOKMARKMAX= v:count
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002198 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002199 echo "bookmarked the current directory"
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002200
2201 elseif a:chg == 1
2202 " change to the bookmarked directory
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00002203 if exists("g:NETRW_BOOKMARKDIR_{v:count}")
2204 exe "e ".g:NETRW_BOOKMARKDIR_{v:count}
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002205 else
2206 echomsg "Sorry, bookmark#".v:count." doesn't exist!"
2207 endif
2208
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002209 elseif a:chg == 2
Bram Moolenaar572cb562005-08-05 21:35:02 +00002210 " list user's bookmarks
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002211 if exists("g:NETRW_BOOKMARKMAX")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002212" call Decho("list bookmarks [0,".g:NETRW_BOOKMARKMAX."]")
2213 let cnt= 0
2214 while cnt <= g:NETRW_BOOKMARKMAX
2215 if exists("g:NETRW_BOOKMARKDIR_{cnt}")
2216" call Decho("Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt})
2217 echo "Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt}
2218 endif
2219 let cnt= cnt + 1
2220 endwhile
2221 endif
2222
2223 " list directory history
2224 let cnt = g:NETRW_DIRHIST_CNT
2225 let first = 1
2226 let histcnt = 0
2227 while ( first || cnt != g:NETRW_DIRHIST_CNT )
2228" call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:NETRW_DIRHIST_CNT)
2229 let histcnt= histcnt + 1
2230 if exists("g:NETRW_DIRHIST_{cnt}")
2231" call Decho("Netrw History#".histcnt.": ".g:NETRW_DIRHIST_{cnt})
2232 echo "Netrw History#".histcnt.": ".g:NETRW_DIRHIST_{cnt}
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002233 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002234 let first = 0
2235 let cnt = ( cnt - 1 ) % g:netrw_dirhistmax
2236 if cnt < 0
2237 let cnt= cnt + g:netrw_dirhistmax
2238 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002239 endwhile
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002240
2241 elseif a:chg == 3
Bram Moolenaar572cb562005-08-05 21:35:02 +00002242 " saves most recently visited directories (when they differ)
2243 if !exists("g:NETRW_DIRHIST_0") || g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT} != a:curdir
2244 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
2245 let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= substitute(a:curdir,'[/\\]$','','e')
2246" call Decho("save dirhist#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
2247 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002248
2249 elseif a:chg == 4
2250 " u: change to the previous directory stored on the history list
2251 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
2252 if g:NETRW_DIRHIST_CNT < 0
2253 let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
2254 endif
2255 if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
2256" call Decho("changedir u#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
2257 exe "e ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
2258 else
2259 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
2260 echo "Sorry, no predecessor directory exists yet"
2261 endif
2262
2263 elseif a:chg == 5
2264 " U: change to the subsequent directory stored on the history list
2265 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
2266 if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
2267" call Decho("changedir U#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
2268 exe "e ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
2269 else
2270 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
2271 if g:NETRW_DIRHIST_CNT < 0
2272 let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
2273 endif
2274 echo "Sorry, no successor directory exists yet"
2275 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002276 endif
2277" call Dret("NetBookmarkDir")
2278endfun
2279
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002280" ---------------------------------------------------------------------
2281" NetObtain: obtain file under cursor (for remote browsing support) {{{2
2282fun! s:NetObtain()
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002283 let fname= expand("<cWORD>")
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002284
2285 " NetrwStatusLine support - for obtaining support
2286 call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.fname)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002287
2288" call Dfunc("NetObtain() method=".w:netrw_method)
2289 if exists("w:netrw_method") && w:netrw_method =~ '[235]'
2290 if executable("ftp")
2291 let curdir = expand("%")
2292 let path = substitute(curdir,'ftp://[^/]\+/','','e')
2293 let curline= line(".")
2294 let endline= line("$")+1
2295 set ma
2296 keepjumps $
2297
2298 ".........................................
2299 if w:netrw_method == 2
2300 " ftp + <.netrc>: Method #2
2301 if path != ""
2302 put ='cd '.path
2303" call Decho("ftp: cd ".path)
2304 endif
2305 put ='get '.fname
2306" call Decho("ftp: get ".fname)
2307 if exists("g:netrw_port") && g:netrw_port != ""
2308" call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
2309 exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
2310 else
2311" call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
2312 exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
2313 endif
2314
2315 ".........................................
2316 elseif w:netrw_method == 3
2317 " ftp + machine,id,passwd,filename: Method #3
2318 setlocal ff=unix
2319 if exists("g:netrw_port") && g:netrw_port != ""
2320 put ='open '.g:netrw_machine.' '.g:netrw_port
2321" call Decho('ftp: open '.g:netrw_machine.' '.g:netrw_port)
2322 else
2323 put ='open '.g:netrw_machine
2324" call Decho('ftp: open '.g:netrw_machine
2325 endif
2326
2327 if exists("g:netrw_ftp") && g:netrw_ftp == 1
2328 put =g:netrw_uid
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002329 put ='\"'.g:netrw_passwd.'\"'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002330" call Decho('ftp: g:netrw_uid')
2331" call Decho('ftp: g:netrw_passwd')
2332 else
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002333 put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002334" call Decho('user '.g:netrw_uid.' '.g:netrw_passwd)
2335 endif
2336
2337 if a:path != ""
2338 put ='cd '.a:path
2339" call Decho('cd '.a:path)
2340 endif
2341 exe "put ='".a:cmd."'"
2342" call Decho("ftp: ".a:cmd)
2343
2344 " perform ftp:
2345 " -i : turns off interactive prompting from ftp
2346 " -n unix : DON'T use <.netrc>, even though it exists
2347 " -n win32: quit being obnoxious about password
2348" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
2349 exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i -n"
2350
2351 ".........................................
2352 else
2353 echo "***warning*** unable to comply with your request<" . choice . ">"
2354 endif
2355 " restore
2356 exe "silent! ".endline.",$d"
2357 exe "keepjumps ".curline
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002358 setlocal noma nomod
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002359 else
2360 if !exists("g:netrw_quiet")
2361 echohl Error | echo "***netrw*** this system doesn't support ftp" | echohl None
2362 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2363 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002364 let &stl = s:netrw_users_stl
2365 let &laststatus = s:netrw_users_ls
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002366" call Dret("NetObtain")
2367 return
2368 endif
2369
2370 ".........................................
2371 else
2372 " scp: Method#4
Bram Moolenaar61036992005-10-12 20:54:52 +00002373 let curdir = expand("%")
2374 let path = substitute(curdir,'scp://[^/]\+/','','e')
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002375 if exists("g:netrw_port") && g:netrw_port != ""
2376 let useport= " -P ".g:netrw_port
2377 else
2378 let useport= ""
2379 endif
2380 if g:netrw_cygwin == 1
2381 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaar61036992005-10-12 20:54:52 +00002382" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." .")
2383 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." ."
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002384 else
Bram Moolenaar61036992005-10-12 20:54:52 +00002385" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." .")
2386 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." ."
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002387 endif
2388 endif
2389
2390 " restore status line
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002391 let &stl = s:netrw_users_stl
2392 let &laststatus = s:netrw_users_ls
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002393 redraw!
2394
2395" call Dret("NetObtain")
2396endfun
2397
Bram Moolenaar83bab712005-08-01 21:58:57 +00002398" ==========================================
2399" Local Directory Browsing Support: {{{1
2400" ==========================================
Bram Moolenaar8299df92004-07-10 09:47:34 +00002401
2402" ---------------------------------------------------------------------
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002403" LocalBrowse: {{{2
2404fun! s:LocalBrowse(dirname)
2405 " unfortunate interaction -- debugging calls can't be used here;
2406 " the BufEnter event causes triggering when attempts to write to
2407 " the DBG buffer are made.
2408 if isdirectory(a:dirname)
2409 call netrw#DirBrowse(a:dirname)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002410 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002411 " not a directory, ignore it
2412endfun
Bram Moolenaar8299df92004-07-10 09:47:34 +00002413
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002414" ---------------------------------------------------------------------
2415" DirBrowse: supports local file/directory browsing {{{2
2416fun! netrw#DirBrowse(dirname)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002417 if !exists("w:netrw_longlist")|let w:netrw_longlist= g:netrw_longlist|endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002418" call Dfunc("DirBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr()." sortby=".g:netrw_sort_by)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002419" call Dredir("ls!")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002420
Bram Moolenaar488c6512005-08-11 20:09:58 +00002421 if exists("s:netrw_skipbrowse")
2422 unlet s:netrw_skipbrowse
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002423" call Dret("DirBrowse")
Bram Moolenaar488c6512005-08-11 20:09:58 +00002424 return
2425 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002426 call s:NetOptionSave()
Bram Moolenaar488c6512005-08-11 20:09:58 +00002427
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002428 if v:version < 603
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002429 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002430 echohl Error | echo "***netrw*** vim version<".v:version."> too old for browsing with netrw" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002431 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002432 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002433 call s:NetOptionRestore()
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002434" call Dret("DirBrowse : vim version<".v:version."> too old")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002435 return
2436 endif
2437
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00002438 " use buffer-oriented WinVars if buffer ones exist but window ones don't
2439 call s:UseBufWinVars()
2440
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002441 " find buffer number of buffer named precisely the same as a:dirname
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002442 let bufnum= bufnr(escape(a:dirname,'\'))
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002443" call Decho("findbuf: bufnum=".bufnum)
2444 if bufnum > 0 && bufname(bufnum) != a:dirname
2445 let ibuf= 1
2446 let buflast= bufnr("$")
2447 while bufname(ibuf) !~ '^'.a:dirname.'\=$' && ibuf <= buflast
2448" call Decho("findbuf: ibuf=".ibuf. " bufname<".bufname(ibuf)."> dirname<".a:dirname.">")
2449 let ibuf= ibuf + 1
2450 endwhile
2451 if ibuf > buflast
2452 let bufnum= -1
2453 else
2454 let bufnum= ibuf
2455 endif
2456" call Decho("findbuf: bufnum=".bufnum." (final)")
2457 endif
2458
2459 " get cleared buffer
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002460 if bufnum < 0 || !bufexists(bufnum)
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002461 keepjumps keepalt enew!
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002462" call Decho("enew buffer")
2463 else
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002464 exe "keepalt b ".bufnum
Bram Moolenaar572cb562005-08-05 21:35:02 +00002465 if exists("s:last_sort_by") && g:netrw_sort_by == s:last_sort_by
2466 if getline(2) =~ '^" Directory Listing '
2467 if !g:netrw_keepdir
2468" call Decho("change directory: cd ".b:netrw_curdir)
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002469 exe 'cd '.escape(b:netrw_curdir,s:netrw_cd_escape)
Bram Moolenaar572cb562005-08-05 21:35:02 +00002470 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002471 call s:NetOptionRestore()
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002472" call Dret("DirBrowse : reusing buffer#".bufnum."<".a:dirname.">")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002473 return
2474 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002475 endif
2476 endif
Bram Moolenaar572cb562005-08-05 21:35:02 +00002477 let s:last_sort_by= g:netrw_sort_by
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002478
2479 " get the new directory name
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002480 if has("win32") || has("win95") || has("win64") || has("win16")
2481 let b:netrw_curdir= substitute(a:dirname,'\\','/','ge')
2482 else
2483 let b:netrw_curdir= a:dirname
2484 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002485 if b:netrw_curdir =~ '[/\\]$'
2486 let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
2487 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002488 if b:netrw_curdir == ''
2489 " under unix, when the root directory is encountered, the result
2490 " from the preceding substitute is an empty string.
2491 let b:netrw_curdir= '/'
2492 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002493" call Decho("b:netrw_curdir<".b:netrw_curdir.">")
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002494
Bram Moolenaar83bab712005-08-01 21:58:57 +00002495 " make netrw's idea of the current directory vim's if the user wishes
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002496 if !g:netrw_keepdir
Bram Moolenaar83bab712005-08-01 21:58:57 +00002497" call Decho("change directory: cd ".b:netrw_curdir)
Bram Moolenaar488c6512005-08-11 20:09:58 +00002498 try
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002499 exe 'cd '.escape(b:netrw_curdir,s:netrw_cd_escape)
Bram Moolenaar488c6512005-08-11 20:09:58 +00002500 catch /^Vim\%((\a\+)\)\=:E472/
2501 echohl Error | echo "***netrw*** unable to change directory to <".b:netrw_curdir."> (permissions?)" | echohl None
2502 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2503 if exists("w:netrw_prvdir")
2504 let b:netrw_curdir= w:netrw_prvdir
2505 else
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002506 call s:NetOptionRestore()
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002507" call Dret("DirBrowse : reusing buffer#".bufnum."<".a:dirname.">")
Bram Moolenaar488c6512005-08-11 20:09:58 +00002508 return
2509 endif
2510 endtry
Bram Moolenaar83bab712005-08-01 21:58:57 +00002511 endif
2512
2513 " change the name of the buffer to reflect the b:netrw_curdir
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002514 exe 'silent! file '.escape(b:netrw_curdir,s:netrw_cd_escape)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002515
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002516 " make this buffer not-a-file, modifiable, not line-numbered, etc
2517 setlocal bh=hide bt=nofile nobl ma nonu
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002518 keepalt silent! %d
Bram Moolenaar8299df92004-07-10 09:47:34 +00002519
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002520 " ---------------------------
Bram Moolenaar8299df92004-07-10 09:47:34 +00002521 " Perform Directory Listing:
Bram Moolenaar8299df92004-07-10 09:47:34 +00002522
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002523 " save current directory on directory history list
Bram Moolenaar83bab712005-08-01 21:58:57 +00002524 call <SID>NetBookmarkDir(3,b:netrw_curdir)
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002525
Bram Moolenaar8299df92004-07-10 09:47:34 +00002526 " set up all the maps
Bram Moolenaar269ec652004-07-29 08:43:53 +00002527" call Decho("Setting up local browser maps")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002528 nnoremap <buffer> <silent> <cr> :call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
Bram Moolenaar572cb562005-08-05 21:35:02 +00002529 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 +00002530 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'../'))<cr>
Bram Moolenaar572cb562005-08-05 21:35:02 +00002531 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 Moolenaar578b49e2005-09-10 19:22:57 +00002532 if w:netrw_longlist != 2
2533 nnoremap <buffer> <silent> b :<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
2534 nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
2535 endif
2536 nnoremap <buffer> <silent> Nb :<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
2537 nnoremap <buffer> <silent> NB :<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002538 nnoremap <buffer> <silent> c :exe "cd ".b:netrw_curdir<cr>
2539 nnoremap <buffer> <silent> d :call <SID>NetMakeDir("")<cr>
2540 nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(1)<cr>
Bram Moolenaar8299df92004-07-10 09:47:34 +00002541 nnoremap <buffer> <silent> i :call <SID>NetLongList(1)<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00002542 nnoremap <buffer> <silent> o :call <SID>NetSplit(2)<cr>
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002543 nnoremap <buffer> <silent> O :call <SID>LocalObtain()<cr>
2544 nnoremap <buffer> <silent> p :call <SID>LocalPreview(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),1))<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002545 nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<cr>
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002546 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 +00002547 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>
2548 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(1)<cr>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002549 nnoremap <buffer> <silent> u :<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
2550 nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00002551 nnoremap <buffer> <silent> v :call <SID>NetSplit(3)<cr>
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002552 nnoremap <buffer> <silent> x :call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)"<cr>
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002553 nnoremap <buffer> <silent> <2-leftmouse> :call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
Bram Moolenaar572cb562005-08-05 21:35:02 +00002554 nnoremap <buffer> <silent> <s-up> :Pexplore<cr>
2555 nnoremap <buffer> <silent> <s-down> :Nexplore<cr>
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002556 exe 'nnoremap <buffer> <silent> <del> :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002557 exe 'vnoremap <buffer> <silent> <del> :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002558 exe 'nnoremap <buffer> <silent> D :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002559 exe 'vnoremap <buffer> <silent> D :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002560 exe 'nnoremap <buffer> <silent> R :call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002561 exe 'vnoremap <buffer> <silent> R :call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
Bram Moolenaar269ec652004-07-29 08:43:53 +00002562 exe 'nnoremap <buffer> <silent> <Leader>m :call <SID>NetMakeDir("")<cr>'
Bram Moolenaar8299df92004-07-10 09:47:34 +00002563 nnoremap <buffer> ? :he netrw-dir<cr>
2564
2565 " Set up the banner
Bram Moolenaar269ec652004-07-29 08:43:53 +00002566" call Decho("set up banner")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002567 keepjumps put ='\" ============================================================================'
Bram Moolenaar8299df92004-07-10 09:47:34 +00002568 keepjumps 1d
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002569 keepjumps put ='\" Directory Listing (netrw '.g:loaded_netrw.')'
Bram Moolenaar83bab712005-08-01 21:58:57 +00002570 keepjumps put ='\" '.b:netrw_curdir
Bram Moolenaar488c6512005-08-11 20:09:58 +00002571 let w:netrw_bannercnt= 3
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002572
2573 let sortby= g:netrw_sort_by
2574 if g:netrw_sort_direction =~ "^r"
2575 let sortby= sortby." reversed"
2576 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00002577
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002578 " Sorted by...
Bram Moolenaar8299df92004-07-10 09:47:34 +00002579 if g:netrw_sort_by =~ "^n"
Bram Moolenaar269ec652004-07-29 08:43:53 +00002580" call Decho("directories will be sorted by name")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002581 " sorted by name
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002582 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaar8299df92004-07-10 09:47:34 +00002583 keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence
Bram Moolenaar488c6512005-08-11 20:09:58 +00002584 let w:netrw_bannercnt= w:netrw_bannercnt + 2
Bram Moolenaar8299df92004-07-10 09:47:34 +00002585 else
Bram Moolenaar269ec652004-07-29 08:43:53 +00002586" call Decho("directories will be sorted by size or date")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002587 " sorted by size or date
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002588 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaar488c6512005-08-11 20:09:58 +00002589 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaar8299df92004-07-10 09:47:34 +00002590 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002591
2592 " Hiding... -or- Showing...
Bram Moolenaar269ec652004-07-29 08:43:53 +00002593 if g:netrw_list_hide != "" && g:netrw_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002594 if g:netrw_hide == 1
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002595 keepjumps put ='\" Hiding: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002596 else
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002597 keepjumps put ='\" Showing: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002598 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002599 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaar8299df92004-07-10 09:47:34 +00002600 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002601 keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec'
2602 keepjumps put ='\" ============================================================================'
Bram Moolenaar488c6512005-08-11 20:09:58 +00002603 let w:netrw_bannercnt= w:netrw_bannercnt + 2
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002604
2605 " bannercnt should index the line just after the banner
Bram Moolenaar488c6512005-08-11 20:09:58 +00002606 let w:netrw_bannercnt= w:netrw_bannercnt + 1
2607" call Decho("bannercnt=".w:netrw_bannercnt)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002608
2609 " generate the requested directory listing
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002610 call s:LocalBrowseList()
Bram Moolenaar8299df92004-07-10 09:47:34 +00002611
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002612 " set up syntax highlighting
2613 if has("syntax")
2614 setlocal ft=netrwlist
Bram Moolenaar572cb562005-08-05 21:35:02 +00002615 if !exists("g:syntax_on") || !g:syntax_on
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002616 setlocal ft=
2617 endif
2618 endif
2619
Bram Moolenaar8299df92004-07-10 09:47:34 +00002620 " manipulate the directory listing (hide, sort)
Bram Moolenaar488c6512005-08-11 20:09:58 +00002621 if line("$") >= w:netrw_bannercnt
Bram Moolenaar269ec652004-07-29 08:43:53 +00002622 if g:netrw_hide && g:netrw_list_hide != ""
2623 call s:NetrwListHide()
Bram Moolenaar8299df92004-07-10 09:47:34 +00002624 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002625 if line("$") >= w:netrw_bannercnt
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002626
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002627 if g:netrw_sort_by =~ "^n"
2628 call s:SetSort()
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002629
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002630 if g:netrw_sort_direction =~ 'n'
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002631 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002632 else
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002633 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
Bram Moolenaar83bab712005-08-01 21:58:57 +00002634 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002635 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002636
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002637 else
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002638 if g:netrw_sort_direction =~ 'n'
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002639 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002640 else
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002641 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
Bram Moolenaar83bab712005-08-01 21:58:57 +00002642 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002643 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002644 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002645
Bram Moolenaar8299df92004-07-10 09:47:34 +00002646 endif
2647 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002648
2649 call s:NetrwWideListing()
Bram Moolenaar488c6512005-08-11 20:09:58 +00002650 if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002651 " place cursor on the top-left corner of the file listing
2652 exe 'silent '.w:netrw_bannercnt
2653 norm! 0
Bram Moolenaar488c6512005-08-11 20:09:58 +00002654 endif
2655
2656 " record previous current directory
2657 let w:netrw_prvdir= b:netrw_curdir
Bram Moolenaar8299df92004-07-10 09:47:34 +00002658
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00002659 " save certain window-oriented variables into buffer-oriented variables
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002660 call s:SetBufWinVars()
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002661 call s:NetOptionRestore()
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002662 setlocal noma nomod nonu bh=hide nobl
Bram Moolenaar8299df92004-07-10 09:47:34 +00002663
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002664" call Dret("DirBrowse : file<".expand("%:p")."> bufname<".bufname("%").">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002665endfun
2666
2667" ---------------------------------------------------------------------
2668" LocalBrowseList: does the job of "ls" for local directories {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002669fun! s:LocalBrowseList()
Bram Moolenaar83bab712005-08-01 21:58:57 +00002670" call Dfunc("LocalBrowseList() b:netrw_curdir<".b:netrw_curdir.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002671
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002672 " get the list of files contained in the current directory
Bram Moolenaar83bab712005-08-01 21:58:57 +00002673 let dirname = escape(b:netrw_curdir,s:netrw_glob_escape)
2674 let dirnamelen = strlen(b:netrw_curdir)
2675 let filelist = glob(dirname."/*")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002676" call Decho("glob(dirname<".dirname.">,*)=".filelist)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002677 if filelist != ""
2678 let filelist= filelist."\n"
2679 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002680 let filelist= filelist.glob(dirname."/.*")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002681" call Decho("glob(dirname<".dirname.">,.*)=".glob(dirname.".*"))
2682
2683 " if the directory name includes a "$", and possibly other characters,
2684 " the glob() doesn't include "." and ".." entries.
2685 if filelist !~ '[\\/]\.[\\/]\=\(\n\|$\)'
2686" call Decho("forcibly tacking on .")
2687 if filelist == ""
2688 let filelist= dirname."."
2689 else
Bram Moolenaar83bab712005-08-01 21:58:57 +00002690 let filelist= filelist."\n".b:netrw_curdir."."
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002691 endif
2692" call Decho("filelist<".filelist.">")
2693 endif
2694 if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
2695" call Decho("forcibly tacking on ..")
Bram Moolenaar83bab712005-08-01 21:58:57 +00002696 let filelist= filelist."\n".b:netrw_curdir.".."
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002697" call Decho("filelist<".filelist.">")
2698 endif
2699 let filelist= substitute(filelist,'\n\{2,}','\n','ge')
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002700 let filelist= substitute(filelist,'\','/','ge')
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002701
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002702" call Decho("dirname<".dirname.">")
2703" call Decho("dirnamelen<".dirnamelen.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002704" call Decho("filelist<".filelist.">")
2705
2706 while filelist != ""
2707 if filelist =~ '\n'
Bram Moolenaar83bab712005-08-01 21:58:57 +00002708 let filename = substitute(filelist,'\n.*$','','e')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002709 let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
2710 else
Bram Moolenaar83bab712005-08-01 21:58:57 +00002711 let filename = filelist
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00002712 let filelist = ""
Bram Moolenaar8299df92004-07-10 09:47:34 +00002713 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002714 let pfile= filename
2715 if isdirectory(filename)
2716 let pfile= filename."/"
Bram Moolenaar8299df92004-07-10 09:47:34 +00002717 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002718 if pfile =~ '//$'
2719 let pfile= substitute(pfile,'//$','/','e')
2720 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002721 let pfile= strpart(pfile,dirnamelen)
Bram Moolenaar572cb562005-08-05 21:35:02 +00002722 let pfile= substitute(pfile,'^/','','e')
Bram Moolenaar83bab712005-08-01 21:58:57 +00002723" call Decho(" ")
2724" call Decho("filename<".filename.">")
2725" call Decho("pfile <".pfile.">")
2726
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002727 if w:netrw_longlist == 1
Bram Moolenaar83bab712005-08-01 21:58:57 +00002728 let sz = getfsize(filename)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002729 let fsz = strpart(" ",1,15-strlen(sz)).sz
2730 let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
Bram Moolenaar83bab712005-08-01 21:58:57 +00002731" call Decho("sz=".sz." fsz=".fsz)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002732 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002733
Bram Moolenaar8299df92004-07-10 09:47:34 +00002734 if g:netrw_sort_by =~ "^t"
2735 " sort by time (handles time up to 1 quintillion seconds, US)
Bram Moolenaar83bab712005-08-01 21:58:57 +00002736" call Decho("getftime(".filename.")=".getftime(filename))
2737 let t = getftime(filename)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002738 let ft = strpart("000000000000000000",1,18-strlen(t)).t
Bram Moolenaar83bab712005-08-01 21:58:57 +00002739" call Decho("exe keepjumps put ='".ft.'/'.filename."'")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002740 let ftpfile= ft.'/'.pfile
2741 keepjumps put=ftpfile
2742
Bram Moolenaar8299df92004-07-10 09:47:34 +00002743 elseif g:netrw_sort_by =~ "^s"
2744 " sort by size (handles file sizes up to 1 quintillion bytes, US)
Bram Moolenaar83bab712005-08-01 21:58:57 +00002745" call Decho("getfsize(".filename.")=".getfsize(filename))
2746 let sz = getfsize(filename)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002747 let fsz = strpart("000000000000000000",1,18-strlen(sz)).sz
Bram Moolenaar83bab712005-08-01 21:58:57 +00002748" call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002749 let fszpfile= fsz.'/'.pfile
2750 keepjumps put =fszpfile
2751
Bram Moolenaar8299df92004-07-10 09:47:34 +00002752 else
2753 " sort by name
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002754" call Decho("exe keepjumps put ='".pfile."'")
2755 keepjumps put=pfile
Bram Moolenaar8299df92004-07-10 09:47:34 +00002756 endif
2757 endwhile
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002758
2759 " cleanup any windows mess at end-of-line
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00002760 silent! keepjumps %s/\r$//e
Bram Moolenaar83bab712005-08-01 21:58:57 +00002761 setlocal ts=32
Bram Moolenaar8299df92004-07-10 09:47:34 +00002762
2763" call Dret("LocalBrowseList")
2764endfun
2765
2766" ---------------------------------------------------------------------
2767" LocalBrowseChgDir: constructs a new directory based on the current {{{2
2768" directory and a new directory name
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002769fun! s:LocalBrowseChgDir(dirname,newdir,...)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002770" call Dfunc("LocalBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">) a:0=".a:0)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002771
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002772 let dirname= substitute(a:dirname,'\\','','ge')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002773 let newdir = a:newdir
2774
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002775 if dirname !~ '[\/]$'
Bram Moolenaar8299df92004-07-10 09:47:34 +00002776 " apparently vim is "recognizing" that it is in the home directory and
2777 " is removing the "/". Bad idea, so I have to put it back.
2778 let dirname= dirname.'/'
2779" call Decho("adjusting dirname<".dirname.">")
2780 endif
2781
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002782 if newdir !~ '[\/]$'
Bram Moolenaar8299df92004-07-10 09:47:34 +00002783 " handling a file
2784 let dirname= dirname.newdir
2785" call Decho("handling a file: dirname<".dirname.">")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002786 " this lets NetBrowseX avoid the edit
2787 if a:0 < 1
Bram Moolenaar83bab712005-08-01 21:58:57 +00002788" call Decho("dirname<".dirname."> netrw_cd_escape<".s:netrw_cd_escape.">")
2789" call Decho("about to edit<".escape(dirname,s:netrw_cd_escape).">")
2790 exe "e! ".escape(dirname,s:netrw_cd_escape)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002791 set ma nomod
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002792 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002793
2794 elseif newdir == './'
2795 " refresh the directory list
2796" call Decho("refresh directory listing")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002797
2798 elseif newdir == '../'
2799 " go up one directory
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002800 let dirname= substitute(dirname,'^\(.*/\)\([^/]\+[\/]$\)','\1','e')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002801" call Decho("go up one dir: dirname<".dirname.">")
2802
2803 else
2804 " go down one directory
2805 let dirname= dirname.newdir
2806" call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
2807 endif
2808
2809" call Dret("LocalBrowseChgDir <".dirname.">")
2810 return dirname
2811endfun
2812
2813" ---------------------------------------------------------------------
Bram Moolenaar572cb562005-08-05 21:35:02 +00002814" LocalBrowseRm: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002815fun! s:LocalBrowseRm(path) range
Bram Moolenaar8299df92004-07-10 09:47:34 +00002816" call Dfunc("LocalBrowseRm(path<".a:path.">)")
2817" call Decho("firstline=".a:firstline." lastline=".a:lastline)
2818
2819 " preparation for removing multiple files/directories
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002820 let ctr = a:firstline
2821 let ret = 0
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002822 let all= 0
Bram Moolenaar8299df92004-07-10 09:47:34 +00002823
2824 " remove multiple files and directories
2825 while ctr <= a:lastline
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002826 exe "keepjumps ".ctr
2827
2828 " sanity checks
Bram Moolenaar488c6512005-08-11 20:09:58 +00002829 if line(".") < w:netrw_bannercnt
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002830 let ctr= ctr + 1
2831 continue
2832 endif
2833 let curword= s:NetGetWord()
2834 if curword == "./" || curword == "../"
2835 let ctr= ctr + 1
2836 continue
2837 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002838
2839 norm! 0
Bram Moolenaar83bab712005-08-01 21:58:57 +00002840 let rmfile= a:path."/".curword
Bram Moolenaar8299df92004-07-10 09:47:34 +00002841" call Decho("rmfile<".rmfile.">")
2842
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002843 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002844 " attempt to remove file
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002845 if !all
2846 echohl Statement
2847 call inputsave()
2848 let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
2849 call inputrestore()
2850 echohl NONE
Bram Moolenaar61036992005-10-12 20:54:52 +00002851 if ok == ""
2852 let ok="no"
2853 endif
2854" call Decho("response: ok<".ok.">")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002855 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
Bram Moolenaar61036992005-10-12 20:54:52 +00002856" call Decho("response: ok<".ok."> (after sub)")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002857 if ok =~ 'a\%[ll]'
2858 let all= 1
2859 endif
2860 endif
2861
2862 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002863 let ret= delete(rmfile)
2864" call Decho("errcode=".v:shell_error." ret=".ret)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002865 elseif ok =~ 'q\%[uit]'
2866 break
Bram Moolenaar8299df92004-07-10 09:47:34 +00002867 endif
2868
2869 else
2870 " attempt to remove directory
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002871 if !all
2872 echohl Statement
2873 call inputsave()
2874 let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
2875 call inputrestore()
2876 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
Bram Moolenaar61036992005-10-12 20:54:52 +00002877 if ok == ""
2878 let ok="no"
2879 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002880 if ok =~ 'a\%[ll]'
2881 let all= 1
2882 endif
2883 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002884 let rmfile= substitute(rmfile,'[\/]$','','e')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002885
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002886 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002887" call Decho("1st attempt: system(".g:netrw_local_rmdir.' "'.rmfile.'")')
2888 call system(g:netrw_local_rmdir.' "'.rmfile.'"')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002889" call Decho("v:shell_error=".v:shell_error)
2890
2891 if v:shell_error != 0
2892" call Decho("2nd attempt to remove directory<".rmfile.">")
2893 let errcode= delete(rmfile)
2894" call Decho("errcode=".errcode)
2895
2896 if errcode != 0
2897 if has("unix")
2898" call Decho("3rd attempt to remove directory<".rmfile.">")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002899call system("rm ".rmfile)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002900 if v:shell_error != 0 && !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002901 echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002902 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002903endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002904 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002905 echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002906 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +00002907 endif
2908 endif
2909 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002910
2911 elseif ok =~ 'q\%[uit]'
2912 break
Bram Moolenaar8299df92004-07-10 09:47:34 +00002913 endif
2914 endif
2915
2916 let ctr= ctr + 1
2917 endwhile
2918
2919 " refresh the directory
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002920 let curline= line(".")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002921" call Decho("refresh the directory")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002922 call s:LocalRefresh(s:LocalBrowseChgDir(b:netrw_curdir,'./'))
Bram Moolenaar8299df92004-07-10 09:47:34 +00002923 exe curline
2924
2925" call Dret("LocalBrowseRm")
2926endfun
2927
2928" ---------------------------------------------------------------------
2929" LocalBrowseRename: rename a remote file or directory {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002930fun! s:LocalBrowseRename(path) range
Bram Moolenaar8299df92004-07-10 09:47:34 +00002931" call Dfunc("LocalBrowseRename(path<".a:path.">)")
2932
2933 " preparation for removing multiple files/directories
2934 let ctr= a:firstline
2935
2936 " attempt to rename files/directories
2937 while ctr <= a:lastline
2938 exe "keepjumps ".ctr
2939
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002940 " sanity checks
Bram Moolenaar488c6512005-08-11 20:09:58 +00002941 if line(".") < w:netrw_bannercnt
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002942 let ctr= ctr + 1
2943 continue
2944 endif
2945 let curword= s:NetGetWord()
2946 if curword == "./" || curword == "../"
2947 let ctr= ctr + 1
2948 continue
2949 endif
2950
Bram Moolenaar8299df92004-07-10 09:47:34 +00002951 norm! 0
Bram Moolenaar572cb562005-08-05 21:35:02 +00002952 let oldname= a:path."/".curword
Bram Moolenaar8299df92004-07-10 09:47:34 +00002953" call Decho("oldname<".oldname.">")
2954
2955 call inputsave()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002956 let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
Bram Moolenaar8299df92004-07-10 09:47:34 +00002957 call inputrestore()
2958
Bram Moolenaar83bab712005-08-01 21:58:57 +00002959 let ret= rename(oldname,newname)
2960" call Decho("renaming <".oldname."> to <".newname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002961
2962 let ctr= ctr + 1
2963 endwhile
2964
2965 " refresh the directory
2966 let curline= line(".")
Bram Moolenaar269ec652004-07-29 08:43:53 +00002967" call Decho("refresh the directory listing")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002968 call s:LocalRefresh(s:LocalBrowseChgDir(b:netrw_curdir,'./'))
Bram Moolenaar8299df92004-07-10 09:47:34 +00002969 exe "keepjumps ".curline
2970" call Dret("LocalBrowseRename")
2971endfun
2972
2973" ---------------------------------------------------------------------
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002974" LocalObtain: copy selected file to current working directory {{{2
2975fun! s:LocalObtain()
2976" call Dfunc("LocalObtain()")
2977 if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
2978 let fname= expand("<cWORD>")
2979 let fcopy= readfile(b:netrw_curdir."/".fname,"b")
2980 call writefile(fcopy,getcwd()."/".fname,"b")
2981 elseif !exists("b:netrw_curdir")
2982 echohl Error | echo "***netrw*** local browsing directory doesn't exist!"
2983 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2984 else
2985 echohl Error | echo "***netrw*** local browsing directory and current directory are identical"
2986 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2987 endif
2988" call Dret("LocalObtain")
2989endfun
2990
2991" ---------------------------------------------------------------------
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002992" LocalPreview: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002993fun! s:LocalPreview(path) range
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002994" call Dfunc("LocalPreview(path<".a:path.">)")
2995 if has("quickfix")
2996 if !isdirectory(a:path)
2997 exe "pedit ".a:path
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002998 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002999 echohl WarningMsg | echo "***netrw*** sorry, cannot preview a directory such as <".a:path.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003000 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003001 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003002 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00003003 echohl WarningMsg | echo "***netrw*** sorry, to preview your vim needs the quickfix feature compiled in" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003004 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003005 endif
3006" call Dret("LocalPreview")
3007endfun
3008
3009" ---------------------------------------------------------------------
Bram Moolenaar572cb562005-08-05 21:35:02 +00003010" LocalRefresh: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003011fun! s:LocalRefresh(dirname)
Bram Moolenaar572cb562005-08-05 21:35:02 +00003012" call Dfunc("LocalRefresh(dirname<".a:dirname.">)")
3013 set ma
3014 %d
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003015 call s:LocalBrowse(a:dirname)
Bram Moolenaar572cb562005-08-05 21:35:02 +00003016 redraw!
3017" call Dret("LocalRefresh")
3018endfun
3019
3020" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00003021" Explore: launch the local browser in the directory of the current file {{{2
3022" dosplit==0: the window will be split iff the current file has
3023" been modified
3024" dosplit==1: the window will be split before running the local
3025" browser
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003026fun! netrw#Explore(indx,dosplit,style,...)
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003027" call Dfunc("Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.")")
Bram Moolenaar83bab712005-08-01 21:58:57 +00003028
3029 " if dosplit or file has been modified
3030 if a:dosplit || &modified
Bram Moolenaar488c6512005-08-11 20:09:58 +00003031 call <SID>SaveWinVars()
3032
Bram Moolenaar83bab712005-08-01 21:58:57 +00003033 if a:style == 0 " Explore, Sexplore
3034 exe g:netrw_winsize."wincmd s"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003035" call Decho("style=0: Explore or Sexplore")
3036
Bram Moolenaar83bab712005-08-01 21:58:57 +00003037 elseif a:style == 1 "Explore!, Sexplore!
3038 exe g:netrw_winsize."wincmd v"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003039" call Decho("style=1: Explore! or Sexplore!")
3040
Bram Moolenaar83bab712005-08-01 21:58:57 +00003041 elseif a:style == 2 " Hexplore
3042 exe "bel ".g:netrw_winsize."wincmd s"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003043" call Decho("style=2: Hexplore")
3044
Bram Moolenaar83bab712005-08-01 21:58:57 +00003045 elseif a:style == 3 " Hexplore!
3046 exe "abo ".g:netrw_winsize."wincmd s"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003047" call Decho("style=3: Hexplore!")
3048
Bram Moolenaar83bab712005-08-01 21:58:57 +00003049 elseif a:style == 4 " Vexplore
3050 exe "lefta ".g:netrw_winsize."wincmd v"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003051" call Decho("style=4: Vexplore")
3052
Bram Moolenaar83bab712005-08-01 21:58:57 +00003053 elseif a:style == 5 " Vexplore!
3054 exe "rightb ".g:netrw_winsize."wincmd v"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003055" call Decho("style=5: Vexplore!")
Bram Moolenaar83bab712005-08-01 21:58:57 +00003056 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003057 call s:CopyWinVars()
Bram Moolenaar83bab712005-08-01 21:58:57 +00003058 endif
3059 norm! 0
3060
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003061 if a:1 == "" && a:indx >= 0
Bram Moolenaar488c6512005-08-11 20:09:58 +00003062 " Explore Hexplore Vexplore Sexplore
3063 let newdir= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
3064 if newdir =~ '^scp:' || newdir =~ '^ftp:'
3065" call Decho("calling NetBrowse(newdir<".newdir.">)")
3066 call s:NetBrowse(newdir)
3067 else
Bram Moolenaar61036992005-10-12 20:54:52 +00003068 if newdir == ""|let newdir= "."|endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003069" call Decho("calling LocalBrowse(newdir<".newdir.">)")
3070 call s:LocalBrowse(newdir)
3071 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003072
Bram Moolenaar572cb562005-08-05 21:35:02 +00003073 elseif a:1 =~ '\*\*/' || a:indx < 0
Bram Moolenaar488c6512005-08-11 20:09:58 +00003074 " Nexplore Pexplore -or- Explore **/...
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003075
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003076 if has("path_extra")
Bram Moolenaar488c6512005-08-11 20:09:58 +00003077 if !exists("w:netrw_explore_indx")
3078 let w:netrw_explore_indx= 0
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003079 endif
3080 let indx = a:indx
3081 if indx == -1
Bram Moolenaar488c6512005-08-11 20:09:58 +00003082 let indx= w:netrw_explore_indx + 1
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003083 elseif indx == -2
Bram Moolenaar488c6512005-08-11 20:09:58 +00003084 let indx= w:netrw_explore_indx - 1
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003085 else
Bram Moolenaar488c6512005-08-11 20:09:58 +00003086 let w:netrw_explore_indx = 0
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003087 if !exists("b:netrw_curdir")
Bram Moolenaar488c6512005-08-11 20:09:58 +00003088 let b:netrw_curdir= getcwd()
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003089 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003090 let w:netrw_explore_list = split(expand(b:netrw_curdir."/".a:1),'\n')
3091 let w:netrw_explore_listlen = len(w:netrw_explore_list)
3092 if w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/'
Bram Moolenaar572cb562005-08-05 21:35:02 +00003093 echohl WarningMsg | echo "***netrw*** no files matched" | echohl None
3094 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
3095" call Dret("Explore")
3096 return
3097 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003098 endif
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003099
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003100 " NetrwStatusLine support - for exploring support
Bram Moolenaar488c6512005-08-11 20:09:58 +00003101 let w:netrw_explore_indx= indx
Bram Moolenaar488c6512005-08-11 20:09:58 +00003102" call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003103
3104 " sanity check
Bram Moolenaar488c6512005-08-11 20:09:58 +00003105 if indx >= w:netrw_explore_listlen || indx < 0
3106 let indx= (indx < 0)? 0 : ( w:netrw_explore_listlen - 1 )
Bram Moolenaar572cb562005-08-05 21:35:02 +00003107 echohl WarningMsg | echo "***netrw*** no more files match Explore pattern" | echohl None
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003108 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
3109" call Dret("Explore")
3110 return
3111 endif
3112
Bram Moolenaar488c6512005-08-11 20:09:58 +00003113 exe "let dirfile= w:netrw_explore_list[".indx."]"
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003114" call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003115 let newdir= substitute(dirfile,'/[^/]*$','','e')
3116" call Decho("newdir<".newdir.">")
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003117
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003118" call Decho("calling LocalBrowse(newdir<".newdir.">)")
3119 call s:LocalBrowse(newdir)
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003120 if w:netrw_longlist == 0 || w:netrw_longlist == 1
3121 call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
3122 else
3123 call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
3124 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003125 let w:netrw_explore_mtchcnt = indx + 1
3126 let w:netrw_explore_bufnr = bufnr(".")
3127 let w:netrw_explore_line = line(".")
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003128 call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
Bram Moolenaar488c6512005-08-11 20:09:58 +00003129" 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 +00003130
3131 else
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003132 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00003133 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 +00003134 endif
3135 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
3136 endif
3137
Bram Moolenaar83bab712005-08-01 21:58:57 +00003138 else
3139 let newdir= a:1
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003140" call Decho("calling LocalBrowse(newdir<".newdir.">)")
3141 call s:LocalBrowse(newdir)
Bram Moolenaar83bab712005-08-01 21:58:57 +00003142 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00003143
3144" call Dret("Explore")
3145endfun
3146
3147" ---------------------------------------------------------------------
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003148" SetupNetrwStatusLine: {{{2
3149fun! s:SetupNetrwStatusLine(statline)
3150" call Dfunc("SetupNetrwStatusLine(statline<".a:statline.">)")
3151
3152 if !exists("s:netrw_setup_statline")
3153 let s:netrw_setup_statline= 1
3154" call Decho("do first-time status line setup")
3155
3156 if !exists("s:netrw_users_stl")
3157 let s:netrw_users_stl= &stl
3158 endif
3159 if !exists("s:netrw_users_ls")
3160 let s:netrw_users_ls= &laststatus
3161 endif
3162
3163 " set up User9 highlighting as needed
3164 let keepa= @a
3165 redir @a
3166 try
3167 hi User9
3168 catch /^Vim\%((\a\+)\)\=:E411/
3169 if &bg == "dark"
3170 hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue
3171 else
3172 hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue
3173 endif
3174 endtry
3175 redir END
3176 let @a= keepa
3177 endif
3178
3179 " set up status line (may use User9 highlighting)
3180 " insure that windows have a statusline
3181 " make sure statusline is displayed
3182 let &stl=a:statline
3183 set laststatus=2
3184" call Decho("stl=".&stl)
3185 redraw!
3186
3187" call Dret("SetupNetrwStatusLine : stl=".&stl)
3188endfun
3189
3190" ---------------------------------------------------------------------
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003191" NetrwStatusLine: {{{2
3192fun! NetrwStatusLine()
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003193
3194 " vvv NetrwStatusLine() debugging vvv
3195" let g:stlmsg=""
3196" if !exists("w:netrw_explore_bufnr")
3197" let g:stlmsg="!X<explore_bufnr>"
3198" elseif w:netrw_explore_bufnr != bufnr(".")
3199" let g:stlmsg="explore_bufnr!=".bufnr(".")
3200" endif
3201" if !exists("w:netrw_explore_line")
3202" let g:stlmsg=" !X<explore_line>"
3203" elseif w:netrw_explore_line != line(".")
3204" let g:stlmsg=" explore_line!={line(.)<".line(".").">"
3205" endif
3206" if !exists("w:netrw_explore_list")
3207" let g:stlmsg=" !X<explore_list>"
3208" endif
3209 " ^^^ NetrwStatusLine() debugging ^^^
3210
Bram Moolenaar488c6512005-08-11 20:09:58 +00003211 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 Moolenaar578b49e2005-09-10 19:22:57 +00003212 " restore user's status line
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003213 let &stl = s:netrw_users_stl
3214 let &laststatus = s:netrw_users_ls
Bram Moolenaar488c6512005-08-11 20:09:58 +00003215 if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
3216 if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003217 return ""
3218 else
Bram Moolenaar488c6512005-08-11 20:09:58 +00003219 return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003220 endif
3221endfun
3222
3223" ---------------------------------------------------------------------
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003224" NetGetcwd: get the current directory. {{{2
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003225" Change backslashes to forward slashes, if any.
3226" If doesc is true, escape certain troublesome characters
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003227fun! s:NetGetcwd(doesc)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003228" call Dfunc("NetGetcwd(doesc=".a:doesc.")")
3229 let curdir= substitute(getcwd(),'\\','/','ge')
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003230 if curdir !~ '[\/]$'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003231 let curdir= curdir.'/'
3232 endif
3233 if a:doesc
3234 let curdir= escape(curdir,s:netrw_cd_escape)
3235 endif
3236" call Dret("NetGetcwd <".curdir.">")
3237 return curdir
3238endfun
3239
3240" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00003241" NetMethod: determine method of transfer {{{1
3242" method == 1: rcp
3243" 2: ftp + <.netrc>
3244" 3: ftp + machine, id, password, and [path]filename
3245" 4: scp
3246" 5: http (wget)
3247" 6: cadaver
3248" 7: rsync
3249" 8: fetch
3250" 9: sftp
3251fun! s:NetMethod(choice) " globals: method machine id passwd fname
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003252" call Dfunc("NetMethod(a:choice<".a:choice.">)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003253
3254 " initialization
3255 let b:netrw_method = 0
3256 let g:netrw_machine = ""
3257 let b:netrw_fname = ""
3258 let g:netrw_port = ""
3259
3260 " Patterns:
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003261 " mipf : a:machine a:id password filename Use ftp
3262 " mf : a:machine filename Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003263 " ftpurm : ftp://[user@]host[[#:]port]/filename Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003264 " rcpurm : rcp://[user@]host/filename Use rcp
3265 " rcphf : [user@]host:filename Use rcp
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003266 " scpurm : scp://[user@]host[[#:]port]/filename Use scp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003267 " httpurm : http://[user@]host/filename Use wget
3268 " davurm : [s]dav://host[:port]/path Use cadaver
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003269 " rsyncurm : rsync://host[:port]/path Use rsync
3270 " fetchurm : fetch://[user@]host[:http]/filename Use fetch (defaults to ftp, override for http)
3271 " sftpurm : sftp://[user@]host/filename Use scp
3272 let mipf = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
3273 let mf = '^\(\S\+\)\s\+\(\S\+\)$'
3274 let ftpurm = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
Bram Moolenaar83bab712005-08-01 21:58:57 +00003275 let rcpurm = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003276 let rcphf = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003277 let scpurm = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003278 let httpurm = '^http://\([^/]\{-}\)\(/.*\)\=$'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003279 let davurm = '^s\=dav://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003280 let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
3281 let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
3282 let sftpurm = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
3283
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003284" call Decho("determine method:")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003285 " Determine Method
3286 " rcp://user@hostname/...path-to-file
3287 if match(a:choice,rcpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003288" call Decho("rcp://...")
Bram Moolenaar83bab712005-08-01 21:58:57 +00003289 let b:netrw_method = 1
3290 let userid = substitute(a:choice,rcpurm,'\1',"")
3291 let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"")
3292 let b:netrw_fname = substitute(a:choice,rcpurm,'\3',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003293 if userid != ""
3294 let g:netrw_uid= userid
Bram Moolenaar071d4272004-06-13 20:20:40 +00003295 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003296
3297 " scp://user@hostname/...path-to-file
3298 elseif match(a:choice,scpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003299" call Decho("scp://...")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003300 let b:netrw_method = 4
Bram Moolenaar83bab712005-08-01 21:58:57 +00003301 let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
3302 let g:netrw_port = substitute(a:choice,scpurm,'\2',"")
3303 let b:netrw_fname = substitute(a:choice,scpurm,'\3',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003304
3305 " http://user@hostname/...path-to-file
3306 elseif match(a:choice,httpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003307" call Decho("http://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003308 let b:netrw_method = 5
3309 let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
3310 let b:netrw_fname = substitute(a:choice,httpurm,'\2',"")
3311
3312 " dav://hostname[:port]/..path-to-file..
3313 elseif match(a:choice,davurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003314" call Decho("dav://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003315 let b:netrw_method= 6
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003316 if a:choice =~ '^s'
3317 let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
3318 else
3319 let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
3320 endif
3321 let b:netrw_fname = substitute(a:choice,davurm,'\3',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003322
3323 " rsync://user@hostname/...path-to-file
3324 elseif match(a:choice,rsyncurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003325" call Decho("rsync://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003326 let b:netrw_method = 7
3327 let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
3328 let b:netrw_fname = substitute(a:choice,rsyncurm,'\2',"")
3329
3330 " ftp://[user@]hostname[[:#]port]/...path-to-file
3331 elseif match(a:choice,ftpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003332" call Decho("ftp://...")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003333 let userid = substitute(a:choice,ftpurm,'\2',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003334 let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
3335 let g:netrw_port = substitute(a:choice,ftpurm,'\4',"")
3336 let b:netrw_fname = substitute(a:choice,ftpurm,'\5',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003337 if userid != ""
3338 let g:netrw_uid= userid
3339 endif
3340 if exists("g:netrw_uid") && exists("g:netrw_passwd")
3341 let b:netrw_method = 3
3342 else
3343 if filereadable(expand("$HOME/.netrc")) && !exists("g:netrw_ignorenetrc")
3344 let b:netrw_method= 2
3345 else
3346 if !exists("g:netrw_uid") || g:netrw_uid == ""
3347 call NetUserPass()
3348 elseif !exists("g:netrw_passwd") || g:netrw_passwd == ""
3349 call NetUserPass(g:netrw_uid)
3350 " else just use current g:netrw_uid and g:netrw_passwd
3351 endif
3352 let b:netrw_method= 3
3353 endif
3354 endif
3355
3356 elseif match(a:choice,fetchurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003357" call Decho("fetch://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003358 let b:netrw_method = 8
3359 let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
3360 let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
3361 let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
3362 let b:netrw_fname = substitute(a:choice,fetchurm,'\5',"")
3363
3364 " Issue an ftp : "machine id password [path/]filename"
3365 elseif match(a:choice,mipf) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003366" call Decho("(ftp) host id pass file")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003367 let b:netrw_method = 3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003368 let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
3369 let g:netrw_uid = substitute(a:choice,mipf,'\2',"")
3370 let g:netrw_passwd = substitute(a:choice,mipf,'\3',"")
3371 let b:netrw_fname = substitute(a:choice,mipf,'\4',"")
3372
3373 " Issue an ftp: "hostname [path/]filename"
3374 elseif match(a:choice,mf) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003375" call Decho("(ftp) host file")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003376 if exists("g:netrw_uid") && exists("g:netrw_passwd")
3377 let b:netrw_method = 3
3378 let g:netrw_machine = substitute(a:choice,mf,'\1',"")
3379 let b:netrw_fname = substitute(a:choice,mf,'\2',"")
3380
3381 elseif filereadable(expand("$HOME/.netrc"))
3382 let b:netrw_method = 2
3383 let g:netrw_machine = substitute(a:choice,mf,'\1',"")
3384 let b:netrw_fname = substitute(a:choice,mf,'\2',"")
3385 endif
3386
3387 " sftp://user@hostname/...path-to-file
3388 elseif match(a:choice,sftpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003389" call Decho("sftp://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003390 let b:netrw_method = 9
3391 let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
3392 let b:netrw_fname = substitute(a:choice,sftpurm,'\2',"")
3393
3394 " Issue an rcp: hostname:filename" (this one should be last)
3395 elseif match(a:choice,rcphf) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003396" call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003397 let b:netrw_method = 1
3398 let userid = substitute(a:choice,rcphf,'\2',"")
3399 let g:netrw_machine= substitute(a:choice,rcphf,'\3',"")
3400 let b:netrw_fname = substitute(a:choice,rcphf,'\4',"")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003401" call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
3402" call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
3403" call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
3404" call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003405 if userid != ""
3406 let g:netrw_uid= userid
3407 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003408 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003409 " don't let PCs try <.netrc>
3410 let b:netrw_method = 3
3411 endif
3412
3413 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003414 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00003415 echohl Error | echo "***netrw*** cannot determine method" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003416 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003417 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003418 let b:netrw_method = -1
Bram Moolenaar071d4272004-06-13 20:20:40 +00003419 endif
Bram Moolenaar81695252004-12-29 20:58:21 +00003420
3421 " remove any leading [:#] from port number
3422 if g:netrw_port != ""
3423 let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
3424 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003425
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003426" call Decho("a:choice <".a:choice.">")
3427" call Decho("b:netrw_method <".b:netrw_method.">")
3428" call Decho("g:netrw_machine<".g:netrw_machine.">")
3429" call Decho("g:netrw_port <".g:netrw_port.">")
3430" if exists("g:netrw_uid") "Decho
3431" call Decho("g:netrw_uid <".g:netrw_uid.">")
3432" endif "Decho
3433" if exists("g:netrw_passwd") "Decho
3434" call Decho("g:netrw_passwd <".g:netrw_passwd.">")
3435" endif "Decho
3436" call Decho("b:netrw_fname <".b:netrw_fname.">")
3437" call Dret("NetMethod")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003438endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +00003439
3440" ------------------------------------------------------------------------
3441" NetUserPass: set username and password for subsequent ftp transfer {{{1
3442" Usage: :call NetUserPass() -- will prompt for userid and password
3443" :call NetUserPass("uid") -- will prompt for password
3444" :call NetUserPass("uid","password") -- sets global userid and password
3445fun! NetUserPass(...)
3446
3447 " get/set userid
3448 if a:0 == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003449" call Dfunc("NetUserPass(a:0<".a:0.">)")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003450 if !exists("g:netrw_uid") || g:netrw_uid == ""
3451 " via prompt
3452 let g:netrw_uid= input('Enter username: ')
3453 endif
3454 else " from command line
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003455" call Dfunc("NetUserPass(a:1<".a:1.">) {")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003456 let g:netrw_uid= a:1
3457 endif
3458
3459 " get password
3460 if a:0 <= 1 " via prompt
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003461" call Decho("a:0=".a:0." case <=1:")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003462 let g:netrw_passwd= inputsecret("Enter Password: ")
3463 else " from command line
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003464" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003465 let g:netrw_passwd=a:2
3466 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003467
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003468" call Dret("NetUserPass")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003469endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +00003470
3471" ------------------------------------------------------------------------
3472" NetOptionSave: save options and set to "standard" form {{{1
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003473fun! s:NetOptionSave()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003474" call Dfunc("NetOptionSave()")
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003475 if !exists("w:netoptionsave")
3476 let w:netoptionsave= 1
3477 else
3478" call Dret("NetOptionSave : netoptionsave=".w:netoptionsave)
3479 return
3480 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003481
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003482 " Get Temporary Filename
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003483 let w:aikeep = &ai
3484 " record autochdir setting and then insure its unset (tnx to David Fishburn)
3485 if has("netbeans_intg") || has("sun_workshop")
3486 let w:acdkeep = &autochdir
3487 set noautochdir
3488 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003489 let w:cinkeep = &cin
3490 let w:cinokeep = &cino
3491 let w:comkeep = &com
3492 let w:cpokeep = &cpo
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003493 if !g:netrw_keepdir
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003494 let w:dirkeep = getcwd()
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003495 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003496 let w:gdkeep = &gd
3497 let w:repkeep = &report
3498 let w:spellkeep = &spell
3499 let w:twkeep = &tw
Bram Moolenaar8299df92004-07-10 09:47:34 +00003500 setlocal cino =
3501 setlocal com =
3502 setlocal cpo -=aA
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003503 setlocal nocin noai nospell
Bram Moolenaar8299df92004-07-10 09:47:34 +00003504 setlocal tw =0
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003505 setlocal report=10000
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003506 if has("win32") && !has("win95")
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003507 let w:swfkeep= &swf
Bram Moolenaar8299df92004-07-10 09:47:34 +00003508 setlocal noswf
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003509" call Decho("setting w:swfkeep to <".&swf.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003510 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00003511
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003512" call Dret("NetOptionSave")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003513endfun
3514
3515" ------------------------------------------------------------------------
3516" NetOptionRestore: restore options {{{1
3517fun! s:NetOptionRestore()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003518" call Dfunc("NetOptionRestore()")
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003519 if !exists("w:netoptionsave")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003520" call Dret("NetOptionRestore : w:netoptionsave doesn't exist")
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003521 return
3522 endif
3523 unlet w:netoptionsave
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003524
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003525 if exists("w:aikeep")| let &ai= w:aikeep|endif
3526 if (has("netbeans_intg") || has("sun_workshop")) && exists("w:acdkeep")
3527 let &acd= w:acdkeep
3528 unlet w:acdkeep
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003529 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003530 if exists("w:cinkeep") |let &cin = w:cinkeep |unlet w:cinkeep |endif
3531 if exists("w:cinokeep") |let &cino = w:cinokeep |unlet w:cinokeep |endif
3532 if exists("w:comkeep") |let &com = w:comkeep |unlet w:comkeep |endif
3533 if exists("w:cpokeep") |let &cpo = w:cpokeep |unlet w:cpokeep |endif
3534 if exists("w:dirkeep") |exe "lcd ".w:dirkeep |unlet w:dirkeep |endif
3535 if exists("w:gdkeep") |let &gd = w:gdkeep |unlet w:gdkeep |endif
3536 if exists("w:repkeep") |let &report = w:repkeep |unlet w:repkeep |endif
3537 if exists("w:spellkeep")|let &spell = w:spellkeep |unlet w:spellkeep|endif
3538 if exists("w:twkeep") |let &tw = w:twkeep |unlet w:twkeep |endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003539 if exists("w:swfkeep")
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003540 if &directory == "" && exists("w:swfkeep")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003541 " user hasn't specified a swapfile directory;
3542 " netrw will temporarily make the swapfile
3543 " directory the current local one.
3544 let &directory = getcwd()
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003545 silent! let &swf = w:swfkeep
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003546 set directory=
3547 else
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003548 let &swf= w:swfkeep
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003549 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003550 unlet w:swfkeep
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003551 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003552
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003553" call Dret("NetOptionRestore")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003554endfun
3555
3556" ------------------------------------------------------------------------
3557" NetReadFixup: this sort of function is typically written by the user {{{1
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003558" to handle extra junk that their system's ftp dumps
3559" into the transfer. This function is provided as an
3560" example and as a fix for a Windows 95 problem: in my
3561" experience, win95's ftp always dumped four blank lines
3562" at the end of the transfer.
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003563if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
Bram Moolenaar071d4272004-06-13 20:20:40 +00003564 fun! NetReadFixup(method, line1, line2)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003565" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003566 if method == 3 " ftp (no <.netrc>)
3567 let fourblanklines= line2 - 3
3568 silent fourblanklines.",".line2."g/^\s*/d"
3569 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003570" call Dret("NetReadFixup")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003571 endfun
3572endif
3573
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003574" ---------------------------------------------------------------------
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003575" NetSort: Piet Delport's BISort2() function, modified to take a range {{{1
Bram Moolenaar83bab712005-08-01 21:58:57 +00003576if v:version < 700
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003577 fun! s:NetSort() range
Bram Moolenaar83bab712005-08-01 21:58:57 +00003578" " call Dfunc("NetSort()")
3579
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003580 let i = a:firstline + 1
3581 while i <= a:lastline
3582 " find insertion point via binary search
3583 let i_val = getline(i)
3584 let lo = a:firstline
3585 let hi = i
3586 while lo < hi
Bram Moolenaar83bab712005-08-01 21:58:57 +00003587 let mid = (lo + hi) / 2
3588 let mid_val = getline(mid)
3589 if g:netrw_sort_direction =~ '^n'
3590 " normal sorting order
3591 if i_val < mid_val
3592 let hi = mid
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003593 else
Bram Moolenaar83bab712005-08-01 21:58:57 +00003594 let lo = mid + 1
3595 if i_val == mid_val | break | endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003596 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00003597 else
3598 " reverse sorting order
3599 if i_val > mid_val
3600 let hi = mid
3601 else
3602 let lo = mid + 1
3603 if i_val == mid_val | break | endif
3604 endif
3605 endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003606 endwhile
3607 " do insert
3608 if lo < i
Bram Moolenaar83bab712005-08-01 21:58:57 +00003609 exe 'keepjumps '.i.'d_'
3610 keepjumps call append(lo - 1, i_val)
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003611 endif
3612 let i = i + 1
3613 endwhile
Bram Moolenaar83bab712005-08-01 21:58:57 +00003614
3615" " call Dret("NetSort")
3616 endfun
3617endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003618
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003619" ---------------------------------------------------------------------
Bram Moolenaar8299df92004-07-10 09:47:34 +00003620" SetSort: sets up the sort based on the g:netrw_sort_sequence {{{1
3621" What this function does is to compute a priority for the patterns
3622" in the g:netrw_sort_sequence. It applies a substitute to any
3623" "files" that satisfy each pattern, putting the priority / in
3624" front. An "*" pattern handles the default priority.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003625fun! s:SetSort()
Bram Moolenaar488c6512005-08-11 20:09:58 +00003626" call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003627 if w:netrw_longlist == 1
Bram Moolenaar8299df92004-07-10 09:47:34 +00003628 let seqlist = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
3629 else
3630 let seqlist = g:netrw_sort_sequence
3631 endif
3632 " sanity check -- insure that * appears somewhere
3633 if seqlist == ""
3634 let seqlist= '*'
3635 elseif seqlist !~ '\*'
3636 let seqlist= seqlist.',*'
3637 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003638 let priority = 1
3639 while seqlist != ""
3640 if seqlist =~ ','
3641 let seq = substitute(seqlist,',.*$','','e')
3642 let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e')
3643 else
3644 let seq = seqlist
3645 let seqlist = ""
3646 endif
3647 let eseq= escape(seq,'/')
3648 if priority < 10
3649 let spriority= "00".priority.'\/'
3650 elseif priority < 100
3651 let spriority= "0".priority.'\/'
3652 else
3653 let spriority= priority.'\/'
3654 endif
3655" call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
3656
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003657 " sanity check
Bram Moolenaar488c6512005-08-11 20:09:58 +00003658 if w:netrw_bannercnt > line("$")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003659 " apparently no files were left after a Hiding pattern was used
3660" call Dret("SetSort : no files left after hiding")
3661 return
3662 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003663 if seq == '*'
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003664 exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003665 else
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003666 exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003667 endif
3668 let priority = priority + 1
3669 endwhile
3670
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003671 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003672
3673" call Dret("SetSort")
3674endfun
3675
Bram Moolenaar488c6512005-08-11 20:09:58 +00003676" ---------------------------------------------------------------------
3677" SaveWinVars: (used by Explore()) {{{1
3678fun! s:SaveWinVars()
3679" call Dfunc("SaveWinVars()")
3680 if exists("w:netrw_bannercnt") |let s:bannercnt = w:netrw_bannercnt |endif
3681 if exists("w:netrw_method") |let s:method = w:netrw_method |endif
3682 if exists("w:netrw_prvdir") |let s:prvdir = w:netrw_prvdir |endif
3683 if exists("w:netrw_explore_indx") |let s:explore_indx = w:netrw_explore_indx |endif
3684 if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif
3685 if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif
3686 if exists("w:netrw_explore_bufnr") |let s:explore_bufnr = w:netrw_explore_bufnr |endif
3687 if exists("w:netrw_explore_line") |let s:explore_line = w:netrw_explore_line |endif
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00003688 if exists("w:netrw_explore_list") |let s:explore_list = w:netrw_explore_list |endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003689" call Dret("SaveWinVars")
3690endfun
3691
3692" ---------------------------------------------------------------------
3693" CopyWinVars: (used by Explore()) {{{1
3694fun! s:CopyWinVars()
3695" call Dfunc("CopyWinVars()")
3696 if exists("s:bannercnt") |let w:netrw_bannercnt = s:bannercnt |unlet s:bannercnt |endif
3697 if exists("s:method") |let w:netrw_method = s:method |unlet s:method |endif
3698 if exists("s:prvdir") |let w:netrw_prvdir = s:prvdir |unlet s:prvdir |endif
3699 if exists("s:explore_indx") |let w:netrw_explore_indx = s:explore_indx |unlet s:explore_indx |endif
3700 if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif
3701 if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif
3702 if exists("s:explore_bufnr") |let w:netrw_explore_bufnr = s:explore_bufnr |unlet s:explore_bufnr |endif
3703 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 +00003704 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 +00003705" call Dret("CopyWinVars")
3706endfun
3707
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00003708" ---------------------------------------------------------------------
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003709" SetBufWinVars: (used by NetBrowse() and LocalBrowse()) {{{1
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00003710" To allow separate windows to have their own activities, such as
3711" Explore **/pattern, several variables have been made window-oriented.
3712" However, when the user splits a browser window (ex: ctrl-w s), these
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003713" variables are not inherited by the new window. SetBufWinVars() and
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00003714" UseBufWinVars() get around that.
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003715fun! s:SetBufWinVars()
3716" call Dfunc("SetBufWinVars()")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003717 if exists("w:netrw_longlist") |let b:netrw_longlist = w:netrw_longlist |endif
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00003718 if exists("w:netrw_bannercnt") |let b:netrw_bannercnt = w:netrw_bannercnt |endif
3719 if exists("w:netrw_method") |let b:netrw_method = w:netrw_method |endif
3720 if exists("w:netrw_prvdir") |let b:netrw_prvdir = w:netrw_prvdir |endif
3721 if exists("w:netrw_explore_indx") |let b:netrw_explore_indx = w:netrw_explore_indx |endif
3722 if exists("w:netrw_explore_listlen")|let b:netrw_explore_listlen = w:netrw_explore_listlen|endif
3723 if exists("w:netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt = w:netrw_explore_mtchcnt|endif
3724 if exists("w:netrw_explore_bufnr") |let b:netrw_explore_bufnr = w:netrw_explore_bufnr |endif
3725 if exists("w:netrw_explore_line") |let b:netrw_explore_line = w:netrw_explore_line |endif
3726 if exists("w:netrw_explore_list") |let b:netrw_explore_list = w:netrw_explore_list |endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00003727" call Dret("SetBufWinVars")
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00003728endfun
3729
3730" ---------------------------------------------------------------------
3731" UseBufWinVars: (used by NetBrowse() and LocalBrowse() {{{1
3732" Matching function to BufferWinVars()
3733fun! s:UseBufWinVars()
3734" call Dfunc("UseBufWinVars()")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003735 if exists("b:netrw_longlist") && !exists("w:netrw_longlist") |let w:netrw_longlist = b:netrw_longlist |endif
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00003736 if exists("b:netrw_bannercnt") && !exists("w:netrw_bannercnt") |let w:netrw_bannercnt = b:netrw_bannercnt |endif
3737 if exists("b:netrw_method") && !exists("w:netrw_method") |let w:netrw_method = b:netrw_method |endif
3738 if exists("b:netrw_prvdir") && !exists("w:netrw_prvdir") |let w:netrw_prvdir = b:netrw_prvdir |endif
3739 if exists("b:netrw_explore_indx") && !exists("w:netrw_explore_indx") |let w:netrw_explore_indx = b:netrw_explore_indx |endif
3740 if exists("b:netrw_explore_listlen") && !exists("w:netrw_explore_listlen")|let w:netrw_explore_listlen = b:netrw_explore_listlen|endif
3741 if exists("b:netrw_explore_mtchcnt") && !exists("w:netrw_explore_mtchcnt")|let w:netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif
3742 if exists("b:netrw_explore_bufnr") && !exists("w:netrw_explore_bufnr") |let w:netrw_explore_bufnr = b:netrw_explore_bufnr |endif
3743 if exists("b:netrw_explore_line") && !exists("w:netrw_explore_line") |let w:netrw_explore_line = b:netrw_explore_line |endif
3744 if exists("b:netrw_explore_list") && !exists("w:netrw_explore_list") |let w:netrw_explore_list = b:netrw_explore_list |endif
3745" call Dret("UseBufWinVars")
3746endfun
3747
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003748" ------------------------------------------------------------------------
3749" Settings Restoration: {{{1
Bram Moolenaar83bab712005-08-01 21:58:57 +00003750let &cpo= s:keepcpo
3751unlet s:keepcpo
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003752
Bram Moolenaar071d4272004-06-13 20:20:40 +00003753" ------------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00003754" Modelines: {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +00003755" vim:ts=8 fdm=marker