blob: a2f7efc023e64450f6ae94b33f233581c47a2779 [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 Moolenaard68071d2006-05-02 22:08:30 +00003" Date: May 02, 2006
4" Version: 98
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 Moolenaar1afcace2005-11-25 19:54:28 +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 Moolenaar1afcace2005-11-25 19:54:28 +000021
22" Exception for &cp: {{{1
23if &cp || exists("g:loaded_netrw")
24 finish
25endif
Bram Moolenaard68071d2006-05-02 22:08:30 +000026let g:loaded_netrw = "v98"
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 Moolenaar1afcace2005-11-25 19:54:28 +000031let s:keepcpo= &cpo
32set cpo&vim
33" call Decho("doing autoload/netrw.vim")
Bram Moolenaar071d4272004-06-13 20:20:40 +000034
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +000035" ======================
36" Netrw Variables: {{{1
37" ======================
38
Bram Moolenaar071d4272004-06-13 20:20:40 +000039" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +000040" Default values for netrw's global protocol variables {{{2
Bram Moolenaar1afcace2005-11-25 19:54:28 +000041if !exists("g:netrw_dav_cmd")
42 let g:netrw_dav_cmd = "cadaver"
Bram Moolenaar071d4272004-06-13 20:20:40 +000043endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +000044if !exists("g:netrw_fetch_cmd")
45 if executable("fetch")
46 let g:netrw_fetch_cmd = "fetch -o"
47 else
48 let g:netrw_fetch_cmd = ""
49 endif
50endif
51if !exists("g:netrw_ftp_cmd")
52 let g:netrw_ftp_cmd = "ftp"
53endif
54if !exists("g:netrw_http_cmd")
55 if executable("wget")
56 let g:netrw_http_cmd = "wget -q -O"
57 elseif executable("fetch")
58 let g:netrw_http_cmd = "fetch -o"
59 else
60 let g:netrw_http_cmd = ""
61 endif
62endif
63if !exists("g:netrw_rcp_cmd")
64 let g:netrw_rcp_cmd = "rcp"
65endif
66if !exists("g:netrw_rsync_cmd")
67 let g:netrw_rsync_cmd = "rsync"
68endif
69if !exists("g:netrw_scp_cmd")
70 let g:netrw_scp_cmd = "scp -q"
71endif
72if !exists("g:netrw_sftp_cmd")
73 let g:netrw_sftp_cmd = "sftp"
74endif
75if !exists("g:netrw_ssh_cmd")
76 let g:netrw_ssh_cmd= "ssh"
77endif
78
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +000079if (has("win32") || has("win95") || has("win64") || has("win16"))
Bram Moolenaar1afcace2005-11-25 19:54:28 +000080 \ && exists("g:netrw_use_nt_rcp")
81 \ && g:netrw_use_nt_rcp
82 \ && executable( $SystemRoot .'/system32/rcp.exe')
83 let s:netrw_has_nt_rcp = 1
84 let s:netrw_rcpmode = '-b'
85 else
86 let s:netrw_has_nt_rcp = 0
87 let s:netrw_rcpmode = ''
88endif
89
90" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +000091" Default values for netrw's global variables {{{2
92" Default values - a-c ---------- {{{3
Bram Moolenaar1afcace2005-11-25 19:54:28 +000093if !exists("g:netrw_alto")
94 let g:netrw_alto= 0
95endif
96if !exists("g:netrw_altv")
97 let g:netrw_altv= 0
Bram Moolenaar071d4272004-06-13 20:20:40 +000098endif
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +000099if !exists("g:netrw_browse_split")
100 let g:netrw_browse_split= 0
101endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102if !exists("g:netrw_cygwin")
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000103 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000104 if &shell == "bash"
105 let g:netrw_cygwin= 1
106 else
107 let g:netrw_cygwin= 0
108 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109 else
110 let g:netrw_cygwin= 0
111 endif
112endif
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000113" Default values - d-f ---------- {{{3
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000114if !exists("g:NETRW_DIRHIST_CNT")
115 let g:NETRW_DIRHIST_CNT= 0
116endif
117if !exists("g:netrw_dirhistmax")
118 let g:netrw_dirhistmax= 10
119endif
120if !exists("g:netrw_ftp_browse_reject")
121 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 +0000122endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000123if !exists("g:netrw_ftp_list_cmd")
124 if has("unix") || exists("g:netrw_cygwin")
125 let g:netrw_ftp_list_cmd= "ls -lF"
126 else
127 let g:netrw_ftp_list_cmd= "dir"
128 endif
129endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000130if !exists("g:netrw_ftpmode")
131 let g:netrw_ftpmode= "binary"
Bram Moolenaar61036992005-10-12 20:54:52 +0000132endif
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000133" Default values - h-lh ---------- {{{3
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000134if !exists("g:netrw_hide")
135 let g:netrw_hide= 1
Bram Moolenaar61036992005-10-12 20:54:52 +0000136endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000137if !exists("g:netrw_keepdir")
138 let g:netrw_keepdir= 1
139endif
140if !exists("g:netrw_list_cmd")
141 if executable(g:netrw_ssh_cmd)
142 " provide a default listing command
143 let g:netrw_list_cmd= g:netrw_ssh_cmd." HOSTNAME ls -FLa"
144 else
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000145" call Decho(g:netrw_ssh_cmd." is not executable, can't do remote directory exploring")
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000146 let g:netrw_list_cmd= ""
147 endif
148endif
149if !exists("g:netrw_list_hide")
150 let g:netrw_list_hide= ""
151endif
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000152" Default values - lh-lz ---------- {{{3
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000153if !exists("g:netrw_local_mkdir")
154 let g:netrw_local_mkdir= "mkdir"
155endif
156if !exists("g:netrw_local_rmdir")
157 let g:netrw_local_rmdir= "rmdir"
158endif
159if !exists("g:netrw_longlist")
160 let g:netrw_longlist= 0
161endif
162if g:netrw_longlist < 0 || g:netrw_longlist > 2
163 " sanity check
164 let g:netrw_longlist= 0
165endif
166if g:netrw_longlist == 1
167 let g:netrw_list_cmd= g:netrw_list_cmd." -l"
168endif
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000169" Default values - m-r ---------- {{{3
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000170if !exists("g:netrw_maxfilenamelen")
171 let g:netrw_maxfilenamelen= 32
172endif
173if !exists("g:netrw_mkdir_cmd")
174 let g:netrw_mkdir_cmd= g:netrw_ssh_cmd." HOSTNAME mkdir"
Bram Moolenaara5792f52005-11-23 21:25:05 +0000175endif
176if !exists("g:netrw_rename_cmd")
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000177 let g:netrw_rename_cmd= g:netrw_ssh_cmd." HOSTNAME mv"
Bram Moolenaara5792f52005-11-23 21:25:05 +0000178endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000179if !exists("g:netrw_rm_cmd")
180 let g:netrw_rm_cmd = g:netrw_ssh_cmd." HOSTNAME rm"
181endif
182if !exists("g:netrw_rmdir_cmd")
183 let g:netrw_rmdir_cmd = g:netrw_ssh_cmd." HOSTNAME rmdir"
184endif
185if !exists("g:netrw_rmf_cmd")
186 let g:netrw_rmf_cmd = g:netrw_ssh_cmd." HOSTNAME rm -f"
187endif
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000188" Default values - s ---------- {{{3
Bram Moolenaar843ee412004-06-30 16:16:41 +0000189if exists("g:netrw_silent") && g:netrw_silent != 0
190 let g:netrw_silentxfer= "silent "
191else
192 let g:netrw_silentxfer= ""
193endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000194if !exists("g:netrw_fastbrowse")
195 let g:netrw_fastbrowse= 1
196endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000197if !exists("g:netrw_sort_by")
198 " alternatives: date size
199 let g:netrw_sort_by= "name"
200endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000201if !exists("g:netrw_sort_direction")
202 " alternative: reverse (z y x ...)
203 let g:netrw_sort_direction= "normal"
204endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000205if !exists("g:netrw_sort_sequence")
206 let g:netrw_sort_sequence= '[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$'
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000207endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000208if !exists("g:netrw_ssh_browse_reject")
209 let g:netrw_ssh_browse_reject='^total\s\+\d\+$'
210endif
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000211" Default values - t-w ---------- {{{3
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000212if !exists("g:netrw_timefmt")
213 let g:netrw_timefmt= "%c"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000214endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000215if !exists("g:netrw_win95ftp")
216 let g:netrw_win95ftp= 1
217endif
218if !exists("g:netrw_winsize")
219 let g:netrw_winsize= ""
220endif
221" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000222" Default values for netrw's script variables: {{{2
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000223if !exists("s:netrw_cd_escape")
224 if has("win32") || has("win95") || has("win64") || has("win16")
225 let s:netrw_cd_escape="#% "
226 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000227 let s:netrw_cd_escape="[]#*$%'\" ?`!&();<>\\"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000228 endif
229endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000230if !exists("g:netrw_fname_escape")
231 let g:netrw_fname_escape= ' ?&;'
232endif
233if !exists("g:netrw_tmpfile_escape")
234 let g:netrw_tmpfile_escape= ' ?&;'
235endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000236if !exists("s:netrw_glob_escape")
237 if has("win32") || has("win95") || has("win64") || has("win16")
238 let s:netrw_glob_escape= ""
239 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000240 let s:netrw_glob_escape= '[]*?`{~$'
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000241 endif
242endif
Bram Moolenaar8299df92004-07-10 09:47:34 +0000243
244" BufEnter event ignored by decho when following variable is true
245" Has a side effect that doau BufReadPost doesn't work, so
246" files read by network transfer aren't appropriately highlighted.
247"let g:decho_bufenter = 1 "Decho
Bram Moolenaar071d4272004-06-13 20:20:40 +0000248
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000249" ==============================
250" Netrw Utility Functions: {{{1
251" ==============================
252
Bram Moolenaar071d4272004-06-13 20:20:40 +0000253" ------------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000254" NetSavePosn: saves position of cursor on screen {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000255fun! netrw#NetSavePosn()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000256" call Dfunc("NetSavePosn()")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257 " Save current line and column
Bram Moolenaar488c6512005-08-11 20:09:58 +0000258 let w:netrw_winnr= winnr()
259 let w:netrw_line = line(".")
260 let w:netrw_col = virtcol(".")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261
262 " Save top-of-screen line
263 norm! H0
Bram Moolenaar488c6512005-08-11 20:09:58 +0000264 let w:netrw_hline= line(".")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000265
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000266 call netrw#NetRestorePosn()
Bram Moolenaar488c6512005-08-11 20:09:58 +0000267" 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 +0000268endfun
269
270" ------------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000271" NetRestorePosn: restores the cursor and file position as saved by NetSavePosn() {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000272fun! netrw#NetRestorePosn()
Bram Moolenaar488c6512005-08-11 20:09:58 +0000273" 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 +0000274 let eikeep= &ei
275 set ei=all
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276
Bram Moolenaar81695252004-12-29 20:58:21 +0000277 " restore window
Bram Moolenaar488c6512005-08-11 20:09:58 +0000278" call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
279 exe "silent! ".w:netrw_winnr."wincmd w"
Bram Moolenaar572cb562005-08-05 21:35:02 +0000280" if v:shell_error == 0
281" " as suggested by Bram M: redraw on no error
282" " allows protocol error messages to remain visible
283" redraw!
284" endif
Bram Moolenaar81695252004-12-29 20:58:21 +0000285
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286 " restore top-of-screen line
Bram Moolenaar488c6512005-08-11 20:09:58 +0000287" call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
288 exe "norm! ".w:netrw_hline."G0z\<CR>"
Bram Moolenaar81695252004-12-29 20:58:21 +0000289
Bram Moolenaar071d4272004-06-13 20:20:40 +0000290 " restore position
Bram Moolenaar488c6512005-08-11 20:09:58 +0000291" call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
292 exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000293
Bram Moolenaar572cb562005-08-05 21:35:02 +0000294 let &ei= eikeep
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000295" call Dret("NetRestorePosn")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000296endfun
297
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000298" ===============================
299" Netrw Transfer Functions: {{{1
300" ===============================
301
Bram Moolenaar071d4272004-06-13 20:20:40 +0000302" ------------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000303" NetRead: responsible for reading a file over the net {{{2
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000304fun! netrw#NetRead(mode,...)
305" call Dfunc("NetRead(mode=".a:mode.",...) a:0=".a:0)
306
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000307 " save options
308 call s:NetOptionSave()
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000309
310 if a:mode == 0 " read remote file before current line
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000311 let readcmd = "0r"
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000312 elseif a:mode == 1 " read file after current line
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000313 let readcmd = "r"
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000314 elseif a:mode == 2 " replace with remote file
315 let readcmd = "%r"
316 else
317 exe a:mode
318 let readcmd = "r"
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000319 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000320 let ichoice = (a:0 == 0)? 0 : 1
321" call Decho("readcmd<".readcmd."> ichoice=".ichoice)
322
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000323 " get name of a temporary file and set up shell-quoting character {{{3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000324 let tmpfile= tempname()
Bram Moolenaar5a305422006-04-28 22:38:25 +0000325" call Decho("tmpfile<".tmpfile.">")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000326 let tmpfile= escape(substitute(tmpfile,'\','/','ge'),g:netrw_tmpfile_escape)
Bram Moolenaar5a305422006-04-28 22:38:25 +0000327" call Decho("tmpfile<".tmpfile.">")
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000328 if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
Bram Moolenaar36c31f72005-11-28 23:01:53 +0000329 echohl Error | echo "***netrw*** your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!" | echohl None
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000330 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaard68071d2006-05-02 22:08:30 +0000331" call Dret("NetRead :1 getcwd<".getcwd().">")
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000332 return
333 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000334" call Decho("tmpfile<".tmpfile.">")
335
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000336 while ichoice <= a:0
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000337
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000338 " attempt to repeat with previous host-file-etc
339 if exists("b:netrw_lastfile") && a:0 == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000340" call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000341 let choice = b:netrw_lastfile
342 let ichoice= ichoice + 1
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000343
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000344 else
345 exe "let choice= a:" . ichoice
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000346" call Decho("no lastfile: choice<" . choice . ">")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000347
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000348 if match(choice,"?") == 0
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000349 " give help
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000350 echomsg 'NetRead Usage:'
351 echomsg ':Nread machine:path uses rcp'
352 echomsg ':Nread "machine path" uses ftp with <.netrc>'
353 echomsg ':Nread "machine id password path" uses ftp'
354 echomsg ':Nread dav://machine[:port]/path uses cadaver'
355 echomsg ':Nread fetch://machine/path uses fetch'
356 echomsg ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>'
357 echomsg ':Nread http://[user@]machine/path uses http wget'
358 echomsg ':Nread rcp://[user@]machine/path uses rcp'
359 echomsg ':Nread rsync://machine[:port]/path uses rsync'
360 echomsg ':Nread scp://[user@]machine[[:#]port]/path uses scp'
361 echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000362 break
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000363
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000364 elseif match(choice,"^\"") != -1
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000365 " Reconstruct Choice if choice starts with '"'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000366" call Decho("reconstructing choice")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000367 if match(choice,"\"$") != -1
368 " case "..."
369 let choice=strpart(choice,1,strlen(choice)-2)
370 else
371 " case "... ... ..."
372 let choice = strpart(choice,1,strlen(choice)-1)
373 let wholechoice = ""
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000374
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000375 while match(choice,"\"$") == -1
376 let wholechoice = wholechoice . " " . choice
377 let ichoice = ichoice + 1
378 if ichoice > a:0
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000379 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000380 echohl Error | echo "***netrw*** Unbalanced string in filename '". wholechoice ."'" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000381 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000382 endif
Bram Moolenaard68071d2006-05-02 22:08:30 +0000383" call Dret("NetRead :2 getcwd<".getcwd().">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000384 return
385 endif
386 let choice= a:{ichoice}
387 endwhile
388 let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
389 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000390 endif
391 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000392
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000393" call Decho("choice<" . choice . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000394 let ichoice= ichoice + 1
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000395
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000396 " fix up windows urls
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000397 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000398 let choice = substitute(choice,'\\','/','ge')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000399" call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000400
Bram Moolenaard68071d2006-05-02 22:08:30 +0000401 if !g:netrw_keepdir
402 exe 'lcd ' . fnamemodify(tmpfile,':h')
403 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000404 let tmpfile = fnamemodify(tmpfile,':t')
Bram Moolenaar69a7cb42004-06-20 12:51:53 +0000405 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000406
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000407 " Determine method of read (ftp, rcp, etc) {{{3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000408 call s:NetMethod(choice)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000409
Bram Moolenaar843ee412004-06-30 16:16:41 +0000410 " Check if NetBrowse() should be handling this request
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000411" call Decho("checking if NetBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000412 if choice =~ "^.*[\/]$"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000413" call Decho("yes, choice matches '^.*[\/]$'")
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000414 keepjumps call s:NetBrowse(choice)
Bram Moolenaard68071d2006-05-02 22:08:30 +0000415" call Dret("NetRead :3 getcwd<".getcwd().">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000416 return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000417 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000418
419 " use filename's suffix for the temporary file
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000420 if b:netrw_fname =~ '\.[^./]\+$'
421 let suffix = substitute(b:netrw_fname,'^.*\(\.[^./]\+\)$','\1','e')
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000422 let tmpfile= substitute(tmpfile,"$",suffix,'e')
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000423" call Decho("chgd tmpfile<".tmpfile."> (added ".suffix." suffix) netrw_fname<".b:netrw_fname.">")
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000424 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000425
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000426 " ============
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000427 " Perform Protocol-Based Read {{{3
428 " ===========================
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000429 if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
430 echo "(netrw) Processing your read request..."
431 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000432
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000433 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000434 " rcp: NetRead Method #1 {{{3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000435 if b:netrw_method == 1 " read with rcp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000436" call Decho("read via rcp (method #1)")
Bram Moolenaard68071d2006-05-02 22:08:30 +0000437 " ER: nothing done with g:netrw_uid yet?
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000438 " ER: on Win2K" rcp machine[.user]:file tmpfile
439 " ER: if machine contains '.' adding .user is required (use $USERNAME)
440 " ER: the tmpfile is full path: rcp sees C:\... as host C
441 if s:netrw_has_nt_rcp == 1
442 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
443 let uid_machine = g:netrw_machine .'.'. g:netrw_uid
444 else
445 " Any way needed it machine contains a '.'
446 let uid_machine = g:netrw_machine .'.'. $USERNAME
447 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000448 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000449 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
450 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
451 else
452 let uid_machine = g:netrw_machine
453 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000454 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000455" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&;')." ".tmpfile)
456 exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&;')." ".tmpfile
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000457 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
458 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000459
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000460 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000461 " ftp + <.netrc>: NetRead Method #2 {{{3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000462 elseif b:netrw_method == 2 " read with ftp + <.netrc>
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000463" call Decho("read via ftp+.netrc (method #2)")
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000464 let netrw_fname= b:netrw_fname
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000465 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000466 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000467 exe "put ='".g:netrw_ftpmode."'"
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000468" call Decho("filter input: ".getline("."))
469 exe "put ='".'get \"'.netrw_fname.'\" '.tmpfile."'"
470" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000471 if exists("g:netrw_port") && g:netrw_port != ""
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000472" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000473 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
474 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000475" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000476 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
477 endif
478 " 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 +0000479 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000480 let debugkeep= &debug
481 set debug=msg
Bram Moolenaar572cb562005-08-05 21:35:02 +0000482 echohl Error | echo "***netrw*** ".getline(1) | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000483 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000484 let &debug= debugkeep
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000485 endif
486 bd!
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000487 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000488 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000489
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000490 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000491 " ftp + machine,id,passwd,filename: NetRead Method #3 {{{3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000492 elseif b:netrw_method == 3 " read with ftp + machine, id, passwd, and fname
493 " Construct execution string (four lines) which will be passed through filter
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000494" call Decho("read via ftp+mipf (method #3)")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000495 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000496 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000497 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000498 if exists("g:netrw_port") && g:netrw_port != ""
499 put ='open '.g:netrw_machine.' '.g:netrw_port
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000500" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000501 else
502 put ='open '.g:netrw_machine
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000503" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000504 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000505
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000506 if exists("g:netrw_ftp") && g:netrw_ftp == 1
507 put =g:netrw_uid
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000508" call Decho("filter input: ".getline("."))
509 put ='\"'.g:netrw_passwd.'\"'
510" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000511 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000512 put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
513" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000514 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000515
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000516 if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
517 put =g:netrw_ftpmode
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000518" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000519 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000520 put ='get \"'.netrw_fname.'\" '.tmpfile
521" call Decho("filter input: ".getline("."))
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000522
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000523 " perform ftp:
524 " -i : turns off interactive prompting from ftp
525 " -n unix : DON'T use <.netrc>, even though it exists
526 " -n win32: quit being obnoxious about password
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000527 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000528" call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000529 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
530 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
531 if getline(1) !~ "^$"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000532" call Decho("error<".getline(1).">")
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000533 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000534 echohl Error | echo "***netrw*** ".getline(1) | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000535 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000536 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000537 endif
538 bd!
539 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
540 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000541
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000542 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000543 " scp: NetRead Method #4 {{{3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000544 elseif b:netrw_method == 4 " read with scp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000545" call Decho("read via scp (method #4)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000546 if exists("g:netrw_port") && g:netrw_port != ""
547 let useport= " -P ".g:netrw_port
548 else
549 let useport= ""
550 endif
551 if g:netrw_cygwin == 1
552 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000553" call Decho("executing: !".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".cygtmpfile)
554 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".cygtmpfile
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000555 else
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000556" call Decho("executing: !".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".tmpfile)
557 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".tmpfile
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000558 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000559 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000560 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000561
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000562 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000563 " http: NetRead Method #5 (wget) {{{3
564 elseif b:netrw_method == 5
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000565" call Decho("read via http (method #5)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000566 if g:netrw_http_cmd == ""
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000567 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000568 echohl Error | echo "***netrw*** neither wget nor fetch command is available" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000569 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000570 endif
Bram Moolenaard68071d2006-05-02 22:08:30 +0000571" call Dret("NetRead :4 getcwd<".getcwd().">")
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000572 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000573 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000574
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000575 if match(b:netrw_fname,"#") == -1
576 " simple wget
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000577 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
578" call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_fname)
579 exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_fname
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000580 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000581
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000582 else
583 " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000584 let netrw_html= substitute(netrw_fname,"#.*$","","")
585 let netrw_tag = substitute(netrw_fname,"^.*#","","")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000586" call Decho("netrw_html<".netrw_html.">")
587" call Decho("netrw_tag <".netrw_tag.">")
588" call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000589 exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html
590 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000591" call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000592 exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
593 endif
594 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000595
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000596 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000597 " cadaver: NetRead Method #6 {{{3
598 elseif b:netrw_method == 6
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000599" call Decho("read via cadaver (method #6)")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000600
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000601 " Construct execution string (four lines) which will be passed through filter
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000602 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000603 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000604 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000605 if exists("g:netrw_port") && g:netrw_port != ""
606 put ='open '.g:netrw_machine.' '.g:netrw_port
607 else
608 put ='open '.g:netrw_machine
609 endif
610 put ='user '.g:netrw_uid.' '.g:netrw_passwd
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000611
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000612 if g:netrw_cygwin == 1
613 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
614 put ='get '.netrw_fname.' '.cygtmpfile
615 else
616 put ='get '.netrw_fname.' '.tmpfile
617 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000618 put ='quit'
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000619
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000620 " perform cadaver operation:
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000621 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000622" call Decho("executing: %!".g:netrw_dav_cmd)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000623 exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
624 bd!
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000625 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000626 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000627
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000628 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000629 " rsync: NetRead Method #7 {{{3
630 elseif b:netrw_method == 7
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000631" call Decho("read via rsync (method #7)")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000632 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000633 if g:netrw_cygwin == 1
634 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000635" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
636 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000637 else
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000638" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile)
639 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000640 endif
641 let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
642 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000643
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000644 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000645 " fetch: NetRead Method #8 {{{3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000646 " fetch://[user@]host[:http]/path
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000647 elseif b:netrw_method == 8
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000648 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000649 if g:netrw_fetch_cmd == ""
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000650 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000651 echohl Error | echo "***netrw*** fetch command not available" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000652 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000653 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000654" call Dret("NetRead")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000655 endif
656 if exists("g:netrw_option") && g:netrw_option == ":http"
657 let netrw_option= "http"
658 else
659 let netrw_option= "ftp"
660 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000661" call Decho("read via fetch for ".netrw_option)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000662
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000663 if exists("g:netrw_uid") && g:netrw_uid != "" && exists("g:netrw_passwd") && g:netrw_passwd != ""
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000664" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".netrw_fname)
665 exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".netrw_fname
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000666 else
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000667" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".netrw_fname)
668 exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".netrw_fname
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000669 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000670
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000671 let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
672 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000673
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000674 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000675 " sftp: NetRead Method #9 {{{3
676 elseif b:netrw_method == 9
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000677" call Decho("read via sftp (method #4)")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000678 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000679 if g:netrw_cygwin == 1
680 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000681" call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
682" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
683 exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000684 else
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000685" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile)
686 exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000687 endif
688 let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
689 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000690
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000691 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000692 " Complain {{{3
693 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000694 echo "***warning*** unable to comply with your request<" . choice . ">"
695 endif
696 endwhile
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000697
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000698 " cleanup {{{3
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000699" call Decho("cleanup")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000700 if exists("b:netrw_method")
701 unlet b:netrw_method
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000702 unlet b:netrw_fname
703 endif
704 call s:NetOptionRestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +0000705
Bram Moolenaard68071d2006-05-02 22:08:30 +0000706" call Dret("NetRead :5 getcwd<".getcwd().">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000707endfun
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000708
709" ------------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000710" NetGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000711" readcmd == %r : replace buffer with newly read file
712" == 0r : read file at top of buffer
713" == r : read file after current line
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000714fun! s:NetGetFile(readcmd, tfile, method)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000715" call Dfunc("NetGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000716
717 " get name of remote filename (ie. url and all)
718 let rfile= bufname("%")
719" call Decho("rfile<".rfile.">")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000720
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000721 if exists("*NetReadFixup")
722 " for the use of NetReadFixup (not otherwise used internally)
723 let line2= line("$")
724 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000725
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000726 " transform paths from / to \ for Windows (except for cygwin)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000727 if &term == "win32"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000728 if g:netrw_cygwin
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000729 let tfile= a:tfile
730" call Decho("(win32 && cygwin) tfile<".tfile.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000731 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000732 let tfile= substitute(a:tfile,'/','\\\\','ge')
733" call Decho("(win32 && !cygwin) tfile<".tfile.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000734 endif
735 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000736 let tfile= a:tfile
737" call Decho("tfile=a:tfile<".tfile.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000738 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000739
740 if a:readcmd[0] == '%'
Bram Moolenaar81695252004-12-29 20:58:21 +0000741 " get file into buffer
Bram Moolenaar83bab712005-08-01 21:58:57 +0000742
Bram Moolenaar83bab712005-08-01 21:58:57 +0000743" call Dredir("ls!","starting buffer list")
744
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000745 " rename the current buffer to the temp file (ie. tfile)
746 keepalt exe "file ".tfile
747" call Dredir("ls!","after renaming current buffer to <".tfile.">")
Bram Moolenaar83bab712005-08-01 21:58:57 +0000748
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000749 " edit temporary file (ie. read the temporary file in)
750 if rfile =~ '\.zip$'
751 call zip#Browse(tfile)
752 elseif rfile =~ '\.tar$'
753 call tar#Browse(tfile)
754 else
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000755" call Decho("edit temporary file")
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000756 e
757 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +0000758
Bram Moolenaar81695252004-12-29 20:58:21 +0000759 " rename buffer back to remote filename
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000760 keepalt exe "file ".escape(rfile,' ')
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000761 filetype detect
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000762" call Dredir("ls!","renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">")
Bram Moolenaar81695252004-12-29 20:58:21 +0000763 let line1 = 1
764 let line2 = line("$")
765
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000766 elseif filereadable(tfile)
Bram Moolenaar81695252004-12-29 20:58:21 +0000767 " read file after current line
768 let curline = line(".")
769 let lastline= line("$")
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000770" call Decho("exe<".a:readcmd." ".v:cmdarg." ".tfile."> line#".curline)
771 exe a:readcmd." ".v:cmdarg." ".tfile
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000772 let line1= curline + 1
773 let line2= line("$") - lastline + 1
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000774
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000775 else
Bram Moolenaar81695252004-12-29 20:58:21 +0000776 " not readable
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000777 echohl WarningMsg | echo "***netrw*** file <".tfile."> not readable"| echohl None
778 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
779" call Dret("NetGetFile : tfile<".tfile."> not readable")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000780 return
781 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000782
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000783 " User-provided (ie. optional) fix-it-up command
784 if exists("*NetReadFixup")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000785" call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000786 call NetReadFixup(a:method, line1, line2)
Bram Moolenaar83bab712005-08-01 21:58:57 +0000787" else " Decho
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000788" call Decho("NetReadFixup() not called, doesn't exist (line1=".line1." line2=".line2.")")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000789 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +0000790
791 " update the Buffers menu
792 if has("gui") && has("gui_running")
793 silent! emenu Buffers.Refresh\ menu
794 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000795
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000796" call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".filereadable(a:tfile))
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000797
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000798 " make sure file is being displayed
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000799 redraw!
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000800" call Dret("NetGetFile")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000801endfun
802
803" ------------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000804" NetWrite: responsible for writing a file over the net {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000805fun! netrw#NetWrite(...) range
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000806" call Dfunc("NetWrite(a:0=".a:0.")")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000807
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000808 " option handling
809 let mod= 0
810 call s:NetOptionSave()
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000811
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000812 " Get Temporary Filename {{{3
Bram Moolenaar5a305422006-04-28 22:38:25 +0000813 let tmpfile= tempname()
814" call Decho("tmpfile<".tmpfile."> (raw)")
815 let tmpfile= escape(substitute(tmpfile,'\','/','ge'),g:netrw_tmpfile_escape)
816" call Decho("tmpfile<".tmpfile."> (escaped)")
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000817 if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
Bram Moolenaar5a305422006-04-28 22:38:25 +0000818 echohl Error | echo "***netrw*** your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!"
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000819 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000820" call Dret("NetWrite")
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000821 return
822 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000823
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000824 if a:0 == 0
825 let ichoice = 0
826 else
827 let ichoice = 1
828 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000829
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000830 if &binary
831 " for binary writes, write entire file. Line numbers don't really make sense.
832 " Supports the writing of tar and zip files.
833" call Decho("silent exe w! ".v:cmdarg." ".tmpfile)
834 silent exe "w! ".v:cmdarg." ".tmpfile
835 else
836 " write (selected portion of) file to temporary
837" call Decho("silent exe ".a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile)
838 silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
839 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000840
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000841 while ichoice <= a:0
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000842
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000843 " Process arguments: {{{3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000844 " attempt to repeat with previous host-file-etc
845 if exists("b:netrw_lastfile") && a:0 == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000846" call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000847 let choice = b:netrw_lastfile
848 let ichoice= ichoice + 1
849 else
850 exe "let choice= a:" . ichoice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000851
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000852 " Reconstruct Choice if choice starts with '"'
853 if match(choice,"?") == 0
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000854 echomsg 'NetWrite Usage:"'
855 echomsg ':Nwrite machine:path uses rcp'
856 echomsg ':Nwrite "machine path" uses ftp with <.netrc>'
857 echomsg ':Nwrite "machine id password path" uses ftp'
858 echomsg ':Nwrite dav://[user@]machine/path uses cadaver'
859 echomsg ':Nwrite fetch://[user@]machine/path uses fetch'
860 echomsg ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)'
861 echomsg ':Nwrite rcp://machine/path uses rcp'
862 echomsg ':Nwrite rsync://[user@]machine/path uses rsync'
863 echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
864 echomsg ':Nwrite sftp://[user@]machine/path uses sftp'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000865 break
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000866
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000867 elseif match(choice,"^\"") != -1
868 if match(choice,"\"$") != -1
869 " case "..."
870 let choice=strpart(choice,1,strlen(choice)-2)
871 else
872 " case "... ... ..."
873 let choice = strpart(choice,1,strlen(choice)-1)
874 let wholechoice = ""
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000875
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000876 while match(choice,"\"$") == -1
877 let wholechoice= wholechoice . " " . choice
878 let ichoice = ichoice + 1
879 if choice > a:0
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000880 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000881 echohl Error | echo "***netrw*** Unbalanced string in filename '". wholechoice ."'" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000882 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000883 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000884" call Dret("NetWrite")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000885 return
886 endif
887 let choice= a:{ichoice}
888 endwhile
889 let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
890 endif
891 endif
892 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000893" call Decho("choice<" . choice . ">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000894 let ichoice= ichoice + 1
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000895
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000896 " fix up windows urls
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000897 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000898 let choice= substitute(choice,'\\','/','ge')
Bram Moolenaard68071d2006-05-02 22:08:30 +0000899 if !g:netrw_keepdir
900 exe 'lcd ' . fnamemodify(tmpfile,':h')
901 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000902 let tmpfile = fnamemodify(tmpfile,':t')
903 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000904
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000905 " Determine method of read (ftp, rcp, etc) {{{3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000906 call s:NetMethod(choice)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000907
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000908 " =============
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000909 " Perform Protocol-Based Write {{{3
910 " ============================
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000911 if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
912 echo "(netrw) Processing your write request..."
913 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000914
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000915 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000916 " rcp: NetWrite Method #1 {{{3
917 if b:netrw_method == 1
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000918" call Decho("write via rcp (method #1)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000919 if s:netrw_has_nt_rcp == 1
920 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
921 let uid_machine = g:netrw_machine .'.'. g:netrw_uid
922 else
923 let uid_machine = g:netrw_machine .'.'. $USERNAME
924 endif
925 else
926 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
927 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
928 else
929 let uid_machine = g:netrw_machine
930 endif
931 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000932 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
933" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".netrw_fname)
934 exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".netrw_fname
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000935 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000936
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000937 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000938 " ftp + <.netrc>: NetWrite Method #2 {{{3
939 elseif b:netrw_method == 2
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000940 let netrw_fname= b:netrw_fname
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000941 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000942 setlocal ff=unix
Bram Moolenaar071d4272004-06-13 20:20:40 +0000943 exe "put ='".g:netrw_ftpmode."'"
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000944" call Decho(" filter input: ".getline("."))
945 exe "put ='"."put ".tmpfile.' \"'.netrw_fname.'\"'."'"
946" call Decho(" filter input: ".getline("."))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000947 if exists("g:netrw_port") && g:netrw_port != ""
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000948" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
Bram Moolenaar69a7cb42004-06-20 12:51:53 +0000949 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
Bram Moolenaar071d4272004-06-13 20:20:40 +0000950 else
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000951" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
Bram Moolenaar69a7cb42004-06-20 12:51:53 +0000952 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
Bram Moolenaar071d4272004-06-13 20:20:40 +0000953 endif
954 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
955 if getline(1) !~ "^$"
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000956 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +0000957 echohl Error | echo "***netrw*** ".getline(1) | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000958 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +0000959 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000960 let mod=1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000961 endif
962 bd!
Bram Moolenaar071d4272004-06-13 20:20:40 +0000963 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000964
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000965 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +0000966 " ftp + machine, id, passwd, filename: NetWrite Method #3 {{{3
967 elseif b:netrw_method == 3
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000968 let netrw_fname= b:netrw_fname
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000969 new
Bram Moolenaar8299df92004-07-10 09:47:34 +0000970 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000971 if exists("g:netrw_port") && g:netrw_port != ""
972 put ='open '.g:netrw_machine.' '.g:netrw_port
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000973" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000974 else
975 put ='open '.g:netrw_machine
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000976" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000977 endif
978 if exists("g:netrw_ftp") && g:netrw_ftp == 1
979 put =g:netrw_uid
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000980" call Decho("filter input: ".getline("."))
981 put ='\"'.g:netrw_passwd.'\"'
982" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000983 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000984 put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
985" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000986 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +0000987 put ='put '.tmpfile.' \"'.netrw_fname.'\"'
988" call Decho("filter input: ".getline("."))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000989 " save choice/id/password for future use
990 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +0000991
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000992 " perform ftp:
993 " -i : turns off interactive prompting from ftp
994 " -n unix : DON'T use <.netrc>, even though it exists
995 " -n win32: quit being obnoxious about password
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000996 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000997" call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000998 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
999 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
1000 if getline(1) !~ "^$"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001001 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001002 echohl Error | echo "***netrw*** ".getline(1) | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001003 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001004 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001005 let mod=1
1006 endif
1007 bd!
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001008
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001009 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001010 " scp: NetWrite Method #4 {{{3
1011 elseif b:netrw_method == 4
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001012 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001013 if exists("g:netrw_port") && g:netrw_port != ""
1014 let useport= " -P ".g:netrw_port
1015 else
1016 let useport= ""
1017 endif
1018 if g:netrw_cygwin == 1
1019 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001020" call Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." '".g:netrw_machine.":".netrw_fname."'")
1021 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." '".g:netrw_machine.":".netrw_fname."'"
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001022 else
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001023" call Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." '".g:netrw_machine.":".netrw_fname."'")
1024 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." '".g:netrw_machine.":".netrw_fname."'"
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001025 endif
1026 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001027
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001028 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001029 " http: NetWrite Method #5 {{{3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001030 elseif b:netrw_method == 5
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001031 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001032 echohl Error | echo "***netrw*** currently <netrw.vim> does not support writing using http:" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001033 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001034 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001035
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001036 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001037 " dav: NetWrite Method #6 (cadaver) {{{3
1038 elseif b:netrw_method == 6
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001039" call Decho("write via cadaver (method #6)")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001040
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001041 " Construct execution string (four lines) which will be passed through filter
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001042 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001043 new
Bram Moolenaar8299df92004-07-10 09:47:34 +00001044 setlocal ff=unix
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001045 if exists("g:netrw_port") && g:netrw_port != ""
1046 put ='open '.g:netrw_machine.' '.g:netrw_port
1047 else
1048 put ='open '.g:netrw_machine
1049 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00001050 put ='user '.g:netrw_uid.' '.g:netrw_passwd
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001051
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001052 if g:netrw_cygwin == 1
1053 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
1054 put ='put '.cygtmpfile.' '.netrw_fname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001055 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001056 put ='put '.tmpfile.' '.netrw_fname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001057 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001058
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001059 " perform cadaver operation:
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001060 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001061" call Decho("executing: %!".g:netrw_dav_cmd)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001062 exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
1063 bd!
1064 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001065
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001066 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001067 " rsync: NetWrite Method #7 {{{3
1068 elseif b:netrw_method == 7
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001069 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001070 if g:netrw_cygwin == 1
1071 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001072" call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".netrw_fname)
1073 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".netrw_fname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001074 else
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001075" call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname)
1076 exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001077 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001078 let b:netrw_lastfile = choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001079
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001080 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001081 " sftp: NetWrite Method #9 {{{3
1082 elseif b:netrw_method == 9
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001083 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
Bram Moolenaar071d4272004-06-13 20:20:40 +00001084 if exists("g:netrw_uid") && ( g:netrw_uid != "" )
1085 let uid_machine = g:netrw_uid .'@'. g:netrw_machine
1086 else
1087 let uid_machine = g:netrw_machine
1088 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001089 new
Bram Moolenaar8299df92004-07-10 09:47:34 +00001090 setlocal ff=unix
Bram Moolenaar071d4272004-06-13 20:20:40 +00001091 put ='put '.tmpfile.' '.netrw_fname
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001092 norm! 1Gdd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001093" call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001094 exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
1095 bd!
1096 let b:netrw_lastfile= choice
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001097
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001098 ".........................................
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001099 " Complain {{{3
1100 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001101 echo "***warning*** unable to comply with your request<" . choice . ">"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001102 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001103 endwhile
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001104
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001105 " cleanup {{{3
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001106" call Decho("cleanup")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001107 let result=delete(tmpfile)
1108 call s:NetOptionRestore()
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001109
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001110 if a:firstline == 1 && a:lastline == line("$")
1111 let &mod= mod " usually equivalent to set nomod
Bram Moolenaar071d4272004-06-13 20:20:40 +00001112 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001113
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001114" call Dret("NetWrite")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001115endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +00001116
Bram Moolenaar83bab712005-08-01 21:58:57 +00001117" ===========================================
1118" Remote Directory Browsing Support: {{{1
1119" ===========================================
1120
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001121" ---------------------------------------------------------------------
Bram Moolenaar843ee412004-06-30 16:16:41 +00001122" NetBrowse: This function uses the command in g:netrw_list_cmd to get a list {{{2
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001123" of the contents of a remote directory. It is assumed that the
1124" g:netrw_list_cmd has a string, HOSTNAME, that needs to be substituted
1125" with the requested remote hostname first.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001126fun! s:NetBrowse(dirname)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001127 if !exists("w:netrw_longlist")|let w:netrw_longlist= g:netrw_longlist|endif
1128" call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".w:netrw_longlist)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001129
Bram Moolenaar488c6512005-08-11 20:09:58 +00001130 if exists("s:netrw_skipbrowse")
1131 unlet s:netrw_skipbrowse
1132" call Dret("NetBrowse")
1133 return
1134 endif
1135
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001136 call s:NetOptionSave()
1137
Bram Moolenaar843ee412004-06-30 16:16:41 +00001138 " sanity check
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001139 if exists("b:netrw_method") && b:netrw_method =~ '[235]'
1140" call Decho("b:netrw_method=".b:netrw_method)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001141 if !executable("ftp")
1142 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001143 echohl Error | echo "***netrw*** this system doesn't support remote directory listing via ftp" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001144 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001145 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001146 call s:NetOptionRestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001147" call Dret("NetBrowse")
1148 return
1149 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001150 elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001151 if !exists("g:netrw_quiet")
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001152 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 +00001153 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001154 endif
Bram Moolenaar572cb562005-08-05 21:35:02 +00001155
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001156 call s:NetOptionRestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001157" call Dret("NetBrowse")
1158 return
Bram Moolenaar843ee412004-06-30 16:16:41 +00001159 endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001160
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00001161 " use buffer-oriented WinVars if buffer ones exist but window ones don't
1162 call s:UseBufWinVars()
1163
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001164 " set up menus
1165 let b:netrw_browser_active= 1
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00001166 call s:NetMenu(1)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001167
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001168 " make this buffer modifiable
Bram Moolenaar83bab712005-08-01 21:58:57 +00001169 setlocal ma nonu nowrap
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001170
1171 " analyze a:dirname and g:netrw_list_cmd
1172 let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001173 let dirname = substitute(a:dirname,'\\','/','ge')
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001174" call Decho("dirname<".dirname.">")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001175 if dirname !~ dirpat
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001176 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001177 echohl Error | echo "***netrw*** netrw doesn't understand your dirname<".dirname.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001178 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001179 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001180 call s:NetOptionRestore()
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001181" call Dret("NetBrowse : badly formatted dirname<".dirname.">")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001182 return
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001183 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00001184
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001185 let method = substitute(dirname,dirpat,'\1','')
1186 let user = substitute(dirname,dirpat,'\2','')
1187 let machine = substitute(dirname,dirpat,'\3','')
1188 let path = substitute(dirname,dirpat,'\4','')
1189 let fname = substitute(dirname,'^.*/\ze.','','')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001190" call Decho("set up method <".method .">")
1191" call Decho("set up user <".user .">")
1192" call Decho("set up machine<".machine.">")
1193" call Decho("set up path <".path .">")
1194" call Decho("set up fname <".fname .">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001195
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001196 if method == "ftp" || method == "http"
1197 let method = "ftp"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001198 let listcmd = g:netrw_ftp_list_cmd
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001199 else
1200 let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
1201 endif
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001202
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001203 if exists("b:netrw_method")
Bram Moolenaar488c6512005-08-11 20:09:58 +00001204" call Decho("setting w:netrw_method<".b:netrw_method.">")
1205 let w:netrw_method= b:netrw_method
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001206 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001207
Bram Moolenaar8299df92004-07-10 09:47:34 +00001208 " optionally sort by time (-t) or by size (-S)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001209 if listcmd == "dir" && g:netrw_sort_by =~ "^[ts]"
Bram Moolenaar572cb562005-08-05 21:35:02 +00001210 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 +00001211 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001212 else
1213 if g:netrw_sort_by =~ "^t"
1214 let listcmd= listcmd."t"
1215 elseif g:netrw_sort_by =~ "^s"
1216 let listcmd= listcmd."S"
1217 endif
Bram Moolenaard68071d2006-05-02 22:08:30 +00001218
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001219 " optionally sort in reverse
1220 if g:netrw_sort_direction =~ "^r" && listcmd == "dir"
1221 let listcmd= listcmd."r"
1222 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00001223 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001224
1225" call Decho("set up listcmd<".listcmd.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001226 if fname =~ '@$' && fname !~ '^"'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001227" call Decho("attempt transfer of symlink as file")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001228 call s:NetBrowse(substitute(dirname,'@$','','e'))
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001229 redraw!
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001230 call s:NetOptionRestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001231" call Dret("NetBrowse : symlink")
1232 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001233
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001234 elseif fname !~ '[\/]$' && fname !~ '^"'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001235 " looks like a regular file, attempt transfer
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001236" call Decho("attempt transfer as regular file<".dirname.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001237
1238 " remove any filetype indicator from end of dirname, except for the
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001239 " "this is a directory" indicator (/). There shouldn't be one of those,
1240 " anyway.
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001241 let path= substitute(path,'[*=@|]\r\=$','','e')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001242" call Decho("new path<".path.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001243
1244 " remote-read the requested file into current buffer
Bram Moolenaar57657d82006-04-21 22:12:41 +00001245 mark '
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001246 keepjumps keepalt enew!
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001247 set ma
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001248" call Decho("exe file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001249 exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001250 exe "silent doau BufReadPre ".fname
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001251 silent call netrw#NetRead(2,method."://".user.machine."/".path)
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001252 exe "silent doau BufReadPost ".fname
Bram Moolenaar572cb562005-08-05 21:35:02 +00001253
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00001254 " save certain window-oriented variables into buffer-oriented variables
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001255 call s:SetBufWinVars()
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001256 call s:NetOptionRestore()
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001257 setlocal nomod nowrap
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001258
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001259" call Dret("NetBrowse : file<".fname.">")
1260 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001261 endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001262
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001263 " ---------------------------------------------------------------------
1264 " Perform Directory Listing:
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001265" call Decho("Perform directory listing...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001266 " set up new buffer and map
1267 let bufname = method.'://'.user.machine.'/'.path
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001268 let bufnamenr = bufnr(bufname.'$')
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001269" call Decho("bufname<".bufname."> bufnamenr=".bufnamenr)
Bram Moolenaar57657d82006-04-21 22:12:41 +00001270 mark '
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001271 if bufnamenr != -1
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001272 " buffer already exists, switch to it!
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001273" call Decho("buffer already exists, switching to it")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001274 exe "b ".bufnamenr
1275 if line("$") >= 5
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001276 call s:NetOptionRestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001277" call Dret("NetBrowse")
1278 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001279 endif
1280 else
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001281" call Decho("generate a new buffer")
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001282 keepjumps keepalt enew!
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001283 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001284
1285 " rename file to reflect where its from
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001286 setlocal bt=nofile bh=wipe nobl noswf
1287 exe "setlocal ts=".g:netrw_maxfilenamelen
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001288" call Decho("exe file ".escape(bufname,s:netrw_cd_escape))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001289 exe 'file '.escape(bufname,s:netrw_cd_escape)
Bram Moolenaar269ec652004-07-29 08:43:53 +00001290" call Decho("renaming file to bufname<".bufname.">")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001291 setlocal bt=nofile nobl nonu noswf
1292 if g:netrw_fastbrowse >= 1
1293 setlocal bh=hide
Bram Moolenaarc01140a2006-03-24 22:21:52 +00001294 else
1295 setlocal bh=delete
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001296 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001297
1298 " save current directory on directory history list
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001299 call s:NetBookmarkDir(3,expand("%"))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001300
1301 " set up buffer-local mappings
1302" call Decho("set up buffer-local mappings")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001303 nnoremap <buffer> <silent> <cr> :call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001304 nnoremap <buffer> <silent> <c-l> :call <SID>NetRefresh(<SID>NetBrowseChgDir(expand("%"),'./'),0)<cr>
Bram Moolenaar843ee412004-06-30 16:16:41 +00001305 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr>
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001306 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 +00001307 if w:netrw_longlist != 2
1308 nnoremap <buffer> <silent> b :<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
1309 nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr>
1310 endif
1311 nnoremap <buffer> <silent> Nb :<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
1312 nnoremap <buffer> <silent> NB :<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001313 nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(0)<cr>
1314 nnoremap <buffer> <silent> i :call <SID>NetLongList(0)<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00001315 nnoremap <buffer> <silent> o :call <SID>NetSplit(0)<cr>
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001316 nnoremap <buffer> <silent> O :call netrw#NetObtain()<cr>
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001317 nnoremap <buffer> <silent> P :call <SID>NetPrevWinOpen(0)<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001318 nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr>
1319 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>
1320 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>
1321 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(0)<cr>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001322 nnoremap <buffer> <silent> u :<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
1323 nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00001324 nnoremap <buffer> <silent> v :call <SID>NetSplit(1)<cr>
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001325 nnoremap <buffer> <silent> x :call netrw#NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001326 nnoremap <buffer> <silent> <2-leftmouse> :call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001327 exe 'nnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar843ee412004-06-30 16:16:41 +00001328 exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001329 exe 'nnoremap <buffer> <silent> d :call <SID>NetMakeDir("'.user.machine.'")<cr>'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001330 exe 'nnoremap <buffer> <silent> D :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar843ee412004-06-30 16:16:41 +00001331 exe 'vnoremap <buffer> <silent> D :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001332 exe 'nnoremap <buffer> <silent> R :call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar269ec652004-07-29 08:43:53 +00001333 exe 'vnoremap <buffer> <silent> R :call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
Bram Moolenaar433f7c82006-03-21 21:29:36 +00001334 nnoremap <buffer> <F1> :he netrw-browse-cmds<cr>
Bram Moolenaar83bab712005-08-01 21:58:57 +00001335 setlocal ma nonu nowrap
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001336
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001337 " Set up the banner
Bram Moolenaar57657d82006-04-21 22:12:41 +00001338" call Decho("set up the banner: sortby<".g:netrw_sort_by."> method<".method."> direction<".g:netrw_sort_direction.">")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001339 keepjumps put ='\" ==========================================================================='
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001340 keepjumps put ='\" Netrw Remote Directory Listing (netrw '.g:loaded_netrw.')'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001341 keepjumps put ='\" '.bufname
Bram Moolenaar488c6512005-08-11 20:09:58 +00001342 let w:netrw_bannercnt = 7
1343 let sortby = g:netrw_sort_by
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001344 if g:netrw_sort_direction =~ "^r"
Bram Moolenaar488c6512005-08-11 20:09:58 +00001345 let sortby = sortby." reversed"
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001346 endif
1347
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001348 if g:netrw_sort_by =~ "^n"
1349 " sorted by name
Bram Moolenaar488c6512005-08-11 20:09:58 +00001350 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001351 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001352 keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence
1353 else
1354 " sorted by size or date
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001355 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001356 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00001357 if g:netrw_list_hide != "" && g:netrw_hide
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001358" call Decho("g:netrw_hide=".g:netrw_hide)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001359 if g:netrw_hide == 1
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001360 keepjumps put ='\" Hiding: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001361 else
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001362 keepjumps put ='\" Showing: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001363 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00001364 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaar843ee412004-06-30 16:16:41 +00001365 endif
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001366 keepjumps put ='\" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001367 keepjumps put ='\" ==========================================================================='
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001368
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001369 " remote read the requested directory listing
1370 " Use ftp if that was the file-transfer method selected, otherwise use ssh
1371 " Note that not all ftp servers honor the options for ls
1372 if method == "ftp"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001373 " use ftp to get remote file listing
1374" call Decho("use ftp to get remote file listing")
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001375 call s:NetBrowseFtpCmd(path,listcmd)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001376 keepjumps 1d
1377
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001378 if w:netrw_longlist == 0 || w:netrw_longlist == 2
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001379 " shorten the listing
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001380" call Decho("generate short listing")
Bram Moolenaar488c6512005-08-11 20:09:58 +00001381 exe "keepjumps ".w:netrw_bannercnt
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001382
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001383 " cleanup
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001384 if g:netrw_ftp_browse_reject != ""
1385 exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
1386 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001387 silent! keepjumps %s/\r$//e
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001388
1389 " if there's no ../ listed, then put ./ and ../ in
1390 let line1= line(".")
1391 keepjumps 1
1392 silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
1393 let line2= line(".")
1394 if line2 == 0
1395 keepjumps put='../'
1396 keepjumps put='./'
1397 endif
1398 exe "keepjumps ".line1
1399 keepjumps norm! 0
1400
1401 " more cleanup
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001402 exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
1403 exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
1404 exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001405 endif
1406
1407 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001408 " use ssh to get remote file listing
1409" call Decho("use ssh to get remote file listing")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001410 let shq= &shq? &shq : ( &sxq? &sxq : "'")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001411" call Decho("exe silent r! ".listcmd." '".shq.escape(path,s:netrw_cd_escape).shq."'")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001412 exe "silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq
1413 keepjumps 1d
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001414 " cleanup
1415 if g:netrw_ftp_browse_reject != ""
1416 exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001417 endif
1418 endif
1419
1420 " set up syntax highlighting
1421 if has("syntax")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00001422 setlocal ft=netrw
Bram Moolenaar572cb562005-08-05 21:35:02 +00001423 if !exists("g:syntax_on") || !g:syntax_on
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001424 setlocal ft=
Bram Moolenaar572cb562005-08-05 21:35:02 +00001425 " Ugly workaround -- when syntax highlighting is off and laststatus==2,
1426 " sometimes the laststatus highlight bleeds into the entire display.
1427 " Only seems to happen with remote browsing. Weird.
1428 redraw
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001429 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001430 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001431
1432 " manipulate the directory listing (hide, sort)
Bram Moolenaar488c6512005-08-11 20:09:58 +00001433 if line("$") >= w:netrw_bannercnt
Bram Moolenaar269ec652004-07-29 08:43:53 +00001434 if g:netrw_hide && g:netrw_list_hide != ""
1435 call s:NetrwListHide()
Bram Moolenaar843ee412004-06-30 16:16:41 +00001436 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001437
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001438 if w:netrw_longlist == 1
Bram Moolenaar8299df92004-07-10 09:47:34 +00001439 " do a long listing; these substitutions need to be done prior to sorting
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001440" call Decho("manipulate long listing")
1441
1442 if method == "ftp"
1443 " cleanup
Bram Moolenaar488c6512005-08-11 20:09:58 +00001444 exe "keepjumps ".w:netrw_bannercnt
Bram Moolenaar572cb562005-08-05 21:35:02 +00001445 while getline(".") =~ g:netrw_ftp_browse_reject
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001446 keepjumps d
1447 endwhile
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001448 " if there's no ../ listed, then put ./ and ../ in
1449 let line1= line(".")
1450 keepjumps 1
1451 silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
1452 let line2= line(".")
1453 if line2 == 0
Bram Moolenaar488c6512005-08-11 20:09:58 +00001454 exe 'keepjumps '.w:netrw_bannercnt."put='./'"
1455 exe 'keepjumps '.w:netrw_bannercnt."put='../'"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001456 endif
1457 exe "keepjumps ".line1
1458 keepjumps norm! 0
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001459 endif
1460
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001461 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e'
1462 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
1463 exe 'silent keepjumps '.w:netrw_bannercnt
Bram Moolenaar8299df92004-07-10 09:47:34 +00001464 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001465
Bram Moolenaar488c6512005-08-11 20:09:58 +00001466 if line("$") >= w:netrw_bannercnt
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001467 if g:netrw_sort_by =~ "^n"
1468 call s:SetSort()
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001469 if g:netrw_sort_direction =~ 'n'
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001470 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001471 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001472 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
Bram Moolenaar83bab712005-08-01 21:58:57 +00001473 endif
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00001474 " remove priority pattern prefix
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001475 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001476 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001477 if w:netrw_longlist == 1
1478 " shorten the list to keep its width <= winwidth characters
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001479 exe "silent keepjumps ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001480 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00001481 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001482 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001483
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001484 call s:NetrwWideListing()
1485 if line("$") >= w:netrw_bannercnt
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001486 " place cursor on the top-left corner of the file listing
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001487 exe "keepjumps ".w:netrw_bannercnt
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001488 norm! 0
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001489 endif
Bram Moolenaar572cb562005-08-05 21:35:02 +00001490
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00001491 call s:NetOptionRestore()
Bram Moolenaar572cb562005-08-05 21:35:02 +00001492 setlocal nomod noma nonu
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001493
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001494" call Dret("NetBrowse")
1495 return
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001496endfun
1497
1498" ---------------------------------------------------------------------
Bram Moolenaar843ee412004-06-30 16:16:41 +00001499" NetBrowseChgDir: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001500fun! s:NetBrowseChgDir(dirname,newdir)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001501" call Dfunc("NetBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">)")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001502
1503 let dirname= a:dirname
Bram Moolenaar843ee412004-06-30 16:16:41 +00001504 let newdir = a:newdir
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001505
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001506 if newdir !~ '[\/]$'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001507 " handling a file
1508 let dirname= dirname.newdir
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00001509 let didfile= 0
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001510 if g:netrw_browse_split == 1
1511 new
1512 wincmd _
1513 elseif g:netrw_browse_split == 2
1514 rightb vert new
1515 wincmd |
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00001516 else
1517 " handling a file, didn't split, so possibly remove menu
1518 call s:NetMenu(0)
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001519 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001520" call Decho("handling a file: dirname<".dirname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001521
1522 elseif newdir == './'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001523 " refresh the directory list
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001524" call Decho("refresh directory listing")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001525 setlocal ma nobl
1526 if g:netrw_fastbrowse >= 1
1527 setlocal bh=hide
Bram Moolenaarc01140a2006-03-24 22:21:52 +00001528 else
1529 setlocal bh=delete
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001530 endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001531 %d
1532
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001533 elseif newdir == '../'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001534 " go up one directory
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001535 let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','')
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001536
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001537 if trailer =~ '^\%(\.\./\)*$'
1538 " tack on a ../"
1539 let dirname= dirname.'../'
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001540
1541 else
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001542 " strip off a directory name from dirname
1543 let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','')
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001544 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001545" call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001546
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001547 else
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001548 " go down one directory
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001549 let dirname= dirname.newdir
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001550" call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001551 endif
1552
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001553" call Dret("NetBrowseChgDir <".dirname.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00001554 return dirname
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001555endfun
1556
Bram Moolenaar843ee412004-06-30 16:16:41 +00001557" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001558" NetGetWord: it gets the directory named under the cursor {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001559fun! s:NetGetWord()
Bram Moolenaarc01140a2006-03-24 22:21:52 +00001560" call Dfunc("NetGetWord() line#".line(".")." longlist=".g:netrw_longlist." virtcol=".virtcol("."))
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00001561 call s:UseBufWinVars()
1562
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001563 " insure that w:netrw_longlist is set up
1564 if !exists("w:netrw_longlist")
1565 if exists("g:netrw_longlist")
1566 let w:netrw_longlist= g:netrw_longlist
1567 else
1568 let w:netrw_longlist= 0
1569 endif
Bram Moolenaarc01140a2006-03-24 22:21:52 +00001570" call Decho("w:netrw_longlist=".w:netrw_longlist)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001571 endif
1572
Bram Moolenaar488c6512005-08-11 20:09:58 +00001573 if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001574 " Active Banner support
1575" call Decho("active banner handling")
1576 norm! 0
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001577 let dirname= "./"
Bram Moolenaar488c6512005-08-11 20:09:58 +00001578 let curline= getline(".")
1579 if curline =~ '"\s*Sorted by\s'
1580 norm s
1581 let s:netrw_skipbrowse= 1
1582 echo 'Pressing "s" also works'
1583 elseif curline =~ '"\s*Sort sequence:'
1584 let s:netrw_skipbrowse= 1
1585 echo 'Press "S" to edit sorting sequence'
1586 elseif curline =~ '"\s*Quick Help:'
1587 norm ?
1588 let s:netrw_skipbrowse= 1
1589 echo 'Pressing "?" also works'
1590 elseif curline =~ '"\s*\%(Hiding\|Showing\):'
1591 norm a
1592 let s:netrw_skipbrowse= 1
1593 echo 'Pressing "a" also works'
1594 elseif line("$") > w:netrw_bannercnt
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001595 exe 'silent keepjumps '.w:netrw_bannercnt
Bram Moolenaar488c6512005-08-11 20:09:58 +00001596 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001597
1598 elseif w:netrw_longlist == 0
1599" call Decho("thin column handling")
1600 norm! 0
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001601 let dirname= getline(".")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001602
1603 elseif w:netrw_longlist == 1
1604" call Decho("long column handling")
1605 norm! 0
1606 let dirname= substitute(getline("."),'^\(\%(\S\+\s\)*\S\+\).\{-}$','\1','e')
1607
1608 else
1609" call Decho("obtain word from wide listing")
1610 let dirname= getline(".")
1611
1612 if !exists("b:netrw_cpf")
1613 let b:netrw_cpf= 0
1614 exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
1615" call Decho("computed cpf")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001616 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001617
1618 let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
Bram Moolenaarc01140a2006-03-24 22:21:52 +00001619" call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart." bannercnt=".w:netrw_bannercnt)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001620" call Decho("1: dirname<".dirname.">")
1621 if filestart > 0|let dirname= substitute(dirname,'^.\{'.filestart.'}','','')|endif
1622" call Decho("2: dirname<".dirname.">")
1623 let dirname = substitute(dirname,'^\(.\{'.b:netrw_cpf.'}\).*$','\1','e')
1624" call Decho("3: dirname<".dirname.">")
1625 let dirname = substitute(dirname,'\s\+$','','e')
1626" call Decho("4: dirname<".dirname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001627 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001628
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001629" call Dret("NetGetWord <".dirname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001630 return dirname
1631endfun
1632
1633" ---------------------------------------------------------------------
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001634" NetBrowseRm: remove/delete a remote file or directory {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001635fun! s:NetBrowseRm(usrhost,path) range
Bram Moolenaarc01140a2006-03-24 22:21:52 +00001636" call Dfunc("NetBrowseRm(usrhost<".a:usrhost."> path<".a:path.">) virtcol=".virtcol("."))
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001637" call Decho("firstline=".a:firstline." lastline=".a:lastline)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001638
1639 " preparation for removing multiple files/directories
1640 let ctr= a:firstline
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001641 let all= 0
Bram Moolenaar843ee412004-06-30 16:16:41 +00001642
1643 " remove multiple files and directories
1644 while ctr <= a:lastline
1645 exe ctr
1646
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001647 let rmfile= s:NetGetWord()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001648" call Decho("rmfile<".rmfile.">")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001649
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001650 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
Bram Moolenaar843ee412004-06-30 16:16:41 +00001651 " attempt to remove file
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001652 if !all
1653 echohl Statement
1654 call inputsave()
1655 let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
1656 call inputrestore()
1657 echohl NONE
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001658 if ok == ""
1659 let ok="no"
1660 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001661 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
1662 if ok =~ 'a\%[ll]'
1663 let all= 1
1664 endif
1665 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001666
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001667 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaar488c6512005-08-11 20:09:58 +00001668 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001669 silent! keepjumps .,$d
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001670 call s:NetBrowseFtpCmd(a:path,"delete ".rmfile)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001671 else
1672 let netrw_rm_cmd= substitute(g:netrw_rm_cmd,'HOSTNAME',a:usrhost,'').' "'.escape(a:path.rmfile,s:netrw_cd_escape).'"'
1673" call Decho("attempt to remove file: system(".netrw_rm_cmd.")")
1674 let ret= system(netrw_rm_cmd)
1675" call Decho("returned=".ret." errcode=".v:shell_error)
1676 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001677 elseif ok =~ 'q\%[uit]'
1678 break
Bram Moolenaar843ee412004-06-30 16:16:41 +00001679 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001680
Bram Moolenaar843ee412004-06-30 16:16:41 +00001681 else
1682 " attempt to remove directory
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001683 if !all
1684 call inputsave()
1685 let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
1686 call inputrestore()
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001687 if ok == ""
1688 let ok="no"
1689 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001690 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
1691 if ok =~ 'a\%[ll]'
1692 let all= 1
1693 endif
1694 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00001695
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001696 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaar488c6512005-08-11 20:09:58 +00001697 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001698 call s:NetBrowseFtpCmd(a:path,"rmdir ".rmfile)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001699 else
1700 let rmfile = a:path.rmfile
1701 let netrw_rmdir_cmd= substitute(g:netrw_rmdir_cmd,'HOSTNAME',a:usrhost,'').' '."'".'"'.rmfile.'"'."'"
1702" call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")")
1703 let ret= system(netrw_rmdir_cmd)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001704" call Decho("returned=".ret." errcode=".v:shell_error)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001705
1706 if v:shell_error != 0
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001707 let netrw_rmf_cmd= substitute(g:netrw_rmf_cmd,'HOSTNAME',a:usrhost,'').' '.substitute(rmfile,'[\/]$','','e')
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001708" call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
1709 let ret= system(netrw_rmf_cmd)
1710" call Decho("returned=".ret." errcode=".v:shell_error)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001711
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001712 if v:shell_error != 0 && !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00001713 echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00001714 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001715 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00001716 endif
1717 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001718
1719 elseif ok =~ 'q\%[uit]'
1720 break
Bram Moolenaar843ee412004-06-30 16:16:41 +00001721 endif
1722 endif
1723
1724 let ctr= ctr + 1
1725 endwhile
1726
1727 " refresh the directory
1728 let curline= line(".")-1
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001729" call Decho("refresh the directory")
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001730 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
Bram Moolenaar843ee412004-06-30 16:16:41 +00001731 exe curline
1732
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001733" call Dret("NetBrowseRm")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001734endfun
1735
1736" ---------------------------------------------------------------------
1737" NetBrowseRename: rename a remote file or directory {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001738fun! s:NetBrowseRename(usrhost,path) range
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001739" call Dfunc("NetBrowseRename(usrhost<".a:usrhost."> path<".a:path.">)")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001740
1741 " preparation for removing multiple files/directories
1742 let ctr = a:firstline
1743 let rename_cmd = substitute(g:netrw_rename_cmd,'\<HOSTNAME\>',a:usrhost,'')
1744
1745 " attempt to rename files/directories
1746 while ctr <= a:lastline
Bram Moolenaar8299df92004-07-10 09:47:34 +00001747 exe "keepjumps ".ctr
Bram Moolenaar843ee412004-06-30 16:16:41 +00001748
1749 norm! 0
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001750 let oldname= s:NetGetWord()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001751" call Decho("oldname<".oldname.">")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001752
1753 call inputsave()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001754 let newname= input("Moving ".oldname." to : ",oldname)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001755 call inputrestore()
1756
Bram Moolenaar488c6512005-08-11 20:09:58 +00001757 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001758 call s:NetBrowseFtpCmd(a:path,"rename ".oldname." ".newname)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001759 else
1760 let oldname= a:path.oldname
1761 let newname= a:path.newname
1762" call Decho("system(rename_cmd".' "'.escape(oldname," ").'" "'.escape(newname,s:netrw_cd_escape).'"')
1763 let ret= system(rename_cmd.' "'.escape(oldname,s:netrw_cd_escape).'" "'.escape(newname,s:netrw_cd_escape).'"')
1764 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00001765
1766 let ctr= ctr + 1
1767 endwhile
1768
1769 " refresh the directory
1770 let curline= line(".")
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001771 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
Bram Moolenaar8299df92004-07-10 09:47:34 +00001772 exe "keepjumps ".curline
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001773" call Dret("NetBrowseRename")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001774endfun
1775
1776" ---------------------------------------------------------------------
Bram Moolenaar572cb562005-08-05 21:35:02 +00001777" NetRefresh: {{{2
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001778fun! s:NetRefresh(dirname,islocal)
1779" call Dfunc("NetRefresh(dirname<".a:dirname.">,islocal=".a:islocal.")")
1780 call netrw#NetSavePosn()
Bram Moolenaar572cb562005-08-05 21:35:02 +00001781 set ma
1782 %d
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001783 if a:islocal
1784 call s:LocalBrowse(a:dirname)
1785 else
1786 call s:NetBrowse(a:dirname)
1787 endif
1788 call netrw#NetRestorePosn()
Bram Moolenaar572cb562005-08-05 21:35:02 +00001789 redraw!
1790" call Dret("NetRefresh")
1791endfun
1792
1793" ---------------------------------------------------------------------
Bram Moolenaar488c6512005-08-11 20:09:58 +00001794" NetSplit: mode {{{2
1795" =0 : net and o
1796" =1 : net and v
1797" =2 : local and o
1798" =3 : local and v
1799fun! s:NetSplit(mode)
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001800" call Dfunc("NetSplit(mode=".a:mode.") alto=".g:netrw_alto." altv=".g:netrw_altv)
Bram Moolenaar488c6512005-08-11 20:09:58 +00001801
1802 call s:SaveWinVars()
1803 if a:mode == 0
1804 exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
1805 call s:CopyWinVars()
1806 exe "norm! 0"
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001807 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),s:NetGetWord()))
Bram Moolenaar488c6512005-08-11 20:09:58 +00001808 elseif a:mode ==1
1809 exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
1810 call s:CopyWinVars()
1811 exe "norm! 0"
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001812 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),s:NetGetWord()))
Bram Moolenaar488c6512005-08-11 20:09:58 +00001813 elseif a:mode ==2
1814 exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
1815 call s:CopyWinVars()
1816 exe "norm! 0"
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001817 call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,s:NetGetWord()))
Bram Moolenaar488c6512005-08-11 20:09:58 +00001818 else
1819 exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
1820 call s:CopyWinVars()
1821 exe "norm! 0"
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001822 call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,s:NetGetWord()))
Bram Moolenaar488c6512005-08-11 20:09:58 +00001823 endif
1824
1825" call Dret("NetSplit")
1826endfun
1827
1828" ---------------------------------------------------------------------
Bram Moolenaar843ee412004-06-30 16:16:41 +00001829" NetBrowseX: allows users to write custom functions to operate on {{{2
Bram Moolenaar8299df92004-07-10 09:47:34 +00001830" files given their extension. Passes 0=local, 1=remote
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001831fun! netrw#NetBrowseX(fname,remote)
1832" call Dfunc("NetBrowseX(fname<".a:fname."> remote=".a:remote.")")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001833
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001834 " set up the filename
1835 " (lower case the extension, make a local copy of a remote file)
Bram Moolenaar843ee412004-06-30 16:16:41 +00001836 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001837 if has("win32") || has("win95") || has("win64") || has("win16")
1838 let exten= substitute(exten,'^.*$','\L&\E','')
1839 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001840 let fname= escape(a:fname,"%#")
1841" call Decho("fname<".fname."> after escape()")
1842
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001843 " seems kde systems often have gnome-open due to dependencies, even though
1844 " gnome-open's subsidiary display tools are largely absent. Kde systems
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001845 " usually have "kdeinit" running, though... (tnx Mikolaj Machowski)
1846 if !exists("s:haskdeinit")
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001847 if has("unix")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001848 silent! let s:haskdeinit= system('ps -e') =~ 'kdeinit'
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001849 if v:shell_error
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001850 let s:haskdeinit = 0
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001851 endif
1852 else
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001853 let s:haskdeinit= 0
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001854 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001855" call Decho("setting s:haskdeinit=".s:haskdeinit)
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001856 endif
1857
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001858 if a:remote == 1
1859 " create a local copy
1860 let fname= tempname().".".exten
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001861" call Decho("a:remote==1: create a local copy of <".a:fname."> as <".fname.">")
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001862 exe "silent keepjumps bot 1new ".a:fname
Bram Moolenaar572cb562005-08-05 21:35:02 +00001863 set bh=delete
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001864 exe "w! ".fname
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001865 q
1866 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001867" call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
Bram Moolenaar8299df92004-07-10 09:47:34 +00001868
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001869 " set up redirection
1870 if &srr =~ "%s"
Bram Moolenaarf4cd3e82005-12-22 22:47:02 +00001871 let redir= substitute(&srr,"%s","/dev/null","")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001872 else
1873 let redir= &srr . "/dev/null"
1874 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001875" call Decho("redir{".redir."} srr{".&srr."}")
Bram Moolenaar8299df92004-07-10 09:47:34 +00001876
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001877 if exists("g:netrw_browsex_viewer") && executable(g:netrw_browsex_viewer)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001878" call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001879 if g:netrw_browsex_viewer == '-'
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001880 let ret= netrwFileHandlers#Invoke(exten,fname)
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001881 else
1882" call Decho("exe silent !".g:netrw_browsex_viewer." '".escape(fname,'%#')."' ".redir)
1883 exe "silent !".g:netrw_browsex_viewer." '".escape(fname,'%#')."'".redir
1884 let ret= v:shell_error
1885 endif
1886
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001887 " execute the file handler
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00001888 elseif has("win32") || has("win64")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001889" call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"')
1890 exe 'silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"'
1891 let ret= v:shell_error
1892
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001893 elseif has("unix") && executable("gnome-open") && !s:haskdeinit
Bram Moolenaara5792f52005-11-23 21:25:05 +00001894" call Decho("exe silent !gnome-open '".escape(fname,'%#')."' ".redir)
1895 exe "silent !gnome-open '".escape(fname,'%#')."'".redir
1896 let ret= v:shell_error
1897
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001898 elseif has("unix") && executable("kfmclient") && s:haskdeinit
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001899" call Decho("exe silent !kfmclient exec '".escape(fname,'%#')."' ".redir)
1900 exe "silent !kfmclient exec '".escape(fname,'%#')."' ".redir
1901 let ret= v:shell_error
1902
1903 else
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001904 " netrwFileHandlers#Invoke() always returns 0
1905 let ret= netrwFileHandlers#Invoke(exten,fname)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001906 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001907
1908 " if unsuccessful, attempt netrwFileHandlers#Invoke()
1909 if ret
1910 let ret= netrwFileHandlers#Invoke(exten,fname)
1911 endif
1912
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001913 redraw!
Bram Moolenaar8299df92004-07-10 09:47:34 +00001914
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001915 " cleanup: remove temporary file,
1916 " delete current buffer if success with handler,
1917 " return to prior buffer (directory listing)
1918 if a:remote == 1 && fname != a:fname
1919" call Decho("deleting temporary file<".fname.">")
1920 call delete(fname)
1921 endif
1922
1923 if a:remote == 1
Bram Moolenaar572cb562005-08-05 21:35:02 +00001924 set bh=delete bt=nofile noswf
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001925 exe "norm! \<c-o>"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00001926 redraw!
Bram Moolenaar843ee412004-06-30 16:16:41 +00001927 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00001928
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00001929" call Dret("NetBrowseX")
Bram Moolenaar843ee412004-06-30 16:16:41 +00001930endfun
1931
1932" ---------------------------------------------------------------------
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001933" NetBrowseFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2
1934" This function assumes that a long listing will be received. Size, time,
1935" and reverse sorts will be requested of the server but not otherwise
1936" enforced here.
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00001937fun! s:NetBrowseFtpCmd(path,listcmd)
1938" call Dfunc("NetBrowseFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) netrw_method=".w:netrw_method)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001939
1940 " because WinXX ftp uses unix style input
1941 " curline is one more than the bannercnt in order to account
1942 " for the unwanted first blank line (doing a :put to an empty
1943 " buffer yields a blank first line)
1944 let ffkeep= &ff
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00001945 setlocal ma ff=unix
Bram Moolenaar488c6512005-08-11 20:09:58 +00001946 let curline= w:netrw_bannercnt+1
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001947 exe "silent! keepjumps ".curline.",$d"
1948
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001949 ".........................................
1950 if w:netrw_method == 2 || w:netrw_method == 5
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001951 " ftp + <.netrc>: Method #2
1952 if a:path != ""
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001953 put ='cd \"'.a:path.'\"'
1954" call Decho('ftp: '.getline("."))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001955 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00001956 exe "put ='".a:listcmd."'"
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001957" call Decho("ftp: ".getline("."))
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001958" redraw!|call inputsave()|call input("Pausing...")|call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001959 if exists("g:netrw_port") && g:netrw_port != ""
1960" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
1961 exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
1962 else
1963" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
1964 exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
1965 endif
1966
1967 ".........................................
Bram Moolenaar488c6512005-08-11 20:09:58 +00001968 elseif w:netrw_method == 3
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001969 " ftp + machine,id,passwd,filename: Method #3
1970 setlocal ff=unix
1971 if exists("g:netrw_port") && g:netrw_port != ""
1972 put ='open '.g:netrw_machine.' '.g:netrw_port
1973 else
1974 put ='open '.g:netrw_machine
1975 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001976
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001977 if exists("g:netrw_ftp") && g:netrw_ftp == 1
1978 put =g:netrw_uid
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001979 put ='\"'.g:netrw_passwd.'\"'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001980 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001981 put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001982 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001983
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001984 if a:path != ""
Bram Moolenaar1afcace2005-11-25 19:54:28 +00001985 put ='cd \"'.a:path.'\"'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001986 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00001987 exe "put ='".a:listcmd."'"
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00001988
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001989 " perform ftp:
1990 " -i : turns off interactive prompting from ftp
1991 " -n unix : DON'T use <.netrc>, even though it exists
1992 " -n win32: quit being obnoxious about password
1993" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
1994 exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n"
1995
1996 ".........................................
1997 else
1998 echo "***warning*** unable to comply with your request<" . choice . ">"
1999 endif
2000
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002001 " cleanup for Windows
2002 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002003 silent! keepjumps! %s/\r$//e
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002004 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00002005 if a:listcmd == "dir"
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002006 " infer directory/link based on the file permission string
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002007 silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@
2008 silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002009 if w:netrw_longlist == 0 || w:netrw_longlist == 2
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002010 exe "silent! keepjumps ".curline.',$s/^\%(\S\+\s\+\)\{8}//e'
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002011 endif
2012 endif
2013
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002014 " ftp's ls doesn't seem to include ./ or ../
2015 if !search('^\.\/$','wn')
2016 exe 'keepjumps '.curline
2017 if a:path !~ '^$'
2018 put ='../'
2019 endif
2020 put ='./'
2021 exe 'keepjumps '.curline
2022 endif
2023
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002024 " restore settings
2025 let &ff= ffkeep
2026" call Dret("NetBrowseFtpCmd")
2027endfun
2028
2029" ---------------------------------------------------------------------
Bram Moolenaar843ee412004-06-30 16:16:41 +00002030" NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
2031" separated patterns given in g:netrw_list_hide
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002032fun! s:NetrwListHide()
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002033" call Dfunc("NetrwListHide() hide=".g:netrw_hide." listhide<".g:netrw_list_hide.">")
Bram Moolenaar843ee412004-06-30 16:16:41 +00002034
Bram Moolenaar5a305422006-04-28 22:38:25 +00002035 " find a character not in the "hide" string to used as a separator
2036 " for :g and :v commands
Bram Moolenaar843ee412004-06-30 16:16:41 +00002037 let listhide= g:netrw_list_hide
Bram Moolenaar5a305422006-04-28 22:38:25 +00002038 let sep = strpart(substitute('~!@#$%^&*{};:,<.>/?|abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890','['.escape(listhide,'-]^\').']','','ge'),1,1)
2039" call Decho("sep=".sep)
2040
Bram Moolenaar843ee412004-06-30 16:16:41 +00002041 while listhide != ""
2042 if listhide =~ ','
2043 let hide = substitute(listhide,',.*$','','e')
2044 let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e')
2045 else
2046 let hide = listhide
2047 let listhide= ""
2048 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002049
2050 " Prune the list by hiding any files which match
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002051 if g:netrw_hide == 1
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002052" call Decho("hiding<".hide."> listhide<".listhide.">")
Bram Moolenaar5a305422006-04-28 22:38:25 +00002053 exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002054 elseif g:netrw_hide == 2
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002055" call Decho("showing<".hide."> listhide<".listhide.">")
Bram Moolenaar5a305422006-04-28 22:38:25 +00002056 exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002057 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00002058 endwhile
Bram Moolenaar5a305422006-04-28 22:38:25 +00002059 if g:netrw_hide == 2
2060 exe 'silent keepjumps '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
2061 exe 'silent keepjumps '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
2062 endif
Bram Moolenaar843ee412004-06-30 16:16:41 +00002063
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002064" call Dret("NetrwListHide")
2065endfun
2066
2067" ---------------------------------------------------------------------
2068" NetHideEdit: allows user to edit the file/directory hiding list
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002069fun! s:NetHideEdit(islocal)
2070" call Dfunc("NetHideEdit(islocal=".a:islocal.")")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002071
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002072 " get new hiding list from user
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002073 call inputsave()
2074 let newhide= input("Edit Hiding List: ",g:netrw_list_hide)
2075 call inputrestore()
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002076 let g:netrw_list_hide= newhide
2077" call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002078
2079 " refresh the listing
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002080 if a:islocal == 0
Bram Moolenaar8299df92004-07-10 09:47:34 +00002081 silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
2082 else
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002083 silent call s:NetRefresh(s:LocalBrowseChgDir(b:netrw_curdir,"./"),a:islocal)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002084 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00002085
2086" call Dret("NetHideEdit")
Bram Moolenaar843ee412004-06-30 16:16:41 +00002087endfun
2088
Bram Moolenaar8299df92004-07-10 09:47:34 +00002089" ---------------------------------------------------------------------
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002090" NetSortSequence: allows user to edit the sorting sequence
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002091fun! s:NetSortSequence(mode)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002092" call Dfunc("NetSortSequence(mode=".a:mode.")")
2093
2094 call inputsave()
2095 let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence)
2096 call inputrestore()
2097
2098 " refresh the listing
2099 let g:netrw_sort_sequence= newsortseq
2100 if a:mode == 0
2101 silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
2102 else
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002103 silent call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,"./"))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002104 endif
2105
2106" call Dret("NetSortSequence")
2107endfun
2108
2109" ---------------------------------------------------------------------
Bram Moolenaar8299df92004-07-10 09:47:34 +00002110" NetLongList: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002111fun! s:NetLongList(mode)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002112" call Dfunc("NetLongList(mode=".a:mode.") netrw_longlist=".w:netrw_longlist)
2113 let fname = s:NetGetWord()
2114 let w:netrw_longlist = (w:netrw_longlist + 1) % 3
2115" call Decho("fname<".fname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002116
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002117 if w:netrw_longlist == 0
2118 " use one column listing
2119" call Decho("use one column list")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002120 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
2121
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002122 elseif w:netrw_longlist == 1
2123 " use long list
2124" call Decho("use long list")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002125 let g:netrw_list_cmd = g:netrw_list_cmd." -l"
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002126
2127 else
2128 " give wide list
2129" call Decho("use wide list")
2130 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
Bram Moolenaar8299df92004-07-10 09:47:34 +00002131 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002132 setlocal ma
Bram Moolenaar572cb562005-08-05 21:35:02 +00002133
2134 " clear buffer - this will cause NetBrowse/LocalBrowse to do a refresh
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002135 %d
Bram Moolenaar8299df92004-07-10 09:47:34 +00002136
2137 " refresh the listing
2138 if a:mode == 0
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002139 silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),"./"))
Bram Moolenaar8299df92004-07-10 09:47:34 +00002140 else
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002141 silent call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,"./"))
Bram Moolenaar8299df92004-07-10 09:47:34 +00002142 endif
2143
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002144 " keep cursor on the filename
2145 silent keepjumps $
2146 if fname =~ '/$'
2147 silent call search('\%(^\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bW')
2148 else
2149 silent call search('\%(^\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bW')
2150 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002151
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002152" call Dret("NetLongList : w:netrw_longlist=".w:netrw_longlist)
2153endfun
2154
2155" ---------------------------------------------------------------------
2156" NetrwWideListing: {{{2
2157fun! s:NetrwWideListing()
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002158
2159 if w:netrw_longlist == 2
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00002160" call Dfunc("NetrwWideListing() w:netrw_longlist=".w:netrw_longlist)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002161 " look for longest filename (cpf=characters per filename)
2162 " cpf: characters per file
2163 " fpl: files per line
2164 " fpc: files per column
2165 set ma
2166 let b:netrw_cpf= 0
2167 if line("$") >= w:netrw_bannercnt
2168 exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
Bram Moolenaar57657d82006-04-21 22:12:41 +00002169 else
2170" call Dret("NetrwWideListing")
2171 return
2172 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002173" call Decho("max file strlen+1=".b:netrw_cpf)
2174 let b:netrw_cpf= b:netrw_cpf + 1
2175
2176 " determine qty files per line (fpl)
2177 let w:netrw_fpl= winwidth(0)/b:netrw_cpf
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002178 if w:netrw_fpl <= 0
2179 let w:netrw_fpl= 1
2180 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002181" call Decho("fpl= ".winwidth(0)."/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
2182
2183 " make wide display
Bram Moolenaar57657d82006-04-21 22:12:41 +00002184 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^.*$/\=printf("%-'.b:netrw_cpf.'s",escape(submatch(0),"\\"))/'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002185 let fpc = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
2186 let newcolstart = w:netrw_bannercnt + fpc
2187 let newcolend = newcolstart + fpc - 1
2188" call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]")
2189 while line("$") >= newcolstart
2190 if newcolend > line("$") | let newcolend= line("$") | endif
2191 let newcolqty= newcolend - newcolstart
2192 exe newcolstart
2193 if newcolqty == 0
2194 exe "silent keepjumps norm! 0\<c-v>$hx".w:netrw_bannercnt."G$p"
2195 else
2196 exe "silent keepjumps norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p'
2197 endif
2198 exe "silent keepjumps ".newcolstart.','.newcolend.'d'
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002199 exe 'silent keepjumps '.w:netrw_bannercnt
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002200 endwhile
2201 exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002202 setlocal noma nomod
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00002203" call Dret("NetrwWideListing")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002204 endif
2205
Bram Moolenaar8299df92004-07-10 09:47:34 +00002206endfun
2207
2208" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00002209" NetSaveWordPosn: used by the "s" command in both remote and local {{{2
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002210" browsing. Along with NetRestoreWordPosn(), it keeps the cursor on
2211" the same word even though the sorting has changed its order of appearance.
2212fun! s:NetSaveWordPosn()
2213" call Dfunc("NetSaveWordPosn()")
2214 let s:netrw_saveword= '^'.escape(getline("."),s:netrw_cd_escape).'$'
2215" call Dret("NetSaveWordPosn : saveword<".s:netrw_saveword.">")
2216endfun
2217
2218" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00002219" NetRestoreWordPosn: used by the "s" command; see NetSaveWordPosn() above {{{2
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002220fun! s:NetRestoreWordPosn()
2221" call Dfunc("NetRestoreWordPosn()")
2222 silent! call search(s:netrw_saveword,'w')
2223" call Dret("NetRestoreWordPosn")
2224endfun
2225
2226" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00002227" NetMakeDir: this function makes a directory (both local and remote) {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002228fun! s:NetMakeDir(usrhost)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002229" call Dfunc("NetMakeDir(usrhost<".a:usrhost.">)")
2230
2231 " get name of new directory from user. A bare <CR> will skip.
2232 " if its currently a directory, also request will be skipped, but with
2233 " a message.
2234 call inputsave()
2235 let newdirname= input("Please give directory name: ")
2236 call inputrestore()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002237" call Decho("newdirname<".newdirname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002238
2239 if newdirname == ""
2240" call Dret("NetMakeDir : user aborted with bare <cr>")
2241 return
2242 endif
2243
2244 if a:usrhost == ""
2245
2246 " Local mkdir:
2247 " sanity checks
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002248 let fullnewdir= b:netrw_curdir.'/'.newdirname
2249" call Decho("fullnewdir<".fullnewdir.">")
2250 if isdirectory(fullnewdir)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002251 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002252 echohl WarningMsg | echo "***netrw*** <".newdirname."> is already a directory!" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002253 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002254 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002255" call Dret("NetMakeDir : directory<".newdirname."> exists previously")
2256 return
2257 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002258 if filereadable(fullnewdir)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002259 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002260 echohl WarningMsg | echo "***netrw*** <".newdirname."> is already a file!" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002261 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002262 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002263" call Dret("NetMakeDir : file<".newdirname."> exists previously")
2264 return
2265 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002266
2267 " requested new local directory is neither a pre-existing file or
2268 " directory, so make it!
2269 if exists("*mkdir")
2270 call mkdir(fullnewdir,"p")
2271 else
2272 let netrw_origdir= s:NetGetcwd(1)
Bram Moolenaar57657d82006-04-21 22:12:41 +00002273 exe 'keepjumps cd '.b:netrw_curdir
2274" call Decho("netrw_origdir<".netrw_origdir.">: cd b:netrw_curdir<".b:netrw_curdir.">")
Bram Moolenaar83bab712005-08-01 21:58:57 +00002275" call Decho("exe silent! !".g:netrw_local_mkdir.' "'.newdirname.'"')
2276 exe "silent! !".g:netrw_local_mkdir.' "'.newdirname.'"'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002277 if !g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
Bram Moolenaar57657d82006-04-21 22:12:41 +00002278 if !g:netrw_keepdir
2279 exe 'keepjumps cd '.netrw_origdir
2280" call Decho("netrw_keepdir=".g:netrw_keepdir.": cd ".netrw_origdir)
2281 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002282 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002283
Bram Moolenaar8299df92004-07-10 09:47:34 +00002284 if v:shell_error == 0
2285 " refresh listing
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002286" call Decho("refresh listing")
2287 let linenum= line(".")
2288 norm! H0
2289 let hline = line(".")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002290 set ma|norm! 2D
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002291 call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,'./'))
2292 exe "norm! ".hline."G0z\<CR>"
2293 exe linenum
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002294 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002295 echohl Error | echo "***netrw*** unable to make directory<".newdirname.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002296 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +00002297 endif
2298 redraw!
2299
2300 else
2301 " Remote mkdir:
2302 let mkdircmd = substitute(g:netrw_mkdir_cmd,'\<HOSTNAME\>',a:usrhost,'')
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002303 let newdirname= "'".'"'.substitute(expand("%"),'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname.'"'."'"
Bram Moolenaar8299df92004-07-10 09:47:34 +00002304" call Decho("exe silent! !".mkdircmd." ".newdirname)
2305 exe "silent! !".mkdircmd." ".newdirname
2306 if v:shell_error == 0
2307 " refresh listing
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002308 let linenum= line(".")
2309 norm! H0
2310 let hline = line(".")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002311 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002312 exe "norm! ".hline."G0z\<CR>"
2313 exe linenum
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002314 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002315 echohl Error | echo "***netrw*** unable to make directory<".newdirname.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002316 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +00002317 endif
2318 redraw!
2319 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002320
Bram Moolenaar8299df92004-07-10 09:47:34 +00002321" call Dret("NetMakeDir")
2322endfun
2323
2324" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00002325" NetBookmarkDir: {{{2
Bram Moolenaar572cb562005-08-05 21:35:02 +00002326" 0: (user: <b>) bookmark current directory
2327" 1: (user: <B>) change to the bookmarked directory
2328" 2: (user: <q>) list bookmarks
2329" 3: (LocalBrowse) record current directory history
2330" 4: (user: <u>) go up (previous) bookmark
2331" 5: (user: <U>) go down (next) bookmark
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002332fun! s:NetBookmarkDir(chg,curdir)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002333" call Dfunc("NetBookmarkDir(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count)
Bram Moolenaar488c6512005-08-11 20:09:58 +00002334 if exists("w:netrw_bannercnt") && line(".") <= w:netrw_bannercnt
2335 " looks like a "b" was pressed while in the banner region
2336 if line("$") > w:netrw_bannercnt
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002337 exe 'silent keepjumps '.w:netrw_bannercnt
Bram Moolenaar488c6512005-08-11 20:09:58 +00002338 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002339 if &ch > 1
2340 " "clear" the message
2341 echo ""
2342 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002343" call Dret("NetBookmarkDir - ignoring")
2344 return
2345 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002346
2347 if a:chg == 0
2348 " bookmark the current directory
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00002349 let g:NETRW_BOOKMARKDIR_{v:count}= a:curdir
2350 if !exists("g:NETRW_BOOKMARKMAX")
2351 let g:NETRW_BOOKMARKMAX= v:count
2352 elseif v:count > g:NETRW_BOOKMARKMAX
2353 let g:NETRW_BOOKMARKMAX= v:count
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002354 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002355 echo "bookmarked the current directory"
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002356
2357 elseif a:chg == 1
2358 " change to the bookmarked directory
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00002359 if exists("g:NETRW_BOOKMARKDIR_{v:count}")
2360 exe "e ".g:NETRW_BOOKMARKDIR_{v:count}
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002361 else
2362 echomsg "Sorry, bookmark#".v:count." doesn't exist!"
2363 endif
2364
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002365 elseif a:chg == 2
Bram Moolenaar572cb562005-08-05 21:35:02 +00002366 " list user's bookmarks
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002367 if exists("g:NETRW_BOOKMARKMAX")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002368" call Decho("list bookmarks [0,".g:NETRW_BOOKMARKMAX."]")
2369 let cnt= 0
2370 while cnt <= g:NETRW_BOOKMARKMAX
2371 if exists("g:NETRW_BOOKMARKDIR_{cnt}")
2372" call Decho("Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt})
2373 echo "Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt}
2374 endif
2375 let cnt= cnt + 1
2376 endwhile
2377 endif
2378
2379 " list directory history
2380 let cnt = g:NETRW_DIRHIST_CNT
2381 let first = 1
2382 let histcnt = 0
2383 while ( first || cnt != g:NETRW_DIRHIST_CNT )
2384" call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:NETRW_DIRHIST_CNT)
2385 let histcnt= histcnt + 1
2386 if exists("g:NETRW_DIRHIST_{cnt}")
2387" call Decho("Netrw History#".histcnt.": ".g:NETRW_DIRHIST_{cnt})
2388 echo "Netrw History#".histcnt.": ".g:NETRW_DIRHIST_{cnt}
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002389 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002390 let first = 0
2391 let cnt = ( cnt - 1 ) % g:netrw_dirhistmax
2392 if cnt < 0
2393 let cnt= cnt + g:netrw_dirhistmax
2394 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002395 endwhile
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002396
2397 elseif a:chg == 3
Bram Moolenaar572cb562005-08-05 21:35:02 +00002398 " saves most recently visited directories (when they differ)
2399 if !exists("g:NETRW_DIRHIST_0") || g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT} != a:curdir
2400 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
2401 let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= substitute(a:curdir,'[/\\]$','','e')
2402" call Decho("save dirhist#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
2403 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002404
2405 elseif a:chg == 4
2406 " u: change to the previous directory stored on the history list
2407 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
2408 if g:NETRW_DIRHIST_CNT < 0
2409 let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
2410 endif
2411 if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
2412" call Decho("changedir u#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
2413 exe "e ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
2414 else
2415 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
2416 echo "Sorry, no predecessor directory exists yet"
2417 endif
2418
2419 elseif a:chg == 5
2420 " U: change to the subsequent directory stored on the history list
2421 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
2422 if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
2423" call Decho("changedir U#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
2424 exe "e ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
2425 else
2426 let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
2427 if g:NETRW_DIRHIST_CNT < 0
2428 let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
2429 endif
2430 echo "Sorry, no successor directory exists yet"
2431 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002432 endif
2433" call Dret("NetBookmarkDir")
2434endfun
2435
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002436" ---------------------------------------------------------------------
2437" NetObtain: obtain file under cursor (for remote browsing support) {{{2
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002438fun! netrw#NetObtain(...)
2439" call Dfunc("NetObtain() a:0=".a:0)
2440
2441 if a:0==0
2442 " no arguments -- use word under cursor
2443 let fname= expand("<cWORD>")
2444" call Decho("no arguments, use <".fname.">")
2445 elseif a:0 > 1
2446 " more than one argument, recurse with each argument separately
2447" call Decho("more than 1 argument, use recursion")
2448 let i=1
2449 while i <= a:0
2450 call netrw#NetObtain(a:{i})
2451 let i=i+1
2452 endwhile
2453 return
2454 else
2455 " one argument provided
2456 let fname = a:1
2457 let keep_netrw_choice = exists("b:netrw_choice")? b:netrw_choice : ""
2458 let keep_netrw_fname = exists("b:netrw_fname")? b:netrw_fname : ""
2459 let keep_netrw_wmethod = exists("w:netrw_method")? w:netrw_method : ""
2460 call s:NetMethod(fname)
2461 let w:netrw_method= b:netrw_method
2462 let fname = b:netrw_fname
2463" call Decho("g:netrw_scp_cmd<".g:netrw_scp_cmd.">")
2464" call Decho("g:netrw_machine<".g:netrw_machine.">")
2465" call Decho("fname<".fname.">")
2466 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002467
2468 " NetrwStatusLine support - for obtaining support
2469 call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.fname)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002470
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002471 if exists("w:netrw_method") && w:netrw_method =~ '[235]'
Bram Moolenaard68071d2006-05-02 22:08:30 +00002472" call Decho("method=".w:netrw_method)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002473 if executable("ftp")
Bram Moolenaard68071d2006-05-02 22:08:30 +00002474" call Decho("ftp is executable, method=".w:netrw_method)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002475 let curdir = expand("%")
2476 let path = substitute(curdir,'ftp://[^/]\+/','','e')
2477 let curline= line(".")
2478 let endline= line("$")+1
2479 set ma
2480 keepjumps $
Bram Moolenaard68071d2006-05-02 22:08:30 +00002481" call Decho("getcwd<".getcwd().">")
2482" call Decho("curdir<".curdir.">")
2483" call Decho("path<".path.">")
2484" call Decho("curline=".curline)
2485" call Decho("endline=".endline)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002486
2487 ".........................................
2488 if w:netrw_method == 2
2489 " ftp + <.netrc>: Method #2
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002490 setlocal ff=unix
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002491 if path != ""
2492 put ='cd '.path
2493" call Decho("ftp: cd ".path)
2494 endif
2495 put ='get '.fname
2496" call Decho("ftp: get ".fname)
Bram Moolenaard68071d2006-05-02 22:08:30 +00002497 put ='quit'
2498" call Decho("ftp: quit")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002499 if exists("g:netrw_port") && g:netrw_port != ""
2500" call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
2501 exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
2502 else
2503" call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
2504 exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
2505 endif
2506
2507 ".........................................
2508 elseif w:netrw_method == 3
2509 " ftp + machine,id,passwd,filename: Method #3
2510 setlocal ff=unix
2511 if exists("g:netrw_port") && g:netrw_port != ""
2512 put ='open '.g:netrw_machine.' '.g:netrw_port
2513" call Decho('ftp: open '.g:netrw_machine.' '.g:netrw_port)
2514 else
2515 put ='open '.g:netrw_machine
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002516" call Decho('ftp: open '.g:netrw_machine)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002517 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002518
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002519 if exists("g:netrw_ftp") && g:netrw_ftp == 1
2520 put =g:netrw_uid
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002521 put ='\"'.g:netrw_passwd.'\"'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002522" call Decho('ftp: g:netrw_uid')
2523" call Decho('ftp: g:netrw_passwd')
2524 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002525 put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002526" call Decho('user '.g:netrw_uid.' '.g:netrw_passwd)
2527 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002528
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002529 if a:path != ""
2530 put ='cd '.a:path
2531" call Decho('cd '.a:path)
2532 endif
2533 exe "put ='".a:cmd."'"
2534" call Decho("ftp: ".a:cmd)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002535
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002536 " perform ftp:
2537 " -i : turns off interactive prompting from ftp
2538 " -n unix : DON'T use <.netrc>, even though it exists
2539 " -n win32: quit being obnoxious about password
2540" call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
2541 exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i -n"
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002542
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002543 ".........................................
2544 else
2545 echo "***warning*** unable to comply with your request<" . choice . ">"
2546 endif
2547 " restore
2548 exe "silent! ".endline.",$d"
2549 exe "keepjumps ".curline
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002550 setlocal noma nomod
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002551 else
Bram Moolenaard68071d2006-05-02 22:08:30 +00002552" call Decho("ftp not executable")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002553 if !exists("g:netrw_quiet")
2554 echohl Error | echo "***netrw*** this system doesn't support ftp" | echohl None
2555 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2556 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002557 " restore status line
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002558 let &stl = s:netrw_users_stl
2559 let &laststatus = s:netrw_users_ls
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002560 " restore NetMethod
2561 if exists("keep_netrw_method")
2562 call s:NetMethod(keep_netrw_choice)
2563 let w:netrw_method = keep_netrw_wmethod
2564 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002565" call Dret("NetObtain")
2566 return
2567 endif
2568
2569 ".........................................
2570 else
2571 " scp: Method#4
Bram Moolenaard68071d2006-05-02 22:08:30 +00002572" call Decho("using scp")
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002573 let curdir = expand("%")
2574 let path = substitute(curdir,'scp://[^/]\+/','','e')
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002575" call Decho("path<".path.">")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002576 if exists("g:netrw_port") && g:netrw_port != ""
2577 let useport= " -P ".g:netrw_port
2578 else
2579 let useport= ""
2580 endif
2581 if g:netrw_cygwin == 1
2582 let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002583" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." .")
2584 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." ."
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002585 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002586" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." .")
2587 exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." ."
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002588 endif
2589 endif
2590
2591 " restore status line
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002592 let &stl = s:netrw_users_stl
2593 let &laststatus = s:netrw_users_ls
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002594 redraw!
2595
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002596 " restore NetMethod
2597 if exists("keep_netrw_method")
2598 call s:NetMethod(keep_netrw_choice)
2599 let w:netrw_method = keep_netrw_wmethod
2600 endif
2601
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002602" call Dret("NetObtain")
2603endfun
2604
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002605" ---------------------------------------------------------------------
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00002606" NetPrevWinOpen: open file/directory in previous window. {{{2
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002607" If there's only one window, then the window will first be split.
2608fun! s:NetPrevWinOpen(islocal)
2609" call Dfunc("NetPrevWinOpen(islocal=".a:islocal.")")
2610
2611 " get last window number and the word currently under the cursor
2612 let lastwinnr = winnr("$")
2613 let curword = s:NetGetWord()
2614 let curdir = b:netrw_curdir
2615" call Decho("lastwinnr=".lastwinnr." curword<".curword.">")
2616
2617 let didsplit = 0
2618 if lastwinnr == 1
2619 " if only one window, open a new one first
2620" call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")")
2621 exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
2622 let didsplit = 1
2623
2624 else
2625 wincmd p
2626 " if the previous window's buffer has been changed (is modified),
2627 " and it doesn't appear in any other extant window, then ask the
2628 " user if s/he wants to abandon modifications therein.
2629 let bnr = winbufnr(0)
2630 let bnrcnt = 0
2631 if &mod
2632 windo if winbufnr(0) == bnr | let bnrcnt=bnrcnt+1 | endif
2633" call Decho("bnr=".bnr." bnrcnt=".bnrcnt)
2634 if bnrcnt == 1
2635 let bufname= bufname(winbufnr(winnr()))
2636 let choice= confirm("Save modified file<".bufname.">?","&Yes\n&No\n&Cancel")
2637
2638 if choice == 1
2639 " Yes -- write file & then browse
2640 let v:errmsg= ""
2641 silent w
2642 if v:errmsg != ""
2643 echohl Error | echo "***netrw*** "unable to write <".bufname.">!" | echohl None
2644 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2645 if didsplit
2646 q
2647 else
2648 wincmd p
2649 endif
2650" call Dret("NetPrevWinOpen : unable to write <".bufname.">")
2651 return
2652 endif
2653
2654 elseif choice == 2
2655 " No -- don't worry about changed file, just browse anyway
2656 set nomod
2657 echohl WarningMsg | echo "***netrw*** ".bufname." changes abandoned" | echohl None
2658
2659 else
2660 " Cancel -- don't do this
2661 if didsplit
2662 q
2663 else
2664 wincmd p
2665 endif
2666" call Dret("NetPrevWinOpen : cancelled")
2667 return
2668 endif
2669 endif
2670 endif
2671 endif
2672
2673 if a:islocal
2674 call s:LocalBrowse(s:LocalBrowseChgDir(curdir,curword))
2675 else
2676 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),curword))
2677 endif
2678" call Dret("NetPrevWinOpen")
2679endfun
2680
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002681" ---------------------------------------------------------------------
2682" NetMenu: generates the menu for gvim and netrw {{{2
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00002683fun! s:NetMenu(domenu)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002684
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00002685 if !exists("g:NetrwMenuPriority")
2686 let g:NetrwMenuPriority= 80
2687 endif
2688
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002689 if has("menu") && has("gui_running") && &go =~ 'm'
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00002690" call Dfunc("NetMenu(domenu=".a:domenu.")")
2691 if !exists("s:netrw_menu_enabled") && a:domenu
2692" call Decho("initialize menu")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002693 let s:netrw_menu_enabled= 1
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00002694 if !exists("g:NetrwTopLvlMenu")
2695 let g:NetrwTopLvlMenu= "Netrw."
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002696 endif
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00002697 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Help<tab><F1> <F1>'
2698 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x x'
2699 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Bookmark\ Current\ Directory<tab>b Nb'
2700 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>- -'
2701 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Goto\ Bookmarked\ Directory<tab>B NB'
2702 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Change\ To\ Recently\ Used\ Directory<tab>u u'
2703 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Change\ To\ Subsequently\ Used\ Directory<tab>U U'
2704 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D D'
2705 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Edit\ File\ Hiding\ List<tab>'."<ctrl-h> \<c-h>"
2706 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Edit\ File/Directory<tab><cr> '."\<cr>"
2707 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Window<tab>o o'
2708 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Vertical\ Window<tab>v v'
2709 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'List\ Bookmarks\ and\ History<tab>q q'
2710 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Listing\ Style\ (thin-long-wide)<tab>i i'
2711 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d d'
2712 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Normal-Hide-Show<tab>a a'
2713 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O O'
2714 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Preview\ File/Directory<tab>p p'
2715 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Previous\ Window\ Browser<tab>P P'
2716 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Refresh\ Listing<tab>'."<ctrl-l> \<c-l>"
2717 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R R'
2718 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Reverse\ Sorting\ Order<tab>'."r r"
2719 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Select\ Sorting\ Style<tab>s s'
2720 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Sorting\ Sequence\ Edit<tab>S S'
2721 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c c'
2722 exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Settings/Options<tab>:NetrwSettings '.":NetrwSettings\<cr>"
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00002723 elseif !a:domenu
2724 let s:netrwcnt = 0
2725 let curwin = winnr()
2726 windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
2727 exe curwin."wincmd w"
2728
2729 if s:netrwcnt <= 1
2730" call Decho("clear menus")
2731 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Help'
2732 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer'
2733 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmark\ Current\ Directory'
2734 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Go\ Up\ Directory'
2735 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Goto\ Bookmarked\ Directory'
2736 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Change\ To\ Recently\ Used\ Directory'
2737 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Change\ To\ Subsequently\ Used\ Directory'
2738 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Delete\ File/Directory'
2739 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File/Directory'
2740 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Window'
2741 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Vertical\ Window'
2742 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File\ Hiding\ List'
2743 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File'
2744 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Enter\ File/Directory'
2745 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Enter\ File/Directory\ (vertical\ split)'
2746 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'List\ Bookmarks\ and\ History'
2747 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Listing\ Style\ (thin-long-wide)'
2748 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Make\ Subdirectory'
2749 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Normal-Hide-Show'
2750 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Obtain\ File'
2751 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Preview\ File/Directory'
2752 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Previous\ Window\ Browser'
2753 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Refresh\ Listing'
2754 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Rename\ File/Directory'
2755 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Reverse\ Sorting\ Order'
2756 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Select\ Sorting\ Style'
2757 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Sorting\ Sequence\ Edit'
2758 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Set\ Current\ Directory'
2759 exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Settings/Options'
2760 unlet s:netrw_menu_enabled
2761 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002762 endif
2763" call Dret("NetMenu")
2764 endif
2765
2766endfun
2767
Bram Moolenaar83bab712005-08-01 21:58:57 +00002768" ==========================================
2769" Local Directory Browsing Support: {{{1
2770" ==========================================
Bram Moolenaar8299df92004-07-10 09:47:34 +00002771
2772" ---------------------------------------------------------------------
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002773" LocalBrowse: {{{2
2774fun! s:LocalBrowse(dirname)
2775 " unfortunate interaction -- debugging calls can't be used here;
2776 " the BufEnter event causes triggering when attempts to write to
2777 " the DBG buffer are made.
2778 if isdirectory(a:dirname)
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002779 silent! call netrw#DirBrowse(a:dirname)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002780 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002781 " not a directory, ignore it
2782endfun
Bram Moolenaar8299df92004-07-10 09:47:34 +00002783
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002784" ---------------------------------------------------------------------
2785" DirBrowse: supports local file/directory browsing {{{2
2786fun! netrw#DirBrowse(dirname)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002787 if !exists("w:netrw_longlist")|let w:netrw_longlist= g:netrw_longlist|endif
Bram Moolenaar5a305422006-04-28 22:38:25 +00002788" call Dfunc("DirBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr()." sortby=".g:netrw_sort_by." hide=".g:netrw_hide)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002789" call Dredir("ls!")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002790
Bram Moolenaar488c6512005-08-11 20:09:58 +00002791 if exists("s:netrw_skipbrowse")
2792 unlet s:netrw_skipbrowse
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002793" call Dret("DirBrowse")
Bram Moolenaar488c6512005-08-11 20:09:58 +00002794 return
2795 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002796 if &fo =~ '[ta]'
2797 set fo-=t
2798 set fo-=a
2799 echohl Warning
2800 echo '***warning*** directory browsing and formatoptions "ta" are incompatible'
2801 echohl None
2802 endif
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002803
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002804 call s:NetOptionSave()
Bram Moolenaard68071d2006-05-02 22:08:30 +00002805 if exists("w:acdkeep") && w:acdkeep
Bram Moolenaar57657d82006-04-21 22:12:41 +00002806 exe 'cd '.escape(a:dirname,s:netrw_cd_escape)
2807" call Decho("cd ".escape(a:dirname,s:netrw_cd_escape))
2808" call Decho("getcwd<".getcwd().">")
2809 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00002810
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002811 if v:version < 603
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002812 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002813 echohl Error | echo "***netrw*** vim version<".v:version."> too old for browsing with netrw" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002814 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00002815 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002816 call s:NetOptionRestore()
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002817" call Dret("DirBrowse : vim version<".v:version."> too old")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002818 return
2819 endif
2820
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00002821 " use buffer-oriented WinVars if buffer ones exist but window ones don't
2822 call s:UseBufWinVars()
2823
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002824 " set up menus
2825 let b:netrw_browser_active= 1
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00002826 call s:NetMenu(1)
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002827
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002828 " find buffer number of buffer named precisely the same as a:dirname
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002829 let bufnum= bufnr(escape(a:dirname,'\'))
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002830" call Decho("findbuf: bufnum=".bufnum)
2831 if bufnum > 0 && bufname(bufnum) != a:dirname
2832 let ibuf= 1
2833 let buflast= bufnr("$")
2834 while bufname(ibuf) !~ '^'.a:dirname.'\=$' && ibuf <= buflast
2835" call Decho("findbuf: ibuf=".ibuf. " bufname<".bufname(ibuf)."> dirname<".a:dirname.">")
2836 let ibuf= ibuf + 1
2837 endwhile
2838 if ibuf > buflast
2839 let bufnum= -1
2840 else
2841 let bufnum= ibuf
2842 endif
2843" call Decho("findbuf: bufnum=".bufnum." (final)")
2844 endif
2845
2846 " get cleared buffer
Bram Moolenaar57657d82006-04-21 22:12:41 +00002847 mark '
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002848 if bufnum < 0 || !bufexists(bufnum)
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002849 keepjumps keepalt enew!
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002850" call Decho("enew buffer")
2851 else
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002852 exe "keepalt b ".bufnum
Bram Moolenaar572cb562005-08-05 21:35:02 +00002853 if exists("s:last_sort_by") && g:netrw_sort_by == s:last_sort_by
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00002854 if getline(2) =~ '^" Netrw Directory Listing '
Bram Moolenaar572cb562005-08-05 21:35:02 +00002855 if !g:netrw_keepdir
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002856 exe 'cd '.escape(b:netrw_curdir,s:netrw_cd_escape)
Bram Moolenaar57657d82006-04-21 22:12:41 +00002857" call Decho("netrw_keepdir=".g:netrw_keepdir.": cd ".escape(b:netrw_curdir,s:netrw_cd_escape))
Bram Moolenaar572cb562005-08-05 21:35:02 +00002858 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002859 call s:NetOptionRestore()
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002860" call Dret("DirBrowse : reusing buffer#".bufnum."<".a:dirname.">")
Bram Moolenaar572cb562005-08-05 21:35:02 +00002861 return
2862 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002863 endif
2864 endif
Bram Moolenaar572cb562005-08-05 21:35:02 +00002865 let s:last_sort_by= g:netrw_sort_by
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002866
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +00002867 " set up ShellCmdPost handling. Append current buffer to browselist
Bram Moolenaar7d47b6e2006-03-15 22:59:18 +00002868 call s:LocalFastBrowser()
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +00002869
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002870 " get the new directory name
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002871 if has("win32") || has("win95") || has("win64") || has("win16")
2872 let b:netrw_curdir= substitute(a:dirname,'\\','/','ge')
2873 else
2874 let b:netrw_curdir= a:dirname
2875 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002876 if b:netrw_curdir =~ '[/\\]$'
2877 let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
2878 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002879 if b:netrw_curdir == ''
2880 " under unix, when the root directory is encountered, the result
2881 " from the preceding substitute is an empty string.
2882 let b:netrw_curdir= '/'
2883 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00002884" call Decho("b:netrw_curdir<".b:netrw_curdir.">")
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002885
Bram Moolenaar83bab712005-08-01 21:58:57 +00002886 " make netrw's idea of the current directory vim's if the user wishes
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002887 if !g:netrw_keepdir
Bram Moolenaar57657d82006-04-21 22:12:41 +00002888" call Decho("netrw_keepdir=".g:netrw_keepdir.": cd ".escape(b:netrw_curdir,s:netrw_cd_escape))
Bram Moolenaar488c6512005-08-11 20:09:58 +00002889 try
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002890 exe 'cd '.escape(b:netrw_curdir,s:netrw_cd_escape)
Bram Moolenaar488c6512005-08-11 20:09:58 +00002891 catch /^Vim\%((\a\+)\)\=:E472/
2892 echohl Error | echo "***netrw*** unable to change directory to <".b:netrw_curdir."> (permissions?)" | echohl None
2893 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2894 if exists("w:netrw_prvdir")
2895 let b:netrw_curdir= w:netrw_prvdir
2896 else
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002897 call s:NetOptionRestore()
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00002898" call Dret("DirBrowse : reusing buffer#".bufnum."<".a:dirname.">")
Bram Moolenaar488c6512005-08-11 20:09:58 +00002899 return
2900 endif
2901 endtry
Bram Moolenaar83bab712005-08-01 21:58:57 +00002902 endif
2903
2904 " change the name of the buffer to reflect the b:netrw_curdir
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002905 " Hmm. When another vim is open to the same directory, I get
2906 " a "Press ENTER" ... ok, setting "noswf" avoids it.
2907" call Decho('exe silent! file '.escape(b:netrw_curdir,s:netrw_cd_escape))
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00002908 exe 'silent! file '.escape(b:netrw_curdir,s:netrw_cd_escape)
Bram Moolenaar8299df92004-07-10 09:47:34 +00002909
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00002910 " make this buffer not-a-file, modifiable, not line-numbered, etc
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002911 setlocal bt=nofile nobl ma nonu noswf nowrap
2912 if g:netrw_fastbrowse >= 2
2913 setlocal bh=hide
Bram Moolenaarc01140a2006-03-24 22:21:52 +00002914 else
2915 setlocal bh=delete
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00002916 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002917 keepalt silent! %d
Bram Moolenaar8299df92004-07-10 09:47:34 +00002918
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002919 " ---------------------------
Bram Moolenaar8299df92004-07-10 09:47:34 +00002920 " Perform Directory Listing:
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002921 if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
2922 echo "(netrw) Processing your browsing request..."
2923 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00002924
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002925 " save current directory on directory history list
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002926 call s:NetBookmarkDir(3,b:netrw_curdir)
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002927
Bram Moolenaar8299df92004-07-10 09:47:34 +00002928 " set up all the maps
Bram Moolenaar269ec652004-07-29 08:43:53 +00002929" call Decho("Setting up local browser maps")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002930 nnoremap <buffer> <silent> <cr> :call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002931 nnoremap <buffer> <silent> <c-l> :call <SID>NetRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'),1)<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002932 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'../'))<cr>
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002933 nnoremap <buffer> <silent> a :let g:netrw_hide=(g:netrw_hide+1)%3<bar>exe "norm! 0"<bar>call <SID>NetRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'),1)<cr>
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002934 if w:netrw_longlist != 2
2935 nnoremap <buffer> <silent> b :<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
2936 nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
2937 endif
2938 nnoremap <buffer> <silent> Nb :<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
2939 nnoremap <buffer> <silent> NB :<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002940 nnoremap <buffer> <silent> c :exe "cd ".b:netrw_curdir<cr>
2941 nnoremap <buffer> <silent> d :call <SID>NetMakeDir("")<cr>
2942 nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(1)<cr>
Bram Moolenaar8299df92004-07-10 09:47:34 +00002943 nnoremap <buffer> <silent> i :call <SID>NetLongList(1)<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00002944 nnoremap <buffer> <silent> o :call <SID>NetSplit(2)<cr>
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002945 nnoremap <buffer> <silent> O :call <SID>LocalObtain()<cr>
2946 nnoremap <buffer> <silent> p :call <SID>LocalPreview(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),1))<cr>
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002947 nnoremap <buffer> <silent> P :call <SID>NetPrevWinOpen(1)<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002948 nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<cr>
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002949 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'),1)<cr>
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002950 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>
2951 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(1)<cr>
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002952 nnoremap <buffer> <silent> u :<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
2953 nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
Bram Moolenaar488c6512005-08-11 20:09:58 +00002954 nnoremap <buffer> <silent> v :call <SID>NetSplit(3)<cr>
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00002955 nnoremap <buffer> <silent> x :call netrw#NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)"<cr>
Bram Moolenaar1afcace2005-11-25 19:54:28 +00002956 nnoremap <buffer> <silent> <2-leftmouse> :call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
Bram Moolenaar57657d82006-04-21 22:12:41 +00002957 if s:didstarstar || !mapcheck("<s-down>","n")
2958 nnoremap <buffer> <silent> <s-down> :Nexplore<cr>
2959 endif
2960 if s:didstarstar || !mapcheck("<s-up>","n")
2961 nnoremap <buffer> <silent> <s-up> :Pexplore<cr>
2962 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002963 exe 'nnoremap <buffer> <silent> <del> :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002964 exe 'vnoremap <buffer> <silent> <del> :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002965 exe 'nnoremap <buffer> <silent> D :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002966 exe 'vnoremap <buffer> <silent> D :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
Bram Moolenaar578b49e2005-09-10 19:22:57 +00002967 exe 'nnoremap <buffer> <silent> R :call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002968 exe 'vnoremap <buffer> <silent> R :call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
Bram Moolenaar269ec652004-07-29 08:43:53 +00002969 exe 'nnoremap <buffer> <silent> <Leader>m :call <SID>NetMakeDir("")<cr>'
Bram Moolenaar433f7c82006-03-21 21:29:36 +00002970 nnoremap <buffer> <F1> :he netrw-dir<cr>
Bram Moolenaar8299df92004-07-10 09:47:34 +00002971
2972 " Set up the banner
Bram Moolenaar269ec652004-07-29 08:43:53 +00002973" call Decho("set up banner")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002974 keepjumps put ='\" ============================================================================'
Bram Moolenaar8299df92004-07-10 09:47:34 +00002975 keepjumps 1d
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00002976 keepjumps put ='\" Netrw Directory Listing (netrw '.g:loaded_netrw.')'
Bram Moolenaar83bab712005-08-01 21:58:57 +00002977 keepjumps put ='\" '.b:netrw_curdir
Bram Moolenaar488c6512005-08-11 20:09:58 +00002978 let w:netrw_bannercnt= 3
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002979
2980 let sortby= g:netrw_sort_by
2981 if g:netrw_sort_direction =~ "^r"
2982 let sortby= sortby." reversed"
2983 endif
Bram Moolenaar269ec652004-07-29 08:43:53 +00002984
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002985 " Sorted by...
Bram Moolenaar8299df92004-07-10 09:47:34 +00002986 if g:netrw_sort_by =~ "^n"
Bram Moolenaar269ec652004-07-29 08:43:53 +00002987" call Decho("directories will be sorted by name")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002988 " sorted by name
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002989 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaar8299df92004-07-10 09:47:34 +00002990 keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence
Bram Moolenaar488c6512005-08-11 20:09:58 +00002991 let w:netrw_bannercnt= w:netrw_bannercnt + 2
Bram Moolenaar8299df92004-07-10 09:47:34 +00002992 else
Bram Moolenaar269ec652004-07-29 08:43:53 +00002993" call Decho("directories will be sorted by size or date")
Bram Moolenaar8299df92004-07-10 09:47:34 +00002994 " sorted by size or date
Bram Moolenaard4755bb2004-09-02 19:12:26 +00002995 keepjumps put ='\" Sorted by '.sortby
Bram Moolenaar488c6512005-08-11 20:09:58 +00002996 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaar8299df92004-07-10 09:47:34 +00002997 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00002998
2999 " Hiding... -or- Showing...
Bram Moolenaar269ec652004-07-29 08:43:53 +00003000 if g:netrw_list_hide != "" && g:netrw_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003001 if g:netrw_hide == 1
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003002 keepjumps put ='\" Hiding: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003003 else
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003004 keepjumps put ='\" Showing: '.g:netrw_list_hide
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003005 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003006 let w:netrw_bannercnt= w:netrw_bannercnt + 1
Bram Moolenaar8299df92004-07-10 09:47:34 +00003007 endif
Bram Moolenaar910f66f2006-04-05 20:41:53 +00003008 keepjumps put ='\" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003009 keepjumps put ='\" ============================================================================'
Bram Moolenaar488c6512005-08-11 20:09:58 +00003010 let w:netrw_bannercnt= w:netrw_bannercnt + 2
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003011
3012 " bannercnt should index the line just after the banner
Bram Moolenaar488c6512005-08-11 20:09:58 +00003013 let w:netrw_bannercnt= w:netrw_bannercnt + 1
3014" call Decho("bannercnt=".w:netrw_bannercnt)
Bram Moolenaar8299df92004-07-10 09:47:34 +00003015
3016 " generate the requested directory listing
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003017 call s:LocalBrowseList()
Bram Moolenaar8299df92004-07-10 09:47:34 +00003018
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003019 " set up syntax highlighting
3020 if has("syntax")
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00003021 setlocal ft=netrw
Bram Moolenaar572cb562005-08-05 21:35:02 +00003022 if !exists("g:syntax_on") || !g:syntax_on
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003023 setlocal ft=
3024 endif
3025 endif
3026
Bram Moolenaar8299df92004-07-10 09:47:34 +00003027 " manipulate the directory listing (hide, sort)
Bram Moolenaar488c6512005-08-11 20:09:58 +00003028 if line("$") >= w:netrw_bannercnt
Bram Moolenaar269ec652004-07-29 08:43:53 +00003029 if g:netrw_hide && g:netrw_list_hide != ""
3030 call s:NetrwListHide()
Bram Moolenaar8299df92004-07-10 09:47:34 +00003031 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003032 if line("$") >= w:netrw_bannercnt
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003033
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003034 if g:netrw_sort_by =~ "^n"
3035 call s:SetSort()
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003036
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003037 if w:netrw_bannercnt < line("$")
3038 if g:netrw_sort_direction =~ 'n'
3039 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
3040 else
3041 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
3042 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00003043 endif
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00003044 " remove priority pattern prefix
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003045 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003046
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003047 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003048 if w:netrw_bannercnt < line("$")
3049 if g:netrw_sort_direction =~ 'n'
3050 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
3051 else
3052 exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
3053 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00003054 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003055 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003056 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003057
Bram Moolenaar8299df92004-07-10 09:47:34 +00003058 endif
3059 endif
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003060
3061 call s:NetrwWideListing()
Bram Moolenaar488c6512005-08-11 20:09:58 +00003062 if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003063 " place cursor on the top-left corner of the file listing
3064 exe 'silent '.w:netrw_bannercnt
3065 norm! 0
Bram Moolenaar488c6512005-08-11 20:09:58 +00003066 endif
3067
3068 " record previous current directory
3069 let w:netrw_prvdir= b:netrw_curdir
Bram Moolenaar8299df92004-07-10 09:47:34 +00003070
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00003071 " save certain window-oriented variables into buffer-oriented variables
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003072 call s:SetBufWinVars()
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003073 call s:NetOptionRestore()
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003074 setlocal noma nomod nonu nobl nowrap
3075 if g:netrw_fastbrowse >= 2
3076 setlocal bh=hide
3077 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00003078
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003079" call Dret("DirBrowse : file<".expand("%:p")."> bufname<".bufname("%").">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00003080endfun
3081
3082" ---------------------------------------------------------------------
3083" LocalBrowseList: does the job of "ls" for local directories {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003084fun! s:LocalBrowseList()
Bram Moolenaar57657d82006-04-21 22:12:41 +00003085" call Dfunc("LocalBrowseList() b:netrw_curdir<".b:netrw_curdir."> sortby<".g:netrw_sort_by.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00003086
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003087 " get the list of files contained in the current directory
Bram Moolenaar83bab712005-08-01 21:58:57 +00003088 let dirname = escape(b:netrw_curdir,s:netrw_glob_escape)
3089 let dirnamelen = strlen(b:netrw_curdir)
3090 let filelist = glob(dirname."/*")
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00003091" call Decho("glob(dirname<".dirname."/.*>)=".filelist)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003092 if filelist != ""
3093 let filelist= filelist."\n"
3094 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00003095 let filelist= filelist.glob(dirname."/.*")
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00003096" call Decho("glob(dirname<".dirname."/.*>)=".glob(dirname.".*"))
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003097
3098 " if the directory name includes a "$", and possibly other characters,
3099 " the glob() doesn't include "." and ".." entries.
3100 if filelist !~ '[\\/]\.[\\/]\=\(\n\|$\)'
3101" call Decho("forcibly tacking on .")
3102 if filelist == ""
3103 let filelist= dirname."."
3104 else
Bram Moolenaar83bab712005-08-01 21:58:57 +00003105 let filelist= filelist."\n".b:netrw_curdir."."
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003106 endif
3107" call Decho("filelist<".filelist.">")
3108 endif
3109 if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
3110" call Decho("forcibly tacking on ..")
Bram Moolenaar83bab712005-08-01 21:58:57 +00003111 let filelist= filelist."\n".b:netrw_curdir.".."
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003112" call Decho("filelist<".filelist.">")
3113 endif
3114 let filelist= substitute(filelist,'\n\{2,}','\n','ge')
Bram Moolenaar57657d82006-04-21 22:12:41 +00003115 if (has("win32") || has("win95") || has("win64") || has("win16"))
3116 let filelist= substitute(filelist,'\','/','ge')
3117 else
3118 let filelist= substitute(filelist,'\','\\','ge')
3119 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003120
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003121" call Decho("dirname<".dirname.">")
3122" call Decho("dirnamelen<".dirnamelen.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00003123" call Decho("filelist<".filelist.">")
3124
3125 while filelist != ""
3126 if filelist =~ '\n'
Bram Moolenaar83bab712005-08-01 21:58:57 +00003127 let filename = substitute(filelist,'\n.*$','','e')
Bram Moolenaar8299df92004-07-10 09:47:34 +00003128 let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
3129 else
Bram Moolenaar83bab712005-08-01 21:58:57 +00003130 let filename = filelist
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00003131 let filelist = ""
Bram Moolenaar8299df92004-07-10 09:47:34 +00003132 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00003133 let pfile= filename
3134 if isdirectory(filename)
3135 let pfile= filename."/"
Bram Moolenaar8299df92004-07-10 09:47:34 +00003136 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003137 if pfile =~ '//$'
3138 let pfile= substitute(pfile,'//$','/','e')
3139 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00003140 let pfile= strpart(pfile,dirnamelen)
Bram Moolenaar572cb562005-08-05 21:35:02 +00003141 let pfile= substitute(pfile,'^/','','e')
Bram Moolenaar83bab712005-08-01 21:58:57 +00003142" call Decho(" ")
3143" call Decho("filename<".filename.">")
3144" call Decho("pfile <".pfile.">")
3145
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003146 if w:netrw_longlist == 1
Bram Moolenaar83bab712005-08-01 21:58:57 +00003147 let sz = getfsize(filename)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003148 let fsz = strpart(" ",1,15-strlen(sz)).sz
3149 let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
Bram Moolenaar83bab712005-08-01 21:58:57 +00003150" call Decho("sz=".sz." fsz=".fsz)
Bram Moolenaar8299df92004-07-10 09:47:34 +00003151 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003152
Bram Moolenaar8299df92004-07-10 09:47:34 +00003153 if g:netrw_sort_by =~ "^t"
3154 " sort by time (handles time up to 1 quintillion seconds, US)
Bram Moolenaar83bab712005-08-01 21:58:57 +00003155" call Decho("getftime(".filename.")=".getftime(filename))
3156 let t = getftime(filename)
Bram Moolenaar8299df92004-07-10 09:47:34 +00003157 let ft = strpart("000000000000000000",1,18-strlen(t)).t
Bram Moolenaar83bab712005-08-01 21:58:57 +00003158" call Decho("exe keepjumps put ='".ft.'/'.filename."'")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003159 let ftpfile= ft.'/'.pfile
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00003160 keepjumps silent! put=ftpfile
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003161
Bram Moolenaar8299df92004-07-10 09:47:34 +00003162 elseif g:netrw_sort_by =~ "^s"
3163 " sort by size (handles file sizes up to 1 quintillion bytes, US)
Bram Moolenaar83bab712005-08-01 21:58:57 +00003164" call Decho("getfsize(".filename.")=".getfsize(filename))
3165 let sz = getfsize(filename)
Bram Moolenaar8299df92004-07-10 09:47:34 +00003166 let fsz = strpart("000000000000000000",1,18-strlen(sz)).sz
Bram Moolenaar83bab712005-08-01 21:58:57 +00003167" call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003168 let fszpfile= fsz.'/'.pfile
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00003169 keepjumps silent! put =fszpfile
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003170
Bram Moolenaar8299df92004-07-10 09:47:34 +00003171 else
3172 " sort by name
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003173" call Decho("exe keepjumps put ='".pfile."'")
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00003174 keepjumps silent! put=pfile
Bram Moolenaar8299df92004-07-10 09:47:34 +00003175 endif
3176 endwhile
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003177
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00003178 " cleanup any windows mess at end-of-line
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003179 silent! keepjumps %s/\r$//e
Bram Moolenaar83bab712005-08-01 21:58:57 +00003180 setlocal ts=32
Bram Moolenaar8299df92004-07-10 09:47:34 +00003181
3182" call Dret("LocalBrowseList")
3183endfun
3184
3185" ---------------------------------------------------------------------
3186" LocalBrowseChgDir: constructs a new directory based on the current {{{2
3187" directory and a new directory name
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003188fun! s:LocalBrowseChgDir(dirname,newdir,...)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003189" call Dfunc("LocalBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">) a:0=".a:0)
Bram Moolenaar8299df92004-07-10 09:47:34 +00003190
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003191 let dirname= substitute(a:dirname,'\\','','ge')
Bram Moolenaar8299df92004-07-10 09:47:34 +00003192 let newdir = a:newdir
3193
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003194 if dirname !~ '[\/]$'
Bram Moolenaar8299df92004-07-10 09:47:34 +00003195 " apparently vim is "recognizing" that it is in the home directory and
3196 " is removing the "/". Bad idea, so I have to put it back.
3197 let dirname= dirname.'/'
3198" call Decho("adjusting dirname<".dirname.">")
3199 endif
3200
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003201 if newdir !~ '[\/]$'
Bram Moolenaar8299df92004-07-10 09:47:34 +00003202 " handling a file
3203 let dirname= dirname.newdir
3204" call Decho("handling a file: dirname<".dirname.">")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003205 " this lets NetBrowseX avoid the edit
3206 if a:0 < 1
Bram Moolenaar83bab712005-08-01 21:58:57 +00003207" call Decho("dirname<".dirname."> netrw_cd_escape<".s:netrw_cd_escape.">")
3208" call Decho("about to edit<".escape(dirname,s:netrw_cd_escape).">")
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00003209 if g:netrw_browse_split == 1
3210 new
3211 wincmd _
3212 elseif g:netrw_browse_split == 2
3213 rightb vert new
3214 wincmd |
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00003215 else
3216 " handling a file, didn't split, so possibly remove menu
3217 call s:NetMenu(0)
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00003218 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00003219 exe "e! ".escape(dirname,s:netrw_cd_escape)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003220 set ma nomod
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003221 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00003222
3223 elseif newdir == './'
3224 " refresh the directory list
3225" call Decho("refresh directory listing")
Bram Moolenaar8299df92004-07-10 09:47:34 +00003226
3227 elseif newdir == '../'
3228 " go up one directory
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003229 let dirname= substitute(dirname,'^\(.*/\)\([^/]\+[\/]$\)','\1','e')
Bram Moolenaar8299df92004-07-10 09:47:34 +00003230" call Decho("go up one dir: dirname<".dirname.">")
3231
3232 else
3233 " go down one directory
3234 let dirname= dirname.newdir
3235" call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
3236 endif
3237
3238" call Dret("LocalBrowseChgDir <".dirname.">")
3239 return dirname
3240endfun
3241
3242" ---------------------------------------------------------------------
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +00003243" LocalBrowseShellCmdRefresh: this function is called after a user has {{{2
3244" performed any shell command. The idea is to cause all local-browsing
3245" buffers to be refreshed after a user has executed some shell command,
3246" on the chance that s/he removed/created a file/directory with it.
3247fun! s:LocalBrowseShellCmdRefresh()
3248" call Dfunc("LocalBrowseShellCmdRefresh() browselist=".string(s:netrw_browselist))
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00003249 " GO through all buffers on netrw_browselist (ie. just local-netrw buffers):
3250 " | refresh any netrw window
3251 " | wipe out any non-displaying netrw buffer
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +00003252 let curwin = winnr()
3253 let ibl = 0
3254 for ibuf in s:netrw_browselist
3255 if bufwinnr(ibuf) == -1
3256" call Decho("wiping buf#".ibuf)
Bram Moolenaarc01140a2006-03-24 22:21:52 +00003257 exe "silent! bw ".ibuf
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +00003258 call remove(s:netrw_browselist,ibl)
3259" call Decho("browselist=".string(s:netrw_browselist))
3260 continue
3261 else
3262" call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
3263 exe bufwinnr(ibuf)."wincmd w"
3264 call s:NetRefresh(s:LocalBrowseChgDir(b:netrw_curdir,'./'),1)
3265 endif
3266 let ibl= ibl + 1
3267 endfor
3268 exe curwin."wincmd w"
3269
3270" call Dret("LocalBrowseShellCmdRefresh")
3271endfun
3272
3273" ---------------------------------------------------------------------
Bram Moolenaar572cb562005-08-05 21:35:02 +00003274" LocalBrowseRm: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003275fun! s:LocalBrowseRm(path) range
Bram Moolenaar8299df92004-07-10 09:47:34 +00003276" call Dfunc("LocalBrowseRm(path<".a:path.">)")
3277" call Decho("firstline=".a:firstline." lastline=".a:lastline)
3278
3279 " preparation for removing multiple files/directories
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003280 let ctr = a:firstline
3281 let ret = 0
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003282 let all= 0
Bram Moolenaar8299df92004-07-10 09:47:34 +00003283
3284 " remove multiple files and directories
3285 while ctr <= a:lastline
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003286 exe "keepjumps ".ctr
3287
3288 " sanity checks
Bram Moolenaar488c6512005-08-11 20:09:58 +00003289 if line(".") < w:netrw_bannercnt
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003290 let ctr= ctr + 1
3291 continue
3292 endif
3293 let curword= s:NetGetWord()
3294 if curword == "./" || curword == "../"
3295 let ctr= ctr + 1
3296 continue
3297 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00003298
3299 norm! 0
Bram Moolenaar83bab712005-08-01 21:58:57 +00003300 let rmfile= a:path."/".curword
Bram Moolenaar8299df92004-07-10 09:47:34 +00003301" call Decho("rmfile<".rmfile.">")
3302
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003303 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
Bram Moolenaar8299df92004-07-10 09:47:34 +00003304 " attempt to remove file
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003305 if !all
3306 echohl Statement
3307 call inputsave()
3308 let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
3309 call inputrestore()
3310 echohl NONE
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003311 if ok == ""
3312 let ok="no"
3313 endif
3314" call Decho("response: ok<".ok.">")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003315 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003316" call Decho("response: ok<".ok."> (after sub)")
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003317 if ok =~ 'a\%[ll]'
3318 let all= 1
3319 endif
3320 endif
3321
3322 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003323 let ret= delete(rmfile)
3324" call Decho("errcode=".v:shell_error." ret=".ret)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003325 elseif ok =~ 'q\%[uit]'
3326 break
Bram Moolenaar8299df92004-07-10 09:47:34 +00003327 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003328
Bram Moolenaar8299df92004-07-10 09:47:34 +00003329 else
3330 " attempt to remove directory
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003331 if !all
3332 echohl Statement
3333 call inputsave()
3334 let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
3335 call inputrestore()
3336 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003337 if ok == ""
3338 let ok="no"
3339 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003340 if ok =~ 'a\%[ll]'
3341 let all= 1
3342 endif
3343 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003344 let rmfile= substitute(rmfile,'[\/]$','','e')
Bram Moolenaar8299df92004-07-10 09:47:34 +00003345
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003346 if all || ok =~ 'y\%[es]' || ok == ""
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003347" call Decho("1st attempt: system(".g:netrw_local_rmdir.' "'.rmfile.'")')
3348 call system(g:netrw_local_rmdir.' "'.rmfile.'"')
Bram Moolenaar8299df92004-07-10 09:47:34 +00003349" call Decho("v:shell_error=".v:shell_error)
3350
3351 if v:shell_error != 0
3352" call Decho("2nd attempt to remove directory<".rmfile.">")
3353 let errcode= delete(rmfile)
3354" call Decho("errcode=".errcode)
3355
3356 if errcode != 0
3357 if has("unix")
3358" call Decho("3rd attempt to remove directory<".rmfile.">")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003359call system("rm ".rmfile)
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003360 if v:shell_error != 0 && !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00003361 echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003362 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003363endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003364 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00003365 echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003366 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaar8299df92004-07-10 09:47:34 +00003367 endif
3368 endif
3369 endif
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003370
3371 elseif ok =~ 'q\%[uit]'
3372 break
Bram Moolenaar8299df92004-07-10 09:47:34 +00003373 endif
3374 endif
3375
3376 let ctr= ctr + 1
3377 endwhile
3378
3379 " refresh the directory
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003380 let curline= line(".")
Bram Moolenaar8299df92004-07-10 09:47:34 +00003381" call Decho("refresh the directory")
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003382 call s:NetRefresh(s:LocalBrowseChgDir(b:netrw_curdir,'./'),1)
Bram Moolenaar8299df92004-07-10 09:47:34 +00003383 exe curline
3384
3385" call Dret("LocalBrowseRm")
3386endfun
3387
3388" ---------------------------------------------------------------------
3389" LocalBrowseRename: rename a remote file or directory {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003390fun! s:LocalBrowseRename(path) range
Bram Moolenaar8299df92004-07-10 09:47:34 +00003391" call Dfunc("LocalBrowseRename(path<".a:path.">)")
3392
3393 " preparation for removing multiple files/directories
3394 let ctr= a:firstline
3395
3396 " attempt to rename files/directories
3397 while ctr <= a:lastline
3398 exe "keepjumps ".ctr
3399
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003400 " sanity checks
Bram Moolenaar488c6512005-08-11 20:09:58 +00003401 if line(".") < w:netrw_bannercnt
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003402 let ctr= ctr + 1
3403 continue
3404 endif
3405 let curword= s:NetGetWord()
3406 if curword == "./" || curword == "../"
3407 let ctr= ctr + 1
3408 continue
3409 endif
3410
Bram Moolenaar8299df92004-07-10 09:47:34 +00003411 norm! 0
Bram Moolenaar572cb562005-08-05 21:35:02 +00003412 let oldname= a:path."/".curword
Bram Moolenaar8299df92004-07-10 09:47:34 +00003413" call Decho("oldname<".oldname.">")
3414
3415 call inputsave()
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003416 let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
Bram Moolenaar8299df92004-07-10 09:47:34 +00003417 call inputrestore()
3418
Bram Moolenaar83bab712005-08-01 21:58:57 +00003419 let ret= rename(oldname,newname)
3420" call Decho("renaming <".oldname."> to <".newname.">")
Bram Moolenaar8299df92004-07-10 09:47:34 +00003421
3422 let ctr= ctr + 1
3423 endwhile
3424
3425 " refresh the directory
3426 let curline= line(".")
Bram Moolenaar269ec652004-07-29 08:43:53 +00003427" call Decho("refresh the directory listing")
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003428 call s:NetRefresh(s:LocalBrowseChgDir(b:netrw_curdir,'./'),1)
Bram Moolenaar8299df92004-07-10 09:47:34 +00003429 exe "keepjumps ".curline
3430" call Dret("LocalBrowseRename")
3431endfun
3432
3433" ---------------------------------------------------------------------
Bram Moolenaar7d47b6e2006-03-15 22:59:18 +00003434" LocalFastBrowser: handles setting up/taking down fast browsing for the {{{2
3435" local browser
3436fun! s:LocalFastBrowser()
3437" call Dfunc("LocalFastBrowser()")
3438
3439 " initialize browselist, a list of buffer numbers that the local browser has used
3440 if !exists("s:netrw_browselist")
3441 let s:netrw_browselist= []
3442 endif
3443
3444 " append current buffer to fastbrowse list
3445 if g:netrw_fastbrowse <= 1 && (empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1])
3446 call add(s:netrw_browselist,bufnr("%"))
3447" call Decho("browselist=".string(s:netrw_browselist))
3448 endif
3449
3450 " enable autocmd events to handle refreshing/removing local browser buffers
3451 " If local browse buffer is currently showing: refresh it
3452 " If local browse buffer is currently hidden : wipe it
3453 if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
3454" call Decho("setting up local-browser shell command refresh")
3455 let s:netrw_browser_shellcmd= 1
3456 augroup AuNetrwShellCmd
3457 au!
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00003458 if (has("win32") || has("win95") || has("win64") || has("win16"))
3459 au ShellCmdPost * call s:LocalBrowseShellCmdRefresh()
3460 else
3461 au ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()
3462 endif
Bram Moolenaar7d47b6e2006-03-15 22:59:18 +00003463 augroup END
Bram Moolenaar8dff8182006-04-06 20:18:50 +00003464 endif
Bram Moolenaar7d47b6e2006-03-15 22:59:18 +00003465
3466 " user must have changed fastbrowse to its fast setting, so remove
3467 " the associated autocmd events
3468 if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
3469 unlet s:netrw_browser_shellcmd
3470 augroup AuNetrwShellCmd
3471 au!
3472 augroup END
3473 augroup! AuNetrwShellCmd
3474 endif
3475
3476" call Dret("LocalFastBrowser")
3477endfun
3478
3479" ---------------------------------------------------------------------
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003480" LocalObtain: copy selected file to current working directory {{{2
3481fun! s:LocalObtain()
3482" call Dfunc("LocalObtain()")
3483 if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
3484 let fname= expand("<cWORD>")
3485 let fcopy= readfile(b:netrw_curdir."/".fname,"b")
3486 call writefile(fcopy,getcwd()."/".fname,"b")
3487 elseif !exists("b:netrw_curdir")
3488 echohl Error | echo "***netrw*** local browsing directory doesn't exist!"
3489 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
3490 else
3491 echohl Error | echo "***netrw*** local browsing directory and current directory are identical"
3492 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
3493 endif
3494" call Dret("LocalObtain")
3495endfun
3496
3497" ---------------------------------------------------------------------
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003498" LocalPreview: {{{2
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003499fun! s:LocalPreview(path) range
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003500" call Dfunc("LocalPreview(path<".a:path.">)")
3501 if has("quickfix")
3502 if !isdirectory(a:path)
Bram Moolenaard68071d2006-05-02 22:08:30 +00003503 exe "pedit ".escape(a:path,g:netrw_fname_escape)
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003504 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00003505 echohl WarningMsg | echo "***netrw*** sorry, cannot preview a directory such as <".a:path.">" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003506 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003507 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003508 elseif !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00003509 echohl WarningMsg | echo "***netrw*** sorry, to preview your vim needs the quickfix feature compiled in" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003510 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003511 endif
3512" call Dret("LocalPreview")
3513endfun
3514
3515" ---------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00003516" Explore: launch the local browser in the directory of the current file {{{2
3517" dosplit==0: the window will be split iff the current file has
3518" been modified
3519" dosplit==1: the window will be split before running the local
3520" browser
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003521fun! netrw#Explore(indx,dosplit,style,...)
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003522" call Dfunc("Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.")")
Bram Moolenaar83bab712005-08-01 21:58:57 +00003523
3524 " if dosplit or file has been modified
3525 if a:dosplit || &modified
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00003526 call s:SaveWinVars()
Bram Moolenaar488c6512005-08-11 20:09:58 +00003527
Bram Moolenaar83bab712005-08-01 21:58:57 +00003528 if a:style == 0 " Explore, Sexplore
3529 exe g:netrw_winsize."wincmd s"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003530" call Decho("style=0: Explore or Sexplore")
3531
Bram Moolenaar83bab712005-08-01 21:58:57 +00003532 elseif a:style == 1 "Explore!, Sexplore!
3533 exe g:netrw_winsize."wincmd v"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003534" call Decho("style=1: Explore! or Sexplore!")
3535
Bram Moolenaar83bab712005-08-01 21:58:57 +00003536 elseif a:style == 2 " Hexplore
3537 exe "bel ".g:netrw_winsize."wincmd s"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003538" call Decho("style=2: Hexplore")
3539
Bram Moolenaar83bab712005-08-01 21:58:57 +00003540 elseif a:style == 3 " Hexplore!
3541 exe "abo ".g:netrw_winsize."wincmd s"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003542" call Decho("style=3: Hexplore!")
3543
Bram Moolenaar83bab712005-08-01 21:58:57 +00003544 elseif a:style == 4 " Vexplore
3545 exe "lefta ".g:netrw_winsize."wincmd v"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003546" call Decho("style=4: Vexplore")
3547
Bram Moolenaar83bab712005-08-01 21:58:57 +00003548 elseif a:style == 5 " Vexplore!
3549 exe "rightb ".g:netrw_winsize."wincmd v"
Bram Moolenaar488c6512005-08-11 20:09:58 +00003550" call Decho("style=5: Vexplore!")
Bram Moolenaar83bab712005-08-01 21:58:57 +00003551 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003552 call s:CopyWinVars()
Bram Moolenaar83bab712005-08-01 21:58:57 +00003553 endif
3554 norm! 0
3555
Bram Moolenaar4a85b412006-04-23 22:40:29 +00003556 if a:1 =~ '^\*/'
Bram Moolenaar57657d82006-04-21 22:12:41 +00003557 " Explore */pattern
3558 let pattern= substitute(a:1,'^\*/\(.*\)$','\1','')
Bram Moolenaar4a85b412006-04-23 22:40:29 +00003559" call Decho("Explore */pat: a:1<".a:1."> -> pattern<".pattern.">")
3560 elseif a:1 =~ '^\*\*//'
3561 " Explore **//pattern
3562 let pattern = substitute(a:1,'^\*\*//','','')
3563 let starstarpat = 1
3564" call Decho("Explore **//pat: a:1<".a:1."> -> pattern<".pattern.">")
Bram Moolenaar57657d82006-04-21 22:12:41 +00003565 endif
3566
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003567 if a:1 == "" && a:indx >= 0
Bram Moolenaar488c6512005-08-11 20:09:58 +00003568 " Explore Hexplore Vexplore Sexplore
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003569" call Decho("Explore Hexplore Vexplore Sexplore")
Bram Moolenaar488c6512005-08-11 20:09:58 +00003570 let newdir= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
3571 if newdir =~ '^scp:' || newdir =~ '^ftp:'
3572" call Decho("calling NetBrowse(newdir<".newdir.">)")
3573 call s:NetBrowse(newdir)
3574 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003575 if newdir == ""|let newdir= getcwd()|endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003576" call Decho("calling LocalBrowse(newdir<".newdir.">)")
3577 call s:LocalBrowse(newdir)
3578 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003579
Bram Moolenaar57657d82006-04-21 22:12:41 +00003580 elseif a:1 =~ '^\*\*/' || a:indx < 0 || a:1 =~ '^\*/'
3581 " Nexplore, Pexplore, Explore **/... , or Explore */pattern
3582" call Decho("Nexplore, Pexplore, <s-down>, <s-up>, Explore ".a:1)
3583 let s:didstarstar= 1
3584 if exists("b:netrw_curdir")
3585 nnoremap <buffer> <silent> <s-up> :Pexplore<cr>
3586 nnoremap <buffer> <silent> <s-down> :Nexplore<cr>
3587 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003588
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003589 if has("path_extra")
Bram Moolenaar488c6512005-08-11 20:09:58 +00003590 if !exists("w:netrw_explore_indx")
3591 let w:netrw_explore_indx= 0
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003592 endif
3593 let indx = a:indx
Bram Moolenaar4a85b412006-04-23 22:40:29 +00003594" call Decho("set indx=".indx)
Bram Moolenaar57657d82006-04-21 22:12:41 +00003595"
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003596 if indx == -1
Bram Moolenaar4a85b412006-04-23 22:40:29 +00003597 "Nexplore
Bram Moolenaar57657d82006-04-21 22:12:41 +00003598 if !exists("w:netrw_explore_list") " sanity check
3599 echohl WarningMsg | echo "***netrw*** using Nexplore or <s-down> improperly; see help for netrw-starstar" | echohl None
3600 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
3601" call Dret("Explore")
3602 return
3603 endif
Bram Moolenaar4a85b412006-04-23 22:40:29 +00003604 let indx = w:netrw_explore_indx
3605 let curfile= w:netrw_explore_list[indx]
3606 while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
3607 let indx= indx + 1
3608" call Decho("indx=".indx)
3609 endwhile
3610" call Decho("Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
Bram Moolenaar57657d82006-04-21 22:12:41 +00003611
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003612 elseif indx == -2
Bram Moolenaar4a85b412006-04-23 22:40:29 +00003613 "Pexplore
Bram Moolenaar57657d82006-04-21 22:12:41 +00003614 if !exists("w:netrw_explore_list") " sanity check
3615 echohl WarningMsg | echo "***netrw*** using Pexplore or <s-up> improperly; see help for netrw-starstar" | echohl None
3616 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
3617" call Dret("Explore")
3618 return
3619 endif
Bram Moolenaar4a85b412006-04-23 22:40:29 +00003620 let indx = w:netrw_explore_indx
3621 let curfile= w:netrw_explore_list[indx]
3622 while indx > 0 && curfile == w:netrw_explore_list[indx]
3623 let indx= indx - 1
3624 endwhile
3625" call Decho("Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
Bram Moolenaar57657d82006-04-21 22:12:41 +00003626
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003627 else
Bram Moolenaar4a85b412006-04-23 22:40:29 +00003628 " Explore -- initialize
Bram Moolenaar57657d82006-04-21 22:12:41 +00003629 " build list of files to Explore with Nexplore/Pexplore
Bram Moolenaar4a85b412006-04-23 22:40:29 +00003630" call Decho("Explore -- initialize")
3631 let w:netrw_explore_indx= 0
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003632 if !exists("b:netrw_curdir")
Bram Moolenaar488c6512005-08-11 20:09:58 +00003633 let b:netrw_curdir= getcwd()
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003634 endif
Bram Moolenaar57657d82006-04-21 22:12:41 +00003635" call Decho("b:netrw_curdir<".b:netrw_curdir.">")
3636 if exists("pattern")
3637" call Decho("building list based on pattern<".pattern."> cwd<".getcwd().">")
Bram Moolenaar4a85b412006-04-23 22:40:29 +00003638 if exists("starstarpat")
3639 exe "vimgrep /".pattern."/gj "."**/*"
3640 let s:netrw_curdir= b:netrw_curdir
3641 let w:netrw_explore_list = map(getqflist(),'s:netrw_curdir."/".bufname(v:val.bufnr)')
3642 else
3643 exe "vimgrep /".pattern."/gj ".b:netrw_curdir."/*"
3644 if (has("win32") || has("win95") || has("win64") || has("win16"))
3645 let w:netrw_explore_list = map(getqflist(),'bufname(v:val.bufnr)')
3646 else
3647 let w:netrw_explore_list = map(getqflist(),'b:netrw_curdir.bufname(v:val.bufnr)')
3648 endif
3649 endif
Bram Moolenaar57657d82006-04-21 22:12:41 +00003650 else
3651" call Decho("building list based on ".b:netrw_curdir."/".a:1)
3652 let w:netrw_explore_list= split(expand(b:netrw_curdir."/".a:1),'\n')
3653 endif
3654
Bram Moolenaar488c6512005-08-11 20:09:58 +00003655 let w:netrw_explore_listlen = len(w:netrw_explore_list)
Bram Moolenaar57657d82006-04-21 22:12:41 +00003656" call Decho("w:netrw_explore_list<".string(w:netrw_explore_list)."> listlen=".w:netrw_explore_listlen)
3657
Bram Moolenaar488c6512005-08-11 20:09:58 +00003658 if w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/'
Bram Moolenaar572cb562005-08-05 21:35:02 +00003659 echohl WarningMsg | echo "***netrw*** no files matched" | echohl None
3660 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
3661" call Dret("Explore")
3662 return
3663 endif
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003664 endif
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003665
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003666 " NetrwStatusLine support - for exploring support
Bram Moolenaar488c6512005-08-11 20:09:58 +00003667 let w:netrw_explore_indx= indx
Bram Moolenaar488c6512005-08-11 20:09:58 +00003668" call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003669
3670 " sanity check
Bram Moolenaar488c6512005-08-11 20:09:58 +00003671 if indx >= w:netrw_explore_listlen || indx < 0
3672 let indx= (indx < 0)? 0 : ( w:netrw_explore_listlen - 1 )
Bram Moolenaar572cb562005-08-05 21:35:02 +00003673 echohl WarningMsg | echo "***netrw*** no more files match Explore pattern" | echohl None
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003674 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
3675" call Dret("Explore")
3676 return
3677 endif
3678
Bram Moolenaar488c6512005-08-11 20:09:58 +00003679 exe "let dirfile= w:netrw_explore_list[".indx."]"
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003680" call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003681 let newdir= substitute(dirfile,'/[^/]*$','','e')
3682" call Decho("newdir<".newdir.">")
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003683
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003684" call Decho("calling LocalBrowse(newdir<".newdir.">)")
3685 call s:LocalBrowse(newdir)
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003686 if w:netrw_longlist == 0 || w:netrw_longlist == 1
3687 call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
3688 else
3689 call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
3690 endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00003691 let w:netrw_explore_mtchcnt = indx + 1
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +00003692 let w:netrw_explore_bufnr = bufnr("%")
Bram Moolenaar488c6512005-08-11 20:09:58 +00003693 let w:netrw_explore_line = line(".")
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003694 call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
Bram Moolenaar488c6512005-08-11 20:09:58 +00003695" 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 +00003696
3697 else
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003698 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00003699 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 +00003700 endif
3701 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
3702 endif
3703
Bram Moolenaar83bab712005-08-01 21:58:57 +00003704 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003705" call Decho("Explore newdir<".a:1.">")
Bram Moolenaar83bab712005-08-01 21:58:57 +00003706 let newdir= a:1
Bram Moolenaar1d94f9b2005-08-04 21:29:45 +00003707 call s:LocalBrowse(newdir)
Bram Moolenaar83bab712005-08-01 21:58:57 +00003708 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00003709
3710" call Dret("Explore")
3711endfun
3712
3713" ---------------------------------------------------------------------
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003714" SetupNetrwStatusLine: {{{2
3715fun! s:SetupNetrwStatusLine(statline)
3716" call Dfunc("SetupNetrwStatusLine(statline<".a:statline.">)")
3717
3718 if !exists("s:netrw_setup_statline")
3719 let s:netrw_setup_statline= 1
3720" call Decho("do first-time status line setup")
3721
3722 if !exists("s:netrw_users_stl")
3723 let s:netrw_users_stl= &stl
3724 endif
3725 if !exists("s:netrw_users_ls")
3726 let s:netrw_users_ls= &laststatus
3727 endif
3728
3729 " set up User9 highlighting as needed
3730 let keepa= @a
3731 redir @a
3732 try
3733 hi User9
3734 catch /^Vim\%((\a\+)\)\=:E411/
3735 if &bg == "dark"
3736 hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue
3737 else
3738 hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue
3739 endif
3740 endtry
3741 redir END
3742 let @a= keepa
3743 endif
3744
3745 " set up status line (may use User9 highlighting)
3746 " insure that windows have a statusline
3747 " make sure statusline is displayed
3748 let &stl=a:statline
3749 set laststatus=2
3750" call Decho("stl=".&stl)
3751 redraw!
3752
3753" call Dret("SetupNetrwStatusLine : stl=".&stl)
3754endfun
3755
3756" ---------------------------------------------------------------------
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003757" NetrwStatusLine: {{{2
3758fun! NetrwStatusLine()
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003759
3760 " vvv NetrwStatusLine() debugging vvv
3761" let g:stlmsg=""
3762" if !exists("w:netrw_explore_bufnr")
3763" let g:stlmsg="!X<explore_bufnr>"
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +00003764" elseif w:netrw_explore_bufnr != bufnr("%")
3765" let g:stlmsg="explore_bufnr!=".bufnr("%")
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003766" endif
3767" if !exists("w:netrw_explore_line")
3768" let g:stlmsg=" !X<explore_line>"
3769" elseif w:netrw_explore_line != line(".")
3770" let g:stlmsg=" explore_line!={line(.)<".line(".").">"
3771" endif
3772" if !exists("w:netrw_explore_list")
3773" let g:stlmsg=" !X<explore_list>"
3774" endif
3775 " ^^^ NetrwStatusLine() debugging ^^^
3776
Bram Moolenaar1f4d4de2006-03-14 23:00:46 +00003777 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 +00003778 " restore user's status line
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003779 let &stl = s:netrw_users_stl
3780 let &laststatus = s:netrw_users_ls
Bram Moolenaar488c6512005-08-11 20:09:58 +00003781 if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
3782 if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003783 return ""
3784 else
Bram Moolenaar488c6512005-08-11 20:09:58 +00003785 return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
Bram Moolenaarf6cf9872005-08-08 22:00:59 +00003786 endif
3787endfun
3788
3789" ---------------------------------------------------------------------
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003790" NetGetcwd: get the current directory. {{{2
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003791" Change backslashes to forward slashes, if any.
3792" If doesc is true, escape certain troublesome characters
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00003793fun! s:NetGetcwd(doesc)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003794" call Dfunc("NetGetcwd(doesc=".a:doesc.")")
3795 let curdir= substitute(getcwd(),'\\','/','ge')
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003796 if curdir !~ '[\/]$'
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003797 let curdir= curdir.'/'
3798 endif
3799 if a:doesc
3800 let curdir= escape(curdir,s:netrw_cd_escape)
3801 endif
3802" call Dret("NetGetcwd <".curdir.">")
3803 return curdir
3804endfun
3805
3806" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00003807" NetMethod: determine method of transfer {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +00003808" method == 1: rcp
3809" 2: ftp + <.netrc>
3810" 3: ftp + machine, id, password, and [path]filename
3811" 4: scp
3812" 5: http (wget)
3813" 6: cadaver
3814" 7: rsync
3815" 8: fetch
3816" 9: sftp
3817fun! s:NetMethod(choice) " globals: method machine id passwd fname
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003818" call Dfunc("NetMethod(a:choice<".a:choice.">)")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003819
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003820 " initialization
3821 let b:netrw_method = 0
3822 let g:netrw_machine = ""
3823 let b:netrw_fname = ""
3824 let g:netrw_port = ""
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003825 let g:netrw_choice = a:choice
3826
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003827 " Patterns:
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003828 " mipf : a:machine a:id password filename Use ftp
3829 " mf : a:machine filename Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003830 " ftpurm : ftp://[user@]host[[#:]port]/filename Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003831 " rcpurm : rcp://[user@]host/filename Use rcp
3832 " rcphf : [user@]host:filename Use rcp
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003833 " scpurm : scp://[user@]host[[#:]port]/filename Use scp
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003834 " httpurm : http://[user@]host/filename Use wget
3835 " davurm : [s]dav://host[:port]/path Use cadaver
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003836 " rsyncurm : rsync://host[:port]/path Use rsync
3837 " fetchurm : fetch://[user@]host[:http]/filename Use fetch (defaults to ftp, override for http)
3838 " sftpurm : sftp://[user@]host/filename Use scp
3839 let mipf = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
3840 let mf = '^\(\S\+\)\s\+\(\S\+\)$'
3841 let ftpurm = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
Bram Moolenaar83bab712005-08-01 21:58:57 +00003842 let rcpurm = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003843 let rcphf = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
Bram Moolenaar1afcace2005-11-25 19:54:28 +00003844 let scpurm = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003845 let httpurm = '^http://\([^/]\{-}\)\(/.*\)\=$'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003846 let davurm = '^s\=dav://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003847 let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
3848 let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
3849 let sftpurm = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003850
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003851" call Decho("determine method:")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003852 " Determine Method
3853 " rcp://user@hostname/...path-to-file
3854 if match(a:choice,rcpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003855" call Decho("rcp://...")
Bram Moolenaar83bab712005-08-01 21:58:57 +00003856 let b:netrw_method = 1
3857 let userid = substitute(a:choice,rcpurm,'\1',"")
3858 let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"")
3859 let b:netrw_fname = substitute(a:choice,rcpurm,'\3',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003860 if userid != ""
3861 let g:netrw_uid= userid
Bram Moolenaar071d4272004-06-13 20:20:40 +00003862 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003863
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003864 " scp://user@hostname/...path-to-file
3865 elseif match(a:choice,scpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003866" call Decho("scp://...")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003867 let b:netrw_method = 4
Bram Moolenaar83bab712005-08-01 21:58:57 +00003868 let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
3869 let g:netrw_port = substitute(a:choice,scpurm,'\2',"")
3870 let b:netrw_fname = substitute(a:choice,scpurm,'\3',"")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003871
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003872 " http://user@hostname/...path-to-file
3873 elseif match(a:choice,httpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003874" call Decho("http://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003875 let b:netrw_method = 5
3876 let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
3877 let b:netrw_fname = substitute(a:choice,httpurm,'\2',"")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003878
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003879 " dav://hostname[:port]/..path-to-file..
3880 elseif match(a:choice,davurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003881" call Decho("dav://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003882 let b:netrw_method= 6
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003883 if a:choice =~ '^s'
3884 let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
3885 else
3886 let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
3887 endif
3888 let b:netrw_fname = substitute(a:choice,davurm,'\3',"")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003889
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003890 " rsync://user@hostname/...path-to-file
3891 elseif match(a:choice,rsyncurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003892" call Decho("rsync://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003893 let b:netrw_method = 7
3894 let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
3895 let b:netrw_fname = substitute(a:choice,rsyncurm,'\2',"")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003896
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003897 " ftp://[user@]hostname[[:#]port]/...path-to-file
3898 elseif match(a:choice,ftpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003899" call Decho("ftp://...")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00003900 let userid = substitute(a:choice,ftpurm,'\2',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003901 let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
3902 let g:netrw_port = substitute(a:choice,ftpurm,'\4',"")
3903 let b:netrw_fname = substitute(a:choice,ftpurm,'\5',"")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003904 if userid != ""
3905 let g:netrw_uid= userid
3906 endif
3907 if exists("g:netrw_uid") && exists("g:netrw_passwd")
3908 let b:netrw_method = 3
3909 else
3910 if filereadable(expand("$HOME/.netrc")) && !exists("g:netrw_ignorenetrc")
3911 let b:netrw_method= 2
3912 else
3913 if !exists("g:netrw_uid") || g:netrw_uid == ""
3914 call NetUserPass()
3915 elseif !exists("g:netrw_passwd") || g:netrw_passwd == ""
3916 call NetUserPass(g:netrw_uid)
3917 " else just use current g:netrw_uid and g:netrw_passwd
3918 endif
3919 let b:netrw_method= 3
3920 endif
3921 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003922
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003923 elseif match(a:choice,fetchurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003924" call Decho("fetch://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003925 let b:netrw_method = 8
3926 let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
3927 let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
3928 let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
3929 let b:netrw_fname = substitute(a:choice,fetchurm,'\5',"")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003930
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003931 " Issue an ftp : "machine id password [path/]filename"
3932 elseif match(a:choice,mipf) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003933" call Decho("(ftp) host id pass file")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003934 let b:netrw_method = 3
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003935 let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
3936 let g:netrw_uid = substitute(a:choice,mipf,'\2',"")
3937 let g:netrw_passwd = substitute(a:choice,mipf,'\3',"")
3938 let b:netrw_fname = substitute(a:choice,mipf,'\4',"")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003939
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003940 " Issue an ftp: "hostname [path/]filename"
3941 elseif match(a:choice,mf) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003942" call Decho("(ftp) host file")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003943 if exists("g:netrw_uid") && exists("g:netrw_passwd")
3944 let b:netrw_method = 3
3945 let g:netrw_machine = substitute(a:choice,mf,'\1',"")
3946 let b:netrw_fname = substitute(a:choice,mf,'\2',"")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003947
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003948 elseif filereadable(expand("$HOME/.netrc"))
3949 let b:netrw_method = 2
3950 let g:netrw_machine = substitute(a:choice,mf,'\1',"")
3951 let b:netrw_fname = substitute(a:choice,mf,'\2',"")
3952 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003953
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003954 " sftp://user@hostname/...path-to-file
3955 elseif match(a:choice,sftpurm) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003956" call Decho("sftp://...")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003957 let b:netrw_method = 9
3958 let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
3959 let b:netrw_fname = substitute(a:choice,sftpurm,'\2',"")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003960
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003961 " Issue an rcp: hostname:filename" (this one should be last)
3962 elseif match(a:choice,rcphf) == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003963" call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003964 let b:netrw_method = 1
3965 let userid = substitute(a:choice,rcphf,'\2',"")
3966 let g:netrw_machine= substitute(a:choice,rcphf,'\3',"")
3967 let b:netrw_fname = substitute(a:choice,rcphf,'\4',"")
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003968" call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
3969" call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
3970" call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
3971" call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003972 if userid != ""
3973 let g:netrw_uid= userid
3974 endif
Bram Moolenaard4755bb2004-09-02 19:12:26 +00003975 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003976 " don't let PCs try <.netrc>
3977 let b:netrw_method = 3
3978 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003979
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003980 else
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003981 if !exists("g:netrw_quiet")
Bram Moolenaar572cb562005-08-05 21:35:02 +00003982 echohl Error | echo "***netrw*** cannot determine method" | echohl None
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00003983 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
Bram Moolenaarc0197e22004-09-13 20:26:32 +00003984 endif
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00003985 let b:netrw_method = -1
Bram Moolenaar071d4272004-06-13 20:20:40 +00003986 endif
Bram Moolenaar81695252004-12-29 20:58:21 +00003987
3988 " remove any leading [:#] from port number
3989 if g:netrw_port != ""
3990 let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
3991 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00003992
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00003993" call Decho("a:choice <".a:choice.">")
3994" call Decho("b:netrw_method <".b:netrw_method.">")
3995" call Decho("g:netrw_machine<".g:netrw_machine.">")
3996" call Decho("g:netrw_port <".g:netrw_port.">")
3997" if exists("g:netrw_uid") "Decho
3998" call Decho("g:netrw_uid <".g:netrw_uid.">")
3999" endif "Decho
4000" if exists("g:netrw_passwd") "Decho
4001" call Decho("g:netrw_passwd <".g:netrw_passwd.">")
4002" endif "Decho
4003" call Decho("b:netrw_fname <".b:netrw_fname.">")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00004004" call Dret("NetMethod : b:netrw_method=".b:netrw_method)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004005endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +00004006
4007" ------------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004008" NetUserPass: set username and password for subsequent ftp transfer {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +00004009" Usage: :call NetUserPass() -- will prompt for userid and password
4010" :call NetUserPass("uid") -- will prompt for password
4011" :call NetUserPass("uid","password") -- sets global userid and password
4012fun! NetUserPass(...)
4013
4014 " get/set userid
4015 if a:0 == 0
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004016" call Dfunc("NetUserPass(a:0<".a:0.">)")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004017 if !exists("g:netrw_uid") || g:netrw_uid == ""
4018 " via prompt
4019 let g:netrw_uid= input('Enter username: ')
4020 endif
4021 else " from command line
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004022" call Dfunc("NetUserPass(a:1<".a:1.">) {")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004023 let g:netrw_uid= a:1
4024 endif
4025
4026 " get password
4027 if a:0 <= 1 " via prompt
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004028" call Decho("a:0=".a:0." case <=1:")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004029 let g:netrw_passwd= inputsecret("Enter Password: ")
4030 else " from command line
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004031" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004032 let g:netrw_passwd=a:2
4033 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004034
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004035" call Dret("NetUserPass")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004036endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +00004037
4038" ------------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004039" NetOptionSave: save options and set to "standard" form {{{2
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00004040fun! s:NetOptionSave()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004041" call Dfunc("NetOptionSave()")
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00004042 if !exists("w:netoptionsave")
4043 let w:netoptionsave= 1
4044 else
4045" call Dret("NetOptionSave : netoptionsave=".w:netoptionsave)
4046 return
4047 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004048
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00004049 " Get Temporary Filename
Bram Moolenaard68071d2006-05-02 22:08:30 +00004050 if exists("&acd")
4051 let w:acdkeep = &acd
4052 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00004053 let w:aikeep = &ai
Bram Moolenaar57657d82006-04-21 22:12:41 +00004054 let w:fokeep = &fo
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00004055 let w:cikeep = &ci
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004056 let w:cinkeep = &cin
4057 let w:cinokeep = &cino
4058 let w:comkeep = &com
4059 let w:cpokeep = &cpo
Bram Moolenaar7d47b6e2006-03-15 22:59:18 +00004060 let w:hidkeep = &hidden
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00004061 let w:magickeep = &magic
Bram Moolenaard68071d2006-05-02 22:08:30 +00004062 if !g:netrw_keepdir
4063 let w:dirkeep = getcwd()
4064 endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004065 let w:gdkeep = &gd
4066 let w:repkeep = &report
4067 let w:spellkeep = &spell
4068 let w:twkeep = &tw
Bram Moolenaar8299df92004-07-10 09:47:34 +00004069 setlocal cino =
4070 setlocal com =
4071 setlocal cpo -=aA
Bram Moolenaard68071d2006-05-02 22:08:30 +00004072 if exists("&acd")
4073 setlocal noacd nocin noai noci magic nospell fo=nroql2 nohid
4074 else
4075 setlocal nocin noai noci magic nospell fo=nroql2 nohid
4076 endif
Bram Moolenaar8299df92004-07-10 09:47:34 +00004077 setlocal tw =0
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00004078 setlocal report=10000
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00004079 if has("win32") && !has("win95")
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00004080 let w:swfkeep= &swf
Bram Moolenaar8299df92004-07-10 09:47:34 +00004081 setlocal noswf
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00004082" call Decho("setting w:swfkeep to <".&swf.">")
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00004083 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00004084
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004085" call Dret("NetOptionSave")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004086endfun
4087
4088" ------------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004089" NetOptionRestore: restore options {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +00004090fun! s:NetOptionRestore()
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004091" call Dfunc("NetOptionRestore()")
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00004092 if !exists("w:netoptionsave")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00004093" call Dret("NetOptionRestore : w:netoptionsave doesn't exist")
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00004094 return
4095 endif
4096 unlet w:netoptionsave
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00004097
Bram Moolenaard68071d2006-05-02 22:08:30 +00004098 if exists("&acd")
4099 if exists("w:acdkeep") |let &acd = w:acdkeep |unlet w:acdkeep |endif
4100 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00004101 if exists("w:aikeep") |let &ai = w:aikeep |unlet w:aikeep |endif
4102 if exists("w:cikeep") |let &ci = w:cikeep |unlet w:cikeep |endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004103 if exists("w:cinkeep") |let &cin = w:cinkeep |unlet w:cinkeep |endif
4104 if exists("w:cinokeep") |let &cino = w:cinokeep |unlet w:cinokeep |endif
4105 if exists("w:comkeep") |let &com = w:comkeep |unlet w:comkeep |endif
4106 if exists("w:cpokeep") |let &cpo = w:cpokeep |unlet w:cpokeep |endif
Bram Moolenaard68071d2006-05-02 22:08:30 +00004107 if exists("w:dirkeep") |exe "lcd ".w:dirkeep |unlet w:dirkeep |endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00004108 if exists("w:fokeep") |let &fo = w:fokeep |unlet w:fokeep |endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004109 if exists("w:gdkeep") |let &gd = w:gdkeep |unlet w:gdkeep |endif
Bram Moolenaar7d47b6e2006-03-15 22:59:18 +00004110 if exists("w:hidkeep") |let &hidden = w:hidkeep |unlet w:hidkeep |endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00004111 if exists("w:magic") |let &magic = w:magic |unlet w:magic |endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004112 if exists("w:repkeep") |let &report = w:repkeep |unlet w:repkeep |endif
4113 if exists("w:spellkeep")|let &spell = w:spellkeep |unlet w:spellkeep|endif
4114 if exists("w:twkeep") |let &tw = w:twkeep |unlet w:twkeep |endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00004115 if exists("w:swfkeep")
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004116 if &directory == "" && exists("w:swfkeep")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00004117 " user hasn't specified a swapfile directory;
4118 " netrw will temporarily make the swapfile
4119 " directory the current local one.
4120 let &directory = getcwd()
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00004121 silent! let &swf = w:swfkeep
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00004122 set directory=
4123 else
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00004124 let &swf= w:swfkeep
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00004125 endif
Bram Moolenaar8aff23a2005-08-19 20:40:30 +00004126 unlet w:swfkeep
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00004127 endif
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00004128
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004129" call Dret("NetOptionRestore")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004130endfun
4131
4132" ------------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004133" NetReadFixup: this sort of function is typically written by the user {{{2
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00004134" to handle extra junk that their system's ftp dumps
4135" into the transfer. This function is provided as an
4136" example and as a fix for a Windows 95 problem: in my
4137" experience, win95's ftp always dumped four blank lines
4138" at the end of the transfer.
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004139if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
Bram Moolenaar071d4272004-06-13 20:20:40 +00004140 fun! NetReadFixup(method, line1, line2)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004141" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004142 if method == 3 " ftp (no <.netrc>)
4143 let fourblanklines= line2 - 3
4144 silent fourblanklines.",".line2."g/^\s*/d"
4145 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004146" call Dret("NetReadFixup")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004147 endfun
4148endif
4149
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00004150" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004151" NetSort: Piet Delport's BISort2() function, modified to take a range {{{2
Bram Moolenaar83bab712005-08-01 21:58:57 +00004152if v:version < 700
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00004153 fun! s:NetSort() range
Bram Moolenaar83bab712005-08-01 21:58:57 +00004154" " call Dfunc("NetSort()")
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00004155
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00004156 let i = a:firstline + 1
4157 while i <= a:lastline
4158 " find insertion point via binary search
4159 let i_val = getline(i)
4160 let lo = a:firstline
4161 let hi = i
4162 while lo < hi
Bram Moolenaar83bab712005-08-01 21:58:57 +00004163 let mid = (lo + hi) / 2
4164 let mid_val = getline(mid)
4165 if g:netrw_sort_direction =~ '^n'
4166 " normal sorting order
4167 if i_val < mid_val
4168 let hi = mid
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00004169 else
Bram Moolenaar83bab712005-08-01 21:58:57 +00004170 let lo = mid + 1
4171 if i_val == mid_val | break | endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00004172 endif
Bram Moolenaar83bab712005-08-01 21:58:57 +00004173 else
4174 " reverse sorting order
4175 if i_val > mid_val
4176 let hi = mid
4177 else
4178 let lo = mid + 1
4179 if i_val == mid_val | break | endif
4180 endif
4181 endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00004182 endwhile
4183 " do insert
4184 if lo < i
Bram Moolenaar83bab712005-08-01 21:58:57 +00004185 exe 'keepjumps '.i.'d_'
4186 keepjumps call append(lo - 1, i_val)
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00004187 endif
4188 let i = i + 1
4189 endwhile
Bram Moolenaar4ea8fe12006-03-09 22:32:39 +00004190
Bram Moolenaar83bab712005-08-01 21:58:57 +00004191" " call Dret("NetSort")
4192 endfun
4193endif
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00004194
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004195" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004196" SetSort: sets up the sort based on the g:netrw_sort_sequence {{{2
Bram Moolenaar8299df92004-07-10 09:47:34 +00004197" What this function does is to compute a priority for the patterns
4198" in the g:netrw_sort_sequence. It applies a substitute to any
4199" "files" that satisfy each pattern, putting the priority / in
4200" front. An "*" pattern handles the default priority.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00004201fun! s:SetSort()
Bram Moolenaar488c6512005-08-11 20:09:58 +00004202" call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
Bram Moolenaar578b49e2005-09-10 19:22:57 +00004203 if w:netrw_longlist == 1
Bram Moolenaar8299df92004-07-10 09:47:34 +00004204 let seqlist = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
4205 else
4206 let seqlist = g:netrw_sort_sequence
4207 endif
4208 " sanity check -- insure that * appears somewhere
4209 if seqlist == ""
4210 let seqlist= '*'
4211 elseif seqlist !~ '\*'
4212 let seqlist= seqlist.',*'
4213 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004214 let priority = 1
4215 while seqlist != ""
4216 if seqlist =~ ','
4217 let seq = substitute(seqlist,',.*$','','e')
4218 let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e')
4219 else
4220 let seq = seqlist
4221 let seqlist = ""
4222 endif
4223 let eseq= escape(seq,'/')
4224 if priority < 10
4225 let spriority= "00".priority.'\/'
4226 elseif priority < 100
4227 let spriority= "0".priority.'\/'
4228 else
4229 let spriority= priority.'\/'
4230 endif
4231" call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
4232
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00004233 " sanity check
Bram Moolenaar488c6512005-08-11 20:09:58 +00004234 if w:netrw_bannercnt > line("$")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00004235 " apparently no files were left after a Hiding pattern was used
4236" call Dret("SetSort : no files left after hiding")
4237 return
4238 endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004239 if seq == '*'
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004240 exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004241 else
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004242 exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004243 endif
4244 let priority = priority + 1
4245 endwhile
4246
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00004247 " Following line associated with priority -- items that satisfy a priority
4248 " pattern get prefixed by ###/ which permits easy sorting by priority.
4249 " Sometimes files can satisfy multiple priority patterns -- only the latest
4250 " priority pattern needs to be retained. So, at this point, these excess
4251 " priority prefixes need to be removed, but not directories that happen to
4252 " be just digits themselves.
Bram Moolenaar8dff8182006-04-06 20:18:50 +00004253 exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+\ze./\1/e'
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +00004254
4255" call Dret("SetSort")
4256endfun
4257
Bram Moolenaar488c6512005-08-11 20:09:58 +00004258" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004259" SaveWinVars: (used by Explore()) {{{2
Bram Moolenaar488c6512005-08-11 20:09:58 +00004260fun! s:SaveWinVars()
4261" call Dfunc("SaveWinVars()")
4262 if exists("w:netrw_bannercnt") |let s:bannercnt = w:netrw_bannercnt |endif
4263 if exists("w:netrw_method") |let s:method = w:netrw_method |endif
4264 if exists("w:netrw_prvdir") |let s:prvdir = w:netrw_prvdir |endif
4265 if exists("w:netrw_explore_indx") |let s:explore_indx = w:netrw_explore_indx |endif
4266 if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif
4267 if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif
4268 if exists("w:netrw_explore_bufnr") |let s:explore_bufnr = w:netrw_explore_bufnr |endif
4269 if exists("w:netrw_explore_line") |let s:explore_line = w:netrw_explore_line |endif
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00004270 if exists("w:netrw_explore_list") |let s:explore_list = w:netrw_explore_list |endif
Bram Moolenaar488c6512005-08-11 20:09:58 +00004271" call Dret("SaveWinVars")
4272endfun
4273
4274" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004275" CopyWinVars: (used by Explore()) {{{2
Bram Moolenaar488c6512005-08-11 20:09:58 +00004276fun! s:CopyWinVars()
4277" call Dfunc("CopyWinVars()")
4278 if exists("s:bannercnt") |let w:netrw_bannercnt = s:bannercnt |unlet s:bannercnt |endif
4279 if exists("s:method") |let w:netrw_method = s:method |unlet s:method |endif
4280 if exists("s:prvdir") |let w:netrw_prvdir = s:prvdir |unlet s:prvdir |endif
4281 if exists("s:explore_indx") |let w:netrw_explore_indx = s:explore_indx |unlet s:explore_indx |endif
4282 if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif
4283 if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif
4284 if exists("s:explore_bufnr") |let w:netrw_explore_bufnr = s:explore_bufnr |unlet s:explore_bufnr |endif
4285 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 +00004286 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 +00004287" call Dret("CopyWinVars")
4288endfun
4289
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00004290" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004291" SetBufWinVars: (used by NetBrowse() and LocalBrowse()) {{{2
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00004292" To allow separate windows to have their own activities, such as
4293" Explore **/pattern, several variables have been made window-oriented.
4294" However, when the user splits a browser window (ex: ctrl-w s), these
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004295" variables are not inherited by the new window. SetBufWinVars() and
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00004296" UseBufWinVars() get around that.
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004297fun! s:SetBufWinVars()
4298" call Dfunc("SetBufWinVars()")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00004299 if exists("w:netrw_longlist") |let b:netrw_longlist = w:netrw_longlist |endif
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00004300 if exists("w:netrw_bannercnt") |let b:netrw_bannercnt = w:netrw_bannercnt |endif
4301 if exists("w:netrw_method") |let b:netrw_method = w:netrw_method |endif
4302 if exists("w:netrw_prvdir") |let b:netrw_prvdir = w:netrw_prvdir |endif
4303 if exists("w:netrw_explore_indx") |let b:netrw_explore_indx = w:netrw_explore_indx |endif
4304 if exists("w:netrw_explore_listlen")|let b:netrw_explore_listlen = w:netrw_explore_listlen|endif
4305 if exists("w:netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt = w:netrw_explore_mtchcnt|endif
4306 if exists("w:netrw_explore_bufnr") |let b:netrw_explore_bufnr = w:netrw_explore_bufnr |endif
4307 if exists("w:netrw_explore_line") |let b:netrw_explore_line = w:netrw_explore_line |endif
4308 if exists("w:netrw_explore_list") |let b:netrw_explore_list = w:netrw_explore_list |endif
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004309" call Dret("SetBufWinVars")
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00004310endfun
4311
4312" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004313" UseBufWinVars: (used by NetBrowse() and LocalBrowse() {{{2
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00004314" Matching function to BufferWinVars()
4315fun! s:UseBufWinVars()
4316" call Dfunc("UseBufWinVars()")
Bram Moolenaar578b49e2005-09-10 19:22:57 +00004317 if exists("b:netrw_longlist") && !exists("w:netrw_longlist") |let w:netrw_longlist = b:netrw_longlist |endif
Bram Moolenaar90cfdbe2005-08-12 19:59:19 +00004318 if exists("b:netrw_bannercnt") && !exists("w:netrw_bannercnt") |let w:netrw_bannercnt = b:netrw_bannercnt |endif
4319 if exists("b:netrw_method") && !exists("w:netrw_method") |let w:netrw_method = b:netrw_method |endif
4320 if exists("b:netrw_prvdir") && !exists("w:netrw_prvdir") |let w:netrw_prvdir = b:netrw_prvdir |endif
4321 if exists("b:netrw_explore_indx") && !exists("w:netrw_explore_indx") |let w:netrw_explore_indx = b:netrw_explore_indx |endif
4322 if exists("b:netrw_explore_listlen") && !exists("w:netrw_explore_listlen")|let w:netrw_explore_listlen = b:netrw_explore_listlen|endif
4323 if exists("b:netrw_explore_mtchcnt") && !exists("w:netrw_explore_mtchcnt")|let w:netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif
4324 if exists("b:netrw_explore_bufnr") && !exists("w:netrw_explore_bufnr") |let w:netrw_explore_bufnr = b:netrw_explore_bufnr |endif
4325 if exists("b:netrw_explore_line") && !exists("w:netrw_explore_line") |let w:netrw_explore_line = b:netrw_explore_line |endif
4326 if exists("b:netrw_explore_list") && !exists("w:netrw_explore_list") |let w:netrw_explore_list = b:netrw_explore_list |endif
4327" call Dret("UseBufWinVars")
4328endfun
4329
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004330" ---------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004331" RFC2396: converts %xx into characters {{{2
Bram Moolenaar1afcace2005-11-25 19:54:28 +00004332fun! netrw#RFC2396(fname)
4333" call Dfunc("RFC2396(fname<".a:fname.">)")
4334 let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t")
4335" call Dret("RFC2396 ".fname)
4336 return fname
4337endfun
4338
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00004339" ------------------------------------------------------------------------
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004340" Settings Restoration: {{{2
Bram Moolenaar83bab712005-08-01 21:58:57 +00004341let &cpo= s:keepcpo
4342unlet s:keepcpo
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00004343
Bram Moolenaar071d4272004-06-13 20:20:40 +00004344" ------------------------------------------------------------------------
Bram Moolenaar83bab712005-08-01 21:58:57 +00004345" Modelines: {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +00004346" vim:ts=8 fdm=marker