Mercurial > vim
annotate runtime/autoload/netrw.vim @ 2751:b0d34143ebfc
Updated runtime files.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Fri, 01 Apr 2011 18:03:16 +0200 |
parents | e52d87a2bb3e |
children | fd09a9c8468e |
rev | line source |
---|---|
1121 | 1 " netrw.vim: Handles file transfer and remote directory listing across |
2 " AUTOLOAD SECTION | |
2751 | 3 " Date: Apr 01, 2011 |
4 " Version: 141 | |
1121 | 5 " Maintainer: Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM> |
482 | 6 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
7 " Copyright: Copyright (C) 1999-2010 Charles E. Campbell, Jr. {{{1 |
482 | 8 " 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, | |
559 | 11 " netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided |
1621 | 12 " *as is* and come with no warranty of any kind, either |
559 | 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. | |
1621 | 16 "redraw!|call DechoSep()|call inputsave()|call input("Press <cr> to continue")|call inputrestore() |
482 | 17 " |
18 " But be doers of the Word, and not only hearers, deluding your own selves {{{1 | |
19 " (James 1:22 RSV) | |
20 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
1121 | 21 " Load Once: {{{1 |
559 | 22 if &cp || exists("g:loaded_netrw") |
23 finish | |
24 endif | |
2751 | 25 let g:loaded_netrw = "v141" |
2034 | 26 if v:version < 702 |
27 echohl WarningMsg | |
28 echo "***warning*** this version of netrw needs vim 7.2" | |
29 echohl Normal | |
30 finish | |
31 endif | |
1121 | 32 if !exists("s:NOTE") |
33 let s:NOTE = 0 | |
34 let s:WARNING = 1 | |
35 let s:ERROR = 2 | |
36 endif | |
1621 | 37 |
38 " sanity checks | |
519 | 39 if v:version < 700 |
1121 | 40 call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1) |
519 | 41 finish |
42 endif | |
1621 | 43 |
559 | 44 let s:keepcpo= &cpo |
1121 | 45 setlocal cpo&vim |
46 "DechoTabOn | |
47 "call Decho("doing autoload/netrw.vim version ".g:loaded_netrw) | |
482 | 48 |
650 | 49 " ====================== |
50 " Netrw Variables: {{{1 | |
51 " ====================== | |
52 | |
482 | 53 " --------------------------------------------------------------------- |
2034 | 54 " NetrwInit: initializes variables if they haven't been defined {{{2 |
55 " Loosely, varname = value. | |
56 fun s:NetrwInit(varname,value) | |
57 if !exists(a:varname) | |
58 if type(a:value) == 0 | |
59 exe "let ".a:varname."=".a:value | |
60 elseif type(a:value) == 1 | |
61 exe "let ".a:varname."="."'".a:value."'" | |
62 else | |
63 exe "let ".a:varname."=".a:value | |
64 endif | |
65 endif | |
66 endfun | |
67 | |
68 " --------------------------------------------------------------------- | |
1121 | 69 " Netrw Constants: {{{2 |
2034 | 70 call s:NetrwInit("g:netrw_dirhist_cnt",0) |
1121 | 71 if !exists("s:LONGLIST") |
2034 | 72 call s:NetrwInit("s:THINLIST",0) |
73 call s:NetrwInit("s:LONGLIST",1) | |
74 call s:NetrwInit("s:WIDELIST",2) | |
75 call s:NetrwInit("s:TREELIST",3) | |
76 call s:NetrwInit("s:MAXLIST" ,4) | |
1121 | 77 endif |
78 | |
79 " --------------------------------------------------------------------- | |
650 | 80 " Default values for netrw's global protocol variables {{{2 |
2751 | 81 call s:NetrwInit("g:netrw_use_errorwindow",1) |
82 | |
559 | 83 if !exists("g:netrw_dav_cmd") |
2034 | 84 if executable("cadaver") |
559 | 85 let g:netrw_dav_cmd = "cadaver" |
2034 | 86 elseif executable("curl") |
87 let g:netrw_dav_cmd = "curl" | |
88 else | |
89 let g:netrw_dav_cmd = "" | |
90 endif | |
559 | 91 endif |
92 if !exists("g:netrw_fetch_cmd") | |
93 if executable("fetch") | |
94 let g:netrw_fetch_cmd = "fetch -o" | |
95 else | |
96 let g:netrw_fetch_cmd = "" | |
97 endif | |
98 endif | |
99 if !exists("g:netrw_ftp_cmd") | |
100 let g:netrw_ftp_cmd = "ftp" | |
101 endif | |
2751 | 102 let s:netrw_ftp_cmd= g:netrw_ftp_cmd |
559 | 103 if !exists("g:netrw_http_cmd") |
1698 | 104 if executable("elinks") |
105 let g:netrw_http_cmd = "elinks" | |
2034 | 106 call s:NetrwInit("g:netrw_http_xcmd","-source >") |
1698 | 107 elseif executable("links") |
108 let g:netrw_http_cmd = "links" | |
2034 | 109 call s:NetrwInit("g:netrw_http_xcmd","-source >") |
1698 | 110 elseif executable("curl") |
2034 | 111 let g:netrw_http_cmd = "curl" |
112 call s:NetrwInit("g:netrw_http_xcmd","-o") | |
1121 | 113 elseif executable("wget") |
2034 | 114 let g:netrw_http_cmd = "wget" |
115 call s:NetrwInit("g:netrw_http_xcmd","-q -O") | |
559 | 116 elseif executable("fetch") |
2034 | 117 let g:netrw_http_cmd = "fetch" |
118 call s:NetrwInit("g:netrw_http_xcmd","-o") | |
559 | 119 else |
120 let g:netrw_http_cmd = "" | |
121 endif | |
122 endif | |
2034 | 123 call s:NetrwInit("g:netrw_rcp_cmd" , "rcp") |
124 call s:NetrwInit("g:netrw_rsync_cmd", "rsync") | |
125 call s:NetrwInit("g:netrw_scp_cmd" , "scp -q") | |
126 call s:NetrwInit("g:netrw_sftp_cmd" , "sftp") | |
127 call s:NetrwInit("g:netrw_ssh_cmd" , "ssh") | |
559 | 128 |
719 | 129 if (has("win32") || has("win95") || has("win64") || has("win16")) |
559 | 130 \ && exists("g:netrw_use_nt_rcp") |
131 \ && g:netrw_use_nt_rcp | |
132 \ && executable( $SystemRoot .'/system32/rcp.exe') | |
133 let s:netrw_has_nt_rcp = 1 | |
134 let s:netrw_rcpmode = '-b' | |
1121 | 135 else |
559 | 136 let s:netrw_has_nt_rcp = 0 |
137 let s:netrw_rcpmode = '' | |
138 endif | |
139 | |
140 " --------------------------------------------------------------------- | |
650 | 141 " Default values for netrw's global variables {{{2 |
1621 | 142 " Cygwin Detection ------- {{{3 |
143 if !exists("g:netrw_cygwin") | |
144 if has("win32") || has("win95") || has("win64") || has("win16") | |
145 if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$' | |
146 let g:netrw_cygwin= 1 | |
147 else | |
148 let g:netrw_cygwin= 0 | |
149 endif | |
150 else | |
151 let g:netrw_cygwin= 0 | |
152 endif | |
153 endif | |
650 | 154 " Default values - a-c ---------- {{{3 |
2034 | 155 call s:NetrwInit("g:netrw_alto" , &sb) |
156 call s:NetrwInit("g:netrw_altv" , &spr) | |
157 call s:NetrwInit("g:netrw_banner" , 1) | |
158 call s:NetrwInit("g:netrw_browse_split", 0) | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
159 call s:NetrwInit("g:netrw_bufsettings" , "noma nomod nonu nobl nowrap ro") |
2034 | 160 call s:NetrwInit("g:netrw_chgwin" , -1) |
161 call s:NetrwInit("g:netrw_compress" , "gzip") | |
162 call s:NetrwInit("g:netrw_ctags" , "ctags") | |
2751 | 163 if exists("g:netrw_cursorline") && !exists("g:netrw_cursor") |
164 call netrw#ErrorMsg(s:NOTE,'g:netrw_cursorline is deprecated; use g:netrw_cursor instead',77) | |
165 let g:netrw_cursor= g:netrw_cursorline | |
1621 | 166 endif |
2751 | 167 call s:NetrwInit("g:netrw_cursor" , 2) |
168 let s:netrw_usercul = &cursorline | |
169 let s:netrw_usercuc = &cursorcolumn | |
1621 | 170 " Default values - d-g ---------- {{{3 |
2034 | 171 call s:NetrwInit("g:netrw_dirhist_cnt" , 0) |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
172 call s:NetrwInit("g:netrw_decompress" , '{ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf", ".xz" : "unxz" }') |
2034 | 173 call s:NetrwInit("g:netrw_dirhistmax" , 10) |
174 call s:NetrwInit("g:netrw_fastbrowse" , 1) | |
175 call s:NetrwInit("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$') | |
482 | 176 if !exists("g:netrw_ftp_list_cmd") |
1121 | 177 if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin) |
178 let g:netrw_ftp_list_cmd = "ls -lF" | |
179 let g:netrw_ftp_timelist_cmd = "ls -tlF" | |
180 let g:netrw_ftp_sizelist_cmd = "ls -slF" | |
482 | 181 else |
1121 | 182 let g:netrw_ftp_list_cmd = "dir" |
183 let g:netrw_ftp_timelist_cmd = "dir" | |
184 let g:netrw_ftp_sizelist_cmd = "dir" | |
482 | 185 endif |
186 endif | |
2034 | 187 call s:NetrwInit("g:netrw_ftpmode",'binary') |
650 | 188 " Default values - h-lh ---------- {{{3 |
2034 | 189 call s:NetrwInit("g:netrw_hide",1) |
1121 | 190 if !exists("g:netrw_ignorenetrc") |
191 if &shell =~ '\c\<\%(cmd\|4nt\)\.exe$' | |
192 let g:netrw_ignorenetrc= 1 | |
193 else | |
194 let g:netrw_ignorenetrc= 0 | |
195 endif | |
196 endif | |
2034 | 197 call s:NetrwInit("g:netrw_keepdir",1) |
559 | 198 if !exists("g:netrw_list_cmd") |
1121 | 199 if g:netrw_scp_cmd =~ '^pscp' && executable("pscp") |
200 " provide a 'pscp' listing command | |
201 if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable("c:\\private.ppk") | |
202 let g:netrw_scp_cmd ="pscp -i C:\\private.ppk" | |
203 endif | |
204 let g:netrw_list_cmd= g:netrw_scp_cmd." -ls USEPORT HOSTNAME:" | |
205 elseif executable(g:netrw_ssh_cmd) | |
559 | 206 " provide a default listing command |
1121 | 207 let g:netrw_list_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME ls -FLa" |
559 | 208 else |
1121 | 209 " call Decho(g:netrw_ssh_cmd." is not executable") |
559 | 210 let g:netrw_list_cmd= "" |
211 endif | |
212 endif | |
2034 | 213 call s:NetrwInit("g:netrw_list_hide","") |
650 | 214 " Default values - lh-lz ---------- {{{3 |
1621 | 215 if !exists("g:netrw_localcopycmd") |
216 if has("win32") || has("win95") || has("win64") || has("win16") | |
217 if g:netrw_cygwin | |
218 let g:netrw_localcopycmd= "cp" | |
219 else | |
220 let g:netrw_localcopycmd= "copy" | |
221 endif | |
222 elseif has("unix") || has("macunix") | |
223 let g:netrw_localcopycmd= "cp" | |
224 else | |
225 let g:netrw_localcopycmd= "" | |
226 endif | |
227 endif | |
2034 | 228 call s:NetrwInit("g:netrw_local_mkdir","mkdir") |
1621 | 229 if !exists("g:netrw_localmovecmd") |
230 if has("win32") || has("win95") || has("win64") || has("win16") | |
231 if g:netrw_cygwin | |
232 let g:netrw_localmovecmd= "mv" | |
233 else | |
234 let g:netrw_localmovecmd= "move" | |
235 endif | |
236 elseif has("unix") || has("macunix") | |
237 let g:netrw_localmovecmd= "mv" | |
238 else | |
239 let g:netrw_localmovecmd= "" | |
240 endif | |
241 endif | |
2034 | 242 call s:NetrwInit("g:netrw_local_rmdir", "rmdir") |
243 call s:NetrwInit("g:netrw_liststyle" , s:THINLIST) | |
244 " sanity checks | |
1121 | 245 if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST |
246 let g:netrw_liststyle= s:THINLIST | |
559 | 247 endif |
1121 | 248 if g:netrw_liststyle == s:LONGLIST && g:netrw_scp_cmd !~ '^pscp' |
559 | 249 let g:netrw_list_cmd= g:netrw_list_cmd." -l" |
250 endif | |
650 | 251 " Default values - m-r ---------- {{{3 |
2034 | 252 call s:NetrwInit("g:netrw_markfileesc" , '*./[\~') |
253 call s:NetrwInit("g:netrw_maxfilenamelen", 32) | |
254 call s:NetrwInit("g:netrw_menu" , 1) | |
255 call s:NetrwInit("g:netrw_mkdir_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir") | |
256 call s:NetrwInit("g:netrw_mousemaps" , (exists("&mouse") && &mouse =~ '[anh]')) | |
257 call s:NetrwInit("g:netrw_retmap" , 0) | |
258 if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin) | |
259 call s:NetrwInit("g:netrw_chgperm" , "chmod PERM FILENAME") | |
260 elseif has("win32") || has("win95") || has("win64") || has("win16") | |
261 call s:NetrwInit("g:netrw_chgperm" , "cacls FILENAME /e /p PERM") | |
262 else | |
263 call s:NetrwInit("g:netrw_chgperm" , "chmod PERM FILENAME") | |
1121 | 264 endif |
2034 | 265 call s:NetrwInit("g:netrw_preview" , 0) |
266 call s:NetrwInit("g:netrw_scpport" , "-P") | |
267 call s:NetrwInit("g:netrw_sshport" , "-p") | |
268 call s:NetrwInit("g:netrw_rename_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME mv") | |
269 call s:NetrwInit("g:netrw_rm_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME rm") | |
270 call s:NetrwInit("g:netrw_rmdir_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME rmdir") | |
271 call s:NetrwInit("g:netrw_rmf_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f") | |
272 " Default values - s ---------- {{{3 | |
273 " g:netrw_sepchr: picking a character that doesn't appear in filenames that can be used to separate priority from filename | |
274 call s:NetrwInit("g:netrw_sepchr" , (&enc == "euc-jp")? "\<Char-0x01>" : "\<Char-0xff>") | |
2751 | 275 call s:NetrwInit("s:netrw_silentxfer" , (exists("g:netrw_silent") && g:netrw_silent != 0)? "sil keepj " : "keepj ") |
2034 | 276 call s:NetrwInit("g:netrw_sort_by" , "name") " alternatives: date , size |
277 call s:NetrwInit("g:netrw_sort_options" , "") | |
278 call s:NetrwInit("g:netrw_sort_direction", "normal") " alternative: reverse (z y x ...) | |
279 if !exists("g:netrw_sort_sequence") | |
280 if has("unix") | |
281 let g:netrw_sort_sequence= '[\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$' | |
1621 | 282 else |
2034 | 283 let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$' |
1621 | 284 endif |
285 endif | |
2034 | 286 call s:NetrwInit("g:netrw_special_syntax" , 0) |
287 call s:NetrwInit("g:netrw_ssh_browse_reject", '^total\s\+\d\+$') | |
288 call s:NetrwInit("g:netrw_use_noswf" , 0) | |
650 | 289 " Default values - t-w ---------- {{{3 |
2034 | 290 call s:NetrwInit("g:netrw_timefmt","%c") |
291 call s:NetrwInit("g:netrw_xstrlen",0) | |
292 call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.") | |
293 call s:NetrwInit("g:netrw_win95ftp",1) | |
2152 | 294 call s:NetrwInit("g:netrw_winsize",25) |
559 | 295 " --------------------------------------------------------------------- |
650 | 296 " Default values for netrw's script variables: {{{2 |
2034 | 297 call s:NetrwInit("g:netrw_fname_escape",' ?&;%') |
2152 | 298 if has("win32") || has("win95") || has("win64") || has("win16") |
299 call s:NetrwInit("g:netrw_glob_escape",'[]*?`{$') | |
300 else | |
301 call s:NetrwInit("g:netrw_glob_escape",'[]*?`{~$\') | |
302 endif | |
303 call s:NetrwInit("g:netrw_menu_escape",'./&? \') | |
2034 | 304 call s:NetrwInit("g:netrw_tmpfile_escape",' &;') |
305 call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"") | |
482 | 306 |
307 " BufEnter event ignored by decho when following variable is true | |
308 " Has a side effect that doau BufReadPost doesn't work, so | |
309 " files read by network transfer aren't appropriately highlighted. | |
310 "let g:decho_bufenter = 1 "Decho | |
311 | |
2751 | 312 " ====================== |
313 " Netrw Initialization: {{{1 | |
314 " ====================== | |
315 if v:version >= 700 && has("balloon_eval") && &beval == 0 | |
316 let &l:bexpr= "netrw#NetrwBalloonHelp()" | |
317 set beval | |
318 endif | |
319 | |
650 | 320 " ============================== |
321 " Netrw Utility Functions: {{{1 | |
322 " ============================== | |
323 | |
2751 | 324 " --------------------------------------------------------------------- |
325 " netrw#NetrwBalloonHelp: {{{2 | |
326 if v:version >= 700 && has("balloon_eval") && &beval == 1 | |
327 fun! netrw#NetrwBalloonHelp() | |
328 if !exists("w:netrw_bannercnt") || v:beval_lnum >= w:netrw_bannercnt | |
329 let mesg= "" | |
330 elseif v:beval_text == "Netrw" || v:beval_text == "Directory" || v:beval_text == "Listing" | |
331 let mesg = "i: thin-long-wide-tree gh: quick hide/unhide of dot-files qf: quick file info" | |
332 elseif getline(v:beval_lnum) =~ '^"\s*/' | |
333 let mesg = "<cr>: edit/enter o: edit/enter in horiz window t: edit/enter in new tab v:edit/enter in vert window" | |
334 elseif v:beval_text == "Sorted" || v:beval_text == "by" | |
335 let mesg = 's: sort by name, time, or file size r: reverse sorting order mt: mark target' | |
336 elseif v:beval_text == "Sort" || v:beval_text == "sequence" | |
337 let mesg = "S: edit sorting sequence" | |
338 elseif v:beval_text == "Hiding" || v:beval_text == "Showing" | |
339 let mesg = "a: hiding-showing-all ctrl-h: editing hiding list mh: hide/show by suffix" | |
340 elseif v:beval_text == "Quick" || v:beval_text == "Help" | |
341 let mesg = "Help: press <F1>" | |
342 elseif v:beval_text == "Copy/Move" || v:beval_text == "Tgt" | |
343 let mesg = "mt: mark target mc: copy marked file to target mm: move marked file to target" | |
344 else | |
345 let mesg= "" | |
346 endif | |
347 return mesg | |
348 endfun | |
349 endif | |
350 | |
482 | 351 " ------------------------------------------------------------------------ |
1621 | 352 " s:NetrwOptionSave: save options and set to "standard" form {{{2 |
353 " 06/08/07 : removed call to NetrwSafeOptions(), either placed | |
354 " immediately after NetrwOptionSave() calls in NetRead | |
355 " and NetWrite, or after the s:NetrwEnew() call in | |
356 " NetrwBrowse. | |
357 " vt: normally its "w:" or "s:" (a variable type) | |
358 fun! s:NetrwOptionSave(vt) | |
2034 | 359 " call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$")) |
1621 | 360 |
361 " call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist")) | |
362 if !exists("{a:vt}netrw_optionsave") | |
363 let {a:vt}netrw_optionsave= 1 | |
1121 | 364 else |
1621 | 365 " call Dret("s:NetrwOptionSave : options already saved") |
1121 | 366 return |
367 endif | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
368 " call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff) |
1121 | 369 |
370 " Save current settings and current directory | |
371 let s:yykeep = @@ | |
372 if exists("&l:acd") | |
1621 | 373 let {a:vt}netrw_acdkeep = &l:acd |
374 endif | |
375 let {a:vt}netrw_aikeep = &l:ai | |
376 let {a:vt}netrw_awkeep = &l:aw | |
2152 | 377 let {a:vt}netrw_bombkeep = &l:bomb |
1621 | 378 let {a:vt}netrw_cikeep = &l:ci |
379 let {a:vt}netrw_cinkeep = &l:cin | |
380 let {a:vt}netrw_cinokeep = &l:cino | |
381 let {a:vt}netrw_comkeep = &l:com | |
382 let {a:vt}netrw_cpokeep = &l:cpo | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
383 let {a:vt}netrw_diffkeep = &l:diff |
1121 | 384 if g:netrw_keepdir |
1621 | 385 let {a:vt}netrw_dirkeep = getcwd() |
386 endif | |
387 let {a:vt}netrw_fokeep = &l:fo " formatoptions | |
388 let {a:vt}netrw_gdkeep = &l:gd " gdefault | |
389 let {a:vt}netrw_hidkeep = &l:hidden | |
2152 | 390 let {a:vt}netrw_imkeep = &l:im |
1621 | 391 let {a:vt}netrw_magickeep = &l:magic |
392 let {a:vt}netrw_repkeep = &l:report | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
393 let {a:vt}netrw_selkeep = &l:sel |
1621 | 394 let {a:vt}netrw_spellkeep = &l:spell |
395 let {a:vt}netrw_twkeep = &l:tw " textwidth | |
396 let {a:vt}netrw_wigkeep = &l:wig " wildignore | |
1121 | 397 if has("win32") && !has("win95") |
1668 | 398 let {a:vt}netrw_swfkeep = &l:swf " swapfile |
1621 | 399 endif |
2751 | 400 if &go =~# 'a' | sil! let {a:vt}netrw_regstar = @* | endif |
401 sil! let {a:vt}netrw_regslash= @/ | |
1621 | 402 |
403 " call Dret("s:NetrwOptionSave : win#".winnr()." buf#".bufnr("%")) | |
1121 | 404 endfun |
405 | |
406 " ------------------------------------------------------------------------ | |
1621 | 407 " s:NetrwOptionRestore: restore options {{{2 |
408 fun! s:NetrwOptionRestore(vt) | |
2034 | 409 " call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")." winnr($)=".winnr("$")) |
1621 | 410 if !exists("{a:vt}netrw_optionsave") |
1668 | 411 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
1621 | 412 " call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist") |
1121 | 413 return |
414 endif | |
1621 | 415 unlet {a:vt}netrw_optionsave |
1121 | 416 |
417 if exists("&acd") | |
1621 | 418 if exists("{a:vt}netrw_acdkeep") |
419 " call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) | |
420 let curdir = getcwd() | |
421 let &l:acd = {a:vt}netrw_acdkeep | |
422 unlet {a:vt}netrw_acdkeep | |
423 if &l:acd | |
424 " call Decho("exe keepjumps lcd ".fnameescape(curdir)) " NOTE: was g:netrw_fname_escape for some reason | |
425 try | |
426 if !exists("&l:acd") && !&l:acd | |
2152 | 427 exe 'keepj lcd '.fnameescape(curdir) |
1621 | 428 endif |
429 catch /^Vim\%((\a\+)\)\=:E472/ | |
430 call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".curdir."> (permissions?)",61) | |
431 endtry | |
432 endif | |
433 endif | |
434 endif | |
435 if exists("{a:vt}netrw_aikeep") |let &l:ai = {a:vt}netrw_aikeep |unlet {a:vt}netrw_aikeep |endif | |
436 if exists("{a:vt}netrw_awkeep") |let &l:aw = {a:vt}netrw_awkeep |unlet {a:vt}netrw_awkeep |endif | |
2152 | 437 if exists("{a:vt}netrw_bombkeep") |let &l:bomb = {a:vt}netrw_bombkeep |unlet {a:vt}netrw_bombkeep |endif |
1621 | 438 if exists("{a:vt}netrw_cikeep") |let &l:ci = {a:vt}netrw_cikeep |unlet {a:vt}netrw_cikeep |endif |
439 if exists("{a:vt}netrw_cinkeep") |let &l:cin = {a:vt}netrw_cinkeep |unlet {a:vt}netrw_cinkeep |endif | |
440 if exists("{a:vt}netrw_cinokeep") |let &l:cino = {a:vt}netrw_cinokeep |unlet {a:vt}netrw_cinokeep |endif | |
441 if exists("{a:vt}netrw_comkeep") |let &l:com = {a:vt}netrw_comkeep |unlet {a:vt}netrw_comkeep |endif | |
442 if exists("{a:vt}netrw_cpokeep") |let &l:cpo = {a:vt}netrw_cpokeep |unlet {a:vt}netrw_cpokeep |endif | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
443 if exists("{a:vt}netrw_diffkeep") |let &l:diff = {a:vt}netrw_diffkeep |unlet {a:vt}netrw_diffkeep |endif |
1621 | 444 if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir |
445 let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g') | |
446 if exists("{a:vt}netrw_dirkeep") |exe "keepjumps lcd ".fnameescape(dirkeep)|unlet {a:vt}netrw_dirkeep |endif | |
447 endif | |
448 if exists("{a:vt}netrw_fokeep") |let &l:fo = {a:vt}netrw_fokeep |unlet {a:vt}netrw_fokeep |endif | |
449 if exists("{a:vt}netrw_gdkeep") |let &l:gd = {a:vt}netrw_gdkeep |unlet {a:vt}netrw_gdkeep |endif | |
450 if exists("{a:vt}netrw_hidkeep") |let &l:hidden = {a:vt}netrw_hidkeep |unlet {a:vt}netrw_hidkeep |endif | |
2152 | 451 if exists("{a:vt}netrw_imkeep") |let &l:im = {a:vt}netrw_imkeep |unlet {a:vt}netrw_imkeep |endif |
1621 | 452 if exists("{a:vt}netrw_magic") |let &l:magic = {a:vt}netrw_magic |unlet {a:vt}netrw_magic |endif |
453 if exists("{a:vt}netrw_repkeep") |let &l:report = {a:vt}netrw_repkeep |unlet {a:vt}netrw_repkeep |endif | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
454 if exists("{a:vt}netrw_selkeep") |let &l:sel = {a:vt}netrw_selkeep |unlet {a:vt}netrw_selkeep |endif |
1621 | 455 if exists("{a:vt}netrw_spellkeep")|let &l:spell = {a:vt}netrw_spellkeep |unlet {a:vt}netrw_spellkeep|endif |
456 if exists("{a:vt}netrw_twkeep") |let &l:tw = {a:vt}netrw_twkeep |unlet {a:vt}netrw_twkeep |endif | |
457 if exists("{a:vt}netrw_wigkeep") |let &l:wig = {a:vt}netrw_wigkeep |unlet {a:vt}netrw_wigkeep |endif | |
458 if exists("s:yykeep") |let @@ = s:yykeep |unlet s:yykeep |endif | |
459 if exists("{a:vt}netrw_swfkeep") | |
1121 | 460 if &directory == "" |
461 " user hasn't specified a swapfile directory; | |
462 " netrw will temporarily set the swapfile directory | |
463 " to the current directory as returned by getcwd(). | |
464 let &l:directory = getcwd() | |
2751 | 465 sil! let &l:swf = {a:vt}netrw_swfkeep |
1121 | 466 setlocal directory= |
1621 | 467 unlet {a:vt}netrw_swfkeep |
468 elseif &l:swf != {a:vt}netrw_swfkeep | |
469 " following line causes a Press ENTER in windows -- can't seem to work around it!!! | |
2751 | 470 sil! let &l:swf= {a:vt}netrw_swfkeep |
1621 | 471 unlet {a:vt}netrw_swfkeep |
472 endif | |
473 endif | |
2751 | 474 if exists("{a:vt}netrw_regstar") |sil! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif |
475 if exists("{a:vt}netrw_regslash")|sil! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif | |
1621 | 476 |
477 " call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) | |
478 " call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")) | |
1668 | 479 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
480 " call Decho("diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist")) |
1621 | 481 " call Dret("s:NetrwOptionRestore : win#".winnr()." buf#".bufnr("%")) |
1121 | 482 endfun |
483 | |
484 " --------------------------------------------------------------------- | |
1621 | 485 " s:NetrwSafeOptions: sets options to help netrw do its job {{{2 |
1121 | 486 fun! s:NetrwSafeOptions() |
2034 | 487 " call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%"))."> winnr($)=".winnr("$")) |
488 " call Decho("win#".winnr()."'s ft=".&ft) | |
1121 | 489 setlocal cino= |
490 setlocal com= | |
491 setlocal cpo-=aA | |
1621 | 492 if exists("&acd") | setlocal noacd | endif |
2152 | 493 setlocal nocin noai nobomb noci magic nospell nohid wig= noaw noim |
1621 | 494 setlocal fo=nroql2 |
1121 | 495 setlocal tw=0 |
496 setlocal report=10000 | |
2034 | 497 setlocal isk+=@ isk+=* isk+=/ |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
498 setlocal sel=inclusive |
1121 | 499 if g:netrw_use_noswf && has("win32") && !has("win95") |
500 setlocal noswf | |
501 endif | |
2751 | 502 call s:NetrwCursor() |
2034 | 503 |
504 " allow the user to override safe options | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
505 " call Decho("ft<".&ft."> ei=".&ei) |
2034 | 506 if &ft == "netrw" |
2152 | 507 " call Decho("do any netrw FileType autocmds") |
2751 | 508 sil keepalt keepj doau FileType netrw |
2034 | 509 endif |
510 | |
1621 | 511 " call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")) |
1121 | 512 " call Dret("s:NetrwSafeOptions") |
513 endfun | |
514 | |
1621 | 515 " --------------------------------------------------------------------- |
516 " netrw#NetrwClean: remove netrw {{{2 | |
517 " supports :NetrwClean -- remove netrw from first directory on runtimepath | |
518 " :NetrwClean! -- remove netrw from all directories on runtimepath | |
519 fun! netrw#NetrwClean(sys) | |
520 " call Dfunc("netrw#NetrwClean(sys=".a:sys.")") | |
521 | |
522 if a:sys | |
523 let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No") | |
524 else | |
525 let choice= confirm("Remove personal copy of netrw?","&Yes\n&No") | |
526 endif | |
527 " call Decho("choice=".choice) | |
528 let diddel= 0 | |
529 let diddir= "" | |
530 | |
531 if choice == 1 | |
532 for dir in split(&rtp,',') | |
533 if filereadable(dir."/plugin/netrwPlugin.vim") | |
534 " call Decho("removing netrw-related files from ".dir) | |
1668 | 535 if s:NetrwDelete(dir."/plugin/netrwPlugin.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55) |endif |
536 if s:NetrwDelete(dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif | |
537 if s:NetrwDelete(dir."/autoload/netrwSettings.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55) |endif | |
538 if s:NetrwDelete(dir."/autoload/netrw.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55) |endif | |
539 if s:NetrwDelete(dir."/syntax/netrw.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55) |endif | |
540 if s:NetrwDelete(dir."/syntax/netrwlist.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55) |endif | |
1621 | 541 let diddir= dir |
542 let diddel= diddel + 1 | |
543 if !a:sys|break|endif | |
544 endif | |
545 endfor | |
546 endif | |
547 | |
548 echohl WarningMsg | |
549 if diddel == 0 | |
550 echomsg "netrw is either not installed or not removable" | |
551 elseif diddel == 1 | |
552 echomsg "removed one copy of netrw from <".diddir.">" | |
553 else | |
554 echomsg "removed ".diddel." copies of netrw" | |
555 endif | |
556 echohl None | |
557 | |
558 " call Dret("netrw#NetrwClean") | |
559 endfun | |
560 | |
2034 | 561 " --------------------------------------------------------------------- |
562 " netrw#Nread: {{{2 | |
563 fun! netrw#Nread(mode,fname) | |
564 " call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)") | |
565 call netrw#NetrwSavePosn() | |
566 call netrw#NetRead(a:mode,a:fname) | |
567 call netrw#NetrwRestorePosn() | |
568 " call Dret("netrw#Nread") | |
569 endfun | |
570 | |
1121 | 571 " ------------------------------------------------------------------------ |
650 | 572 " Netrw Transfer Functions: {{{1 |
573 " =============================== | |
574 | |
482 | 575 " ------------------------------------------------------------------------ |
1621 | 576 " netrw#NetRead: responsible for reading a file over the net {{{2 |
1121 | 577 " mode: =0 read remote file and insert before current line |
578 " =1 read remote file and insert after current line | |
579 " =2 replace with remote file | |
580 " =3 obtain file, but leave in temporary format | |
719 | 581 fun! netrw#NetRead(mode,...) |
1121 | 582 " call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw) |
583 | |
2034 | 584 " NetRead: save options {{{3 |
1621 | 585 call s:NetrwOptionSave("w:") |
586 call s:NetrwSafeOptions() | |
2152 | 587 call s:RestoreCursorline() |
719 | 588 |
2034 | 589 " NetRead: interpret mode into a readcmd {{{3 |
719 | 590 if a:mode == 0 " read remote file before current line |
482 | 591 let readcmd = "0r" |
719 | 592 elseif a:mode == 1 " read file after current line |
482 | 593 let readcmd = "r" |
719 | 594 elseif a:mode == 2 " replace with remote file |
595 let readcmd = "%r" | |
1121 | 596 elseif a:mode == 3 " skip read of file (leave as temporary) |
597 let readcmd = "t" | |
719 | 598 else |
599 exe a:mode | |
600 let readcmd = "r" | |
482 | 601 endif |
719 | 602 let ichoice = (a:0 == 0)? 0 : 1 |
603 " call Decho("readcmd<".readcmd."> ichoice=".ichoice) | |
604 | |
2034 | 605 " NetRead: get temporary filename {{{3 |
1121 | 606 let tmpfile= s:GetTempfile("") |
607 if tmpfile == "" | |
608 " call Dret("netrw#NetRead : unable to get a tempfile!") | |
482 | 609 return |
610 endif | |
719 | 611 |
482 | 612 while ichoice <= a:0 |
719 | 613 |
482 | 614 " attempt to repeat with previous host-file-etc |
615 if exists("b:netrw_lastfile") && a:0 == 0 | |
616 " call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">") | |
617 let choice = b:netrw_lastfile | |
618 let ichoice= ichoice + 1 | |
719 | 619 |
482 | 620 else |
621 exe "let choice= a:" . ichoice | |
622 " call Decho("no lastfile: choice<" . choice . ">") | |
719 | 623 |
482 | 624 if match(choice,"?") == 0 |
625 " give help | |
626 echomsg 'NetRead Usage:' | |
627 echomsg ':Nread machine:path uses rcp' | |
628 echomsg ':Nread "machine path" uses ftp with <.netrc>' | |
629 echomsg ':Nread "machine id password path" uses ftp' | |
630 echomsg ':Nread dav://machine[:port]/path uses cadaver' | |
631 echomsg ':Nread fetch://machine/path uses fetch' | |
632 echomsg ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>' | |
633 echomsg ':Nread http://[user@]machine/path uses http wget' | |
634 echomsg ':Nread rcp://[user@]machine/path uses rcp' | |
635 echomsg ':Nread rsync://machine[:port]/path uses rsync' | |
636 echomsg ':Nread scp://[user@]machine[[:#]port]/path uses scp' | |
637 echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp' | |
1121 | 638 sleep 4 |
482 | 639 break |
640 | |
1121 | 641 elseif match(choice,'^"') != -1 |
482 | 642 " Reconstruct Choice if choice starts with '"' |
643 " call Decho("reconstructing choice") | |
1121 | 644 if match(choice,'"$') != -1 |
482 | 645 " case "..." |
2751 | 646 let choice= strpart(choice,1,strlen(choice)-2) |
482 | 647 else |
648 " case "... ... ..." | |
649 let choice = strpart(choice,1,strlen(choice)-1) | |
650 let wholechoice = "" | |
719 | 651 |
1121 | 652 while match(choice,'"$') == -1 |
482 | 653 let wholechoice = wholechoice . " " . choice |
654 let ichoice = ichoice + 1 | |
655 if ichoice > a:0 | |
656 if !exists("g:netrw_quiet") | |
1121 | 657 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",3) |
482 | 658 endif |
1121 | 659 " call Dret("netrw#NetRead :2 getcwd<".getcwd().">") |
482 | 660 return |
661 endif | |
662 let choice= a:{ichoice} | |
663 endwhile | |
664 let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1) | |
665 endif | |
666 endif | |
667 endif | |
668 | |
669 " call Decho("choice<" . choice . ">") | |
670 let ichoice= ichoice + 1 | |
719 | 671 |
2034 | 672 " NetRead: Determine method of read (ftp, rcp, etc) {{{3 |
1621 | 673 call s:NetrwMethod(choice) |
2034 | 674 if !exists("b:netrw_method") || b:netrw_method < 0 |
675 " call Dfunc("netrw#NetRead : unsupported method") | |
676 return | |
677 endif | |
1121 | 678 let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix |
719 | 679 |
1621 | 680 " Check if NetrwBrowse() should be handling this request |
681 " call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">") | |
1121 | 682 if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^http://' |
819 | 683 " call Decho("yes, choice matches '^.*[\/]$'") |
2152 | 684 keepj call s:NetrwBrowse(0,choice) |
1121 | 685 " call Dret("netrw#NetRead :3 getcwd<".getcwd().">") |
482 | 686 return |
687 endif | |
559 | 688 |
482 | 689 " ============ |
2034 | 690 " NetRead: Perform Protocol-Based Read {{{3 |
650 | 691 " =========================== |
559 | 692 if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1 |
693 echo "(netrw) Processing your read request..." | |
694 endif | |
719 | 695 |
482 | 696 "......................................... |
2034 | 697 " NetRead: (rcp) NetRead Method #1 {{{3 |
482 | 698 if b:netrw_method == 1 " read with rcp |
699 " call Decho("read via rcp (method #1)") | |
857 | 700 " ER: nothing done with g:netrw_uid yet? |
482 | 701 " ER: on Win2K" rcp machine[.user]:file tmpfile |
702 " ER: if machine contains '.' adding .user is required (use $USERNAME) | |
703 " ER: the tmpfile is full path: rcp sees C:\... as host C | |
704 if s:netrw_has_nt_rcp == 1 | |
705 if exists("g:netrw_uid") && ( g:netrw_uid != "" ) | |
706 let uid_machine = g:netrw_machine .'.'. g:netrw_uid | |
707 else | |
708 " Any way needed it machine contains a '.' | |
709 let uid_machine = g:netrw_machine .'.'. $USERNAME | |
710 endif | |
711 else | |
712 if exists("g:netrw_uid") && ( g:netrw_uid != "" ) | |
713 let uid_machine = g:netrw_uid .'@'. g:netrw_machine | |
714 else | |
715 let uid_machine = g:netrw_machine | |
716 endif | |
717 endif | |
1668 | 718 " call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)) |
2034 | 719 exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1) |
1621 | 720 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) |
482 | 721 let b:netrw_lastfile = choice |
719 | 722 |
482 | 723 "......................................... |
2034 | 724 " NetRead: (ftp + <.netrc>) NetRead Method #2 {{{3 |
482 | 725 elseif b:netrw_method == 2 " read with ftp + <.netrc> |
559 | 726 " call Decho("read via ftp+.netrc (method #2)") |
820 | 727 let netrw_fname= b:netrw_fname |
2751 | 728 keepj call s:SaveBufVars()|new|keepj call s:RestoreBufVars() |
1698 | 729 let filtbuf= bufnr("%") |
482 | 730 setlocal ff=unix |
2152 | 731 keepj put =g:netrw_ftpmode |
1698 | 732 " call Decho("filter input: ".getline(line("$"))) |
1121 | 733 if exists("g:netrw_ftpextracmd") |
2152 | 734 keepj put =g:netrw_ftpextracmd |
1698 | 735 " call Decho("filter input: ".getline(line("$"))) |
1121 | 736 endif |
1698 | 737 call setline(line("$")+1,'get "'.netrw_fname.'" '.tmpfile) |
738 " call Decho("filter input: ".getline(line("$"))) | |
482 | 739 if exists("g:netrw_port") && g:netrw_port != "" |
2751 | 740 " call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) |
741 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) | |
482 | 742 else |
2751 | 743 " call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) |
744 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) | |
482 | 745 endif |
746 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) | |
747 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' | |
1668 | 748 let debugkeep = &debug |
1121 | 749 setlocal debug=msg |
2751 | 750 keepj call netrw#ErrorMsg(s:ERROR,getline(1),4) |
1668 | 751 let &debug = debugkeep |
482 | 752 endif |
1702 | 753 call s:SaveBufVars() |
754 bd! | |
2034 | 755 if bufname("%") == "" && getline("$") == "" && line('$') == 1 |
756 " needed when one sources a file in a nolbl setting window via ftp | |
1702 | 757 q! |
758 endif | |
759 call s:RestoreBufVars() | |
1621 | 760 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) |
482 | 761 let b:netrw_lastfile = choice |
719 | 762 |
482 | 763 "......................................... |
2034 | 764 " NetRead: (ftp + machine,id,passwd,filename) NetRead Method #3 {{{3 |
482 | 765 elseif b:netrw_method == 3 " read with ftp + machine, id, passwd, and fname |
766 " Construct execution string (four lines) which will be passed through filter | |
767 " call Decho("read via ftp+mipf (method #3)") | |
719 | 768 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape) |
2751 | 769 keepj call s:SaveBufVars()|new|keepj call s:RestoreBufVars() |
1698 | 770 let filtbuf= bufnr("%") |
482 | 771 setlocal ff=unix |
772 if exists("g:netrw_port") && g:netrw_port != "" | |
2152 | 773 keepj put ='open '.g:netrw_machine.' '.g:netrw_port |
1621 | 774 " call Decho("filter input: ".getline('.')) |
482 | 775 else |
2152 | 776 keepj put ='open '.g:netrw_machine |
1621 | 777 " call Decho("filter input: ".getline('.')) |
482 | 778 endif |
719 | 779 |
482 | 780 if exists("g:netrw_ftp") && g:netrw_ftp == 1 |
2152 | 781 keepj put =g:netrw_uid |
1621 | 782 " call Decho("filter input: ".getline('.')) |
2152 | 783 keepj put ='\"'.s:netrw_passwd.'\"' |
1621 | 784 " call Decho("filter input: ".getline('.')) |
482 | 785 else |
2152 | 786 keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' |
1621 | 787 " call Decho("filter input: ".getline('.')) |
482 | 788 endif |
719 | 789 |
482 | 790 if exists("g:netrw_ftpmode") && g:netrw_ftpmode != "" |
2152 | 791 keepj put =g:netrw_ftpmode |
1621 | 792 " call Decho("filter input: ".getline('.')) |
482 | 793 endif |
1121 | 794 if exists("g:netrw_ftpextracmd") |
2751 | 795 keepj put =g:netrw_ftpextracmd |
1621 | 796 " call Decho("filter input: ".getline('.')) |
1121 | 797 endif |
2152 | 798 keepj put ='get \"'.netrw_fname.'\" '.tmpfile |
1621 | 799 " call Decho("filter input: ".getline('.')) |
719 | 800 |
482 | 801 " perform ftp: |
802 " -i : turns off interactive prompting from ftp | |
803 " -n unix : DON'T use <.netrc>, even though it exists | |
804 " -n win32: quit being obnoxious about password | |
2751 | 805 keepj norm! 1Gdd |
806 " call Decho("executing: %!".s:netrw_ftp_cmd." -i -n") | |
807 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i -n" | |
482 | 808 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) |
809 if getline(1) !~ "^$" | |
810 " call Decho("error<".getline(1).">") | |
811 if !exists("g:netrw_quiet") | |
1121 | 812 call netrw#ErrorMsg(s:ERROR,getline(1),5) |
482 | 813 endif |
814 endif | |
1621 | 815 call s:SaveBufVars()|bd!|call s:RestoreBufVars() |
816 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) | |
482 | 817 let b:netrw_lastfile = choice |
719 | 818 |
482 | 819 "......................................... |
2034 | 820 " NetRead: (scp) NetRead Method #4 {{{3 |
482 | 821 elseif b:netrw_method == 4 " read with scp |
822 " call Decho("read via scp (method #4)") | |
823 if exists("g:netrw_port") && g:netrw_port != "" | |
1209 | 824 let useport= " ".g:netrw_scpport." ".g:netrw_port |
482 | 825 else |
826 let useport= "" | |
827 endif | |
2034 | 828 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)) |
1668 | 829 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1) |
1621 | 830 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) |
482 | 831 let b:netrw_lastfile = choice |
719 | 832 |
482 | 833 "......................................... |
2034 | 834 " NetRead: (http) NetRead Method #5 (wget) {{{3 |
650 | 835 elseif b:netrw_method == 5 |
482 | 836 " call Decho("read via http (method #5)") |
837 if g:netrw_http_cmd == "" | |
838 if !exists("g:netrw_quiet") | |
1121 | 839 call netrw#ErrorMsg(s:ERROR,"neither the wget nor the fetch command is available",6) |
482 | 840 endif |
1121 | 841 " call Dret("netrw#NetRead :4 getcwd<".getcwd().">") |
559 | 842 return |
482 | 843 endif |
719 | 844 |
1698 | 845 if match(b:netrw_fname,"#") == -1 || exists("g:netrw_http_xcmd") |
846 " using g:netrw_http_cmd (usually elinks, links, curl, wget, or fetch) | |
1668 | 847 " call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)") |
1698 | 848 if exists("g:netrw_http_xcmd") |
849 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)) | |
850 exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1) | |
851 else | |
852 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)) | |
853 exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1) | |
854 endif | |
1621 | 855 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) |
719 | 856 |
482 | 857 else |
1698 | 858 " wget/curl/fetch plus a jump to an in-page marker (ie. http://abc/def.html#aMarker) |
2751 | 859 " call Decho("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)") |
1668 | 860 let netrw_html= substitute(b:netrw_fname,"#.*$","","") |
861 let netrw_tag = substitute(b:netrw_fname,"^.*#","","") | |
482 | 862 " call Decho("netrw_html<".netrw_html.">") |
863 " call Decho("netrw_tag <".netrw_tag.">") | |
1668 | 864 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)) |
865 exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1) | |
1621 | 866 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) |
482 | 867 " call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/') |
2751 | 868 exe 'keepj norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>" |
482 | 869 endif |
870 let b:netrw_lastfile = choice | |
1121 | 871 setlocal ro |
719 | 872 |
482 | 873 "......................................... |
2034 | 874 " NetRead: (dav) NetRead Method #6 {{{3 |
650 | 875 elseif b:netrw_method == 6 |
482 | 876 " call Decho("read via cadaver (method #6)") |
719 | 877 |
2034 | 878 if !executable(g:netrw_dav_cmd) |
879 call netrw#ErrorMsg(s:ERROR,g:netrw_dav_cmd." is not executable",73) | |
880 " call Dret("netrw#NetRead : ".g:netrw_dav_cmd." not executable") | |
881 return | |
882 endif | |
883 if g:netrw_dav_cmd =~ "curl" | |
884 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1)) | |
885 exe s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1) | |
482 | 886 else |
2034 | 887 " Construct execution string (four lines) which will be passed through filter |
888 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape) | |
889 new | |
890 setlocal ff=unix | |
891 if exists("g:netrw_port") && g:netrw_port != "" | |
2152 | 892 keepj put ='open '.g:netrw_machine.' '.g:netrw_port |
2034 | 893 else |
2152 | 894 keepj put ='open '.g:netrw_machine |
2034 | 895 endif |
2152 | 896 keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd |
897 keepj put ='get '.netrw_fname.' '.tmpfile | |
898 keepj put ='quit' | |
2034 | 899 |
900 " perform cadaver operation: | |
2152 | 901 keepj norm! 1Gdd |
482 | 902 " call Decho("executing: %!".g:netrw_dav_cmd) |
2034 | 903 exe s:netrw_silentxfer."%!".g:netrw_dav_cmd |
904 bd! | |
905 endif | |
1621 | 906 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) |
482 | 907 let b:netrw_lastfile = choice |
719 | 908 |
482 | 909 "......................................... |
2034 | 910 " NetRead: (rsync) NetRead Method #7 {{{3 |
650 | 911 elseif b:netrw_method == 7 |
482 | 912 " call Decho("read via rsync (method #7)") |
1668 | 913 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)) |
914 exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1) | |
1621 | 915 let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method) |
482 | 916 let b:netrw_lastfile = choice |
719 | 917 |
482 | 918 "......................................... |
2034 | 919 " NetRead: (fetch) NetRead Method #8 {{{3 |
482 | 920 " fetch://[user@]host[:http]/path |
650 | 921 elseif b:netrw_method == 8 |
1121 | 922 " call Decho("read via fetch (method #8)") |
482 | 923 if g:netrw_fetch_cmd == "" |
924 if !exists("g:netrw_quiet") | |
2751 | 925 keepj call netrw#ErrorMsg(s:ERROR,"fetch command not available",7) |
482 | 926 endif |
559 | 927 " call Dret("NetRead") |
482 | 928 endif |
929 if exists("g:netrw_option") && g:netrw_option == ":http" | |
930 let netrw_option= "http" | |
931 else | |
932 let netrw_option= "ftp" | |
933 endif | |
934 " call Decho("read via fetch for ".netrw_option) | |
719 | 935 |
1621 | 936 if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != "" |
1668 | 937 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1)) |
938 exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1) | |
482 | 939 else |
1668 | 940 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1)) |
941 exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1) | |
1621 | 942 endif |
943 | |
944 let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method) | |
482 | 945 let b:netrw_lastfile = choice |
1121 | 946 setlocal ro |
719 | 947 |
482 | 948 "......................................... |
2034 | 949 " NetRead: (sftp) NetRead Method #9 {{{3 |
650 | 950 elseif b:netrw_method == 9 |
1121 | 951 " call Decho("read via sftp (method #9)") |
1668 | 952 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile) |
953 exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile | |
1621 | 954 let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) |
482 | 955 let b:netrw_lastfile = choice |
719 | 956 |
482 | 957 "......................................... |
2034 | 958 " NetRead: Complain {{{3 |
650 | 959 else |
1121 | 960 call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8) |
482 | 961 endif |
962 endwhile | |
719 | 963 |
2034 | 964 " NetRead: cleanup {{{3 |
482 | 965 if exists("b:netrw_method") |
1121 | 966 " call Decho("cleanup b:netrw_method and b:netrw_fname") |
482 | 967 unlet b:netrw_method |
968 unlet b:netrw_fname | |
969 endif | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
970 if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't' && tmpfile !~ '.tar.xz$' && tmpfile !~ '.txz' |
1121 | 971 " call Decho("cleanup by deleting tmpfile<".tmpfile.">") |
2751 | 972 keepj call s:NetrwDelete(tmpfile) |
973 endif | |
974 keepj call s:NetrwOptionRestore("w:") | |
1121 | 975 |
976 " call Dret("netrw#NetRead :5 getcwd<".getcwd().">") | |
482 | 977 endfun |
978 | |
979 " ------------------------------------------------------------------------ | |
1621 | 980 " netrw#NetWrite: responsible for writing a file over the net {{{2 |
482 | 981 fun! netrw#NetWrite(...) range |
1121 | 982 " call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw) |
719 | 983 |
2034 | 984 " NetWrite: option handling {{{3 |
482 | 985 let mod= 0 |
1621 | 986 call s:NetrwOptionSave("w:") |
987 call s:NetrwSafeOptions() | |
719 | 988 |
2034 | 989 " NetWrite: Get Temporary Filename {{{3 |
1121 | 990 let tmpfile= s:GetTempfile("") |
991 if tmpfile == "" | |
992 " call Dret("netrw#NetWrite : unable to get a tempfile!") | |
482 | 993 return |
994 endif | |
719 | 995 |
482 | 996 if a:0 == 0 |
997 let ichoice = 0 | |
998 else | |
999 let ichoice = 1 | |
1000 endif | |
719 | 1001 |
1121 | 1002 let curbufname= expand("%") |
1003 " call Decho("curbufname<".curbufname.">") | |
559 | 1004 if &binary |
1121 | 1005 " For binary writes, always write entire file. |
1006 " (line numbers don't really make sense for that). | |
1007 " Also supports the writing of tar and zip files. | |
2751 | 1008 " call Decho("(write entire file) sil exe w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)) |
1009 exe "sil keepj w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile) | |
1121 | 1010 elseif g:netrw_cygwin |
1011 " write (selected portion of) file to temporary | |
1012 let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','') | |
2751 | 1013 " call Decho("(write selected portion) sil exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)) |
2152 | 1014 exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile) |
559 | 1015 else |
1016 " write (selected portion of) file to temporary | |
2751 | 1017 " call Decho("(write selected portion) sil exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)) |
2152 | 1018 exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile) |
559 | 1019 endif |
719 | 1020 |
1121 | 1021 if curbufname == "" |
1022 " if the file is [No Name], and one attempts to Nwrite it, the buffer takes | |
1023 " on the temporary file's name. Deletion of the temporary file during | |
1024 " cleanup then causes an error message. | |
1025 0file! | |
1026 endif | |
1027 | |
2034 | 1028 " NetWrite: while choice loop: {{{3 |
482 | 1029 while ichoice <= a:0 |
719 | 1030 |
1121 | 1031 " Process arguments: {{{4 |
482 | 1032 " attempt to repeat with previous host-file-etc |
1033 if exists("b:netrw_lastfile") && a:0 == 0 | |
1034 " call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">") | |
1035 let choice = b:netrw_lastfile | |
1036 let ichoice= ichoice + 1 | |
1037 else | |
1038 exe "let choice= a:" . ichoice | |
719 | 1039 |
482 | 1040 " Reconstruct Choice if choice starts with '"' |
1041 if match(choice,"?") == 0 | |
1042 echomsg 'NetWrite Usage:"' | |
1043 echomsg ':Nwrite machine:path uses rcp' | |
1044 echomsg ':Nwrite "machine path" uses ftp with <.netrc>' | |
1045 echomsg ':Nwrite "machine id password path" uses ftp' | |
1046 echomsg ':Nwrite dav://[user@]machine/path uses cadaver' | |
1047 echomsg ':Nwrite fetch://[user@]machine/path uses fetch' | |
1048 echomsg ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)' | |
1049 echomsg ':Nwrite rcp://machine/path uses rcp' | |
1050 echomsg ':Nwrite rsync://[user@]machine/path uses rsync' | |
1051 echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp' | |
1052 echomsg ':Nwrite sftp://[user@]machine/path uses sftp' | |
1121 | 1053 sleep 4 |
482 | 1054 break |
719 | 1055 |
482 | 1056 elseif match(choice,"^\"") != -1 |
1057 if match(choice,"\"$") != -1 | |
1058 " case "..." | |
1059 let choice=strpart(choice,1,strlen(choice)-2) | |
1060 else | |
1061 " case "... ... ..." | |
1062 let choice = strpart(choice,1,strlen(choice)-1) | |
1063 let wholechoice = "" | |
719 | 1064 |
482 | 1065 while match(choice,"\"$") == -1 |
1066 let wholechoice= wholechoice . " " . choice | |
1067 let ichoice = ichoice + 1 | |
1068 if choice > a:0 | |
1069 if !exists("g:netrw_quiet") | |
1121 | 1070 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",13) |
482 | 1071 endif |
1121 | 1072 " call Dret("netrw#NetWrite") |
482 | 1073 return |
1074 endif | |
1075 let choice= a:{ichoice} | |
1076 endwhile | |
1077 let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1) | |
1078 endif | |
1079 endif | |
1080 endif | |
1081 let ichoice= ichoice + 1 | |
1121 | 1082 " call Decho("choice<" . choice . "> ichoice=".ichoice) |
1083 | |
1084 " Determine method of write (ftp, rcp, etc) {{{4 | |
2751 | 1085 keepj call s:NetrwMethod(choice) |
2034 | 1086 if !exists("b:netrw_method") || b:netrw_method < 0 |
1087 " call Dfunc("netrw#NetWrite : unsupported method") | |
1088 return | |
1089 endif | |
719 | 1090 |
482 | 1091 " ============= |
2034 | 1092 " NetWrite: Perform Protocol-Based Write {{{3 |
650 | 1093 " ============================ |
559 | 1094 if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1 |
1095 echo "(netrw) Processing your write request..." | |
1621 | 1096 " call Decho("(netrw) Processing your write request...") |
559 | 1097 endif |
719 | 1098 |
482 | 1099 "......................................... |
2034 | 1100 " NetWrite: (rcp) NetWrite Method #1 {{{3 |
650 | 1101 if b:netrw_method == 1 |
559 | 1102 " call Decho("write via rcp (method #1)") |
482 | 1103 if s:netrw_has_nt_rcp == 1 |
1104 if exists("g:netrw_uid") && ( g:netrw_uid != "" ) | |
1105 let uid_machine = g:netrw_machine .'.'. g:netrw_uid | |
1106 else | |
1107 let uid_machine = g:netrw_machine .'.'. $USERNAME | |
1108 endif | |
1109 else | |
1110 if exists("g:netrw_uid") && ( g:netrw_uid != "" ) | |
1111 let uid_machine = g:netrw_uid .'@'. g:netrw_machine | |
1112 else | |
1113 let uid_machine = g:netrw_machine | |
1114 endif | |
1115 endif | |
1668 | 1116 " call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1)) |
1117 exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1) | |
482 | 1118 let b:netrw_lastfile = choice |
719 | 1119 |
482 | 1120 "......................................... |
2034 | 1121 " NetWrite: (ftp + <.netrc>) NetWrite Method #2 {{{3 |
650 | 1122 elseif b:netrw_method == 2 |
1121 | 1123 " call Decho("write via ftp+.netrc (method #2)") |
2034 | 1124 let netrw_fname = b:netrw_fname |
1125 | |
1126 " formerly just a "new...bd!", that changed the window sizes when equalalways. Using enew workaround instead | |
1127 let bhkeep = &l:bh | |
1128 let curbuf = bufnr("%") | |
1129 setlocal bh=hide | |
1130 enew | |
1131 | |
1621 | 1132 " call Decho("filter input window#".winnr()) |
482 | 1133 setlocal ff=unix |
2152 | 1134 keepj put =g:netrw_ftpmode |
1698 | 1135 " call Decho("filter input: ".getline('$')) |
1121 | 1136 if exists("g:netrw_ftpextracmd") |
2152 | 1137 keepj put =g:netrw_ftpextracmd |
1698 | 1138 " call Decho("filter input: ".getline("$")) |
1139 endif | |
2751 | 1140 keepj call setline(line("$")+1,'put "'.tmpfile.'" "'.netrw_fname.'"') |
1698 | 1141 " call Decho("filter input: ".getline("$")) |
482 | 1142 if exists("g:netrw_port") && g:netrw_port != "" |
2751 | 1143 " call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) |
1144 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) | |
482 | 1145 else |
1621 | 1146 " call Decho("filter input window#".winnr()) |
2751 | 1147 " call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) |
1148 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) | |
482 | 1149 endif |
1150 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) | |
1151 if getline(1) !~ "^$" | |
1152 if !exists("g:netrw_quiet") | |
2751 | 1153 keepj call netrw#ErrorMsg(s:ERROR,getline(1),14) |
482 | 1154 endif |
1155 let mod=1 | |
1156 endif | |
2034 | 1157 |
1158 " remove enew buffer (quietly) | |
1159 let filtbuf= bufnr("%") | |
1160 exe curbuf."b!" | |
1161 let &l:bh = bhkeep | |
1162 exe filtbuf."bw!" | |
1163 | |
482 | 1164 let b:netrw_lastfile = choice |
719 | 1165 |
482 | 1166 "......................................... |
2034 | 1167 " NetWrite: (ftp + machine, id, passwd, filename) NetWrite Method #3 {{{3 |
650 | 1168 elseif b:netrw_method == 3 |
2034 | 1169 " Construct execution string (three or more lines) which will be passed through filter |
1121 | 1170 " call Decho("read via ftp+mipf (method #3)") |
2034 | 1171 let netrw_fname = b:netrw_fname |
1172 let bhkeep = &l:bh | |
1173 | |
1174 " formerly just a "new...bd!", that changed the window sizes when equalalways. Using enew workaround instead | |
1175 let curbuf = bufnr("%") | |
1176 setlocal bh=hide | |
1177 enew | |
482 | 1178 setlocal ff=unix |
2034 | 1179 |
482 | 1180 if exists("g:netrw_port") && g:netrw_port != "" |
2152 | 1181 keepj put ='open '.g:netrw_machine.' '.g:netrw_port |
1621 | 1182 " call Decho("filter input: ".getline('.')) |
482 | 1183 else |
2152 | 1184 keepj put ='open '.g:netrw_machine |
1621 | 1185 " call Decho("filter input: ".getline('.')) |
482 | 1186 endif |
1187 if exists("g:netrw_ftp") && g:netrw_ftp == 1 | |
2152 | 1188 keepj put =g:netrw_uid |
1621 | 1189 " call Decho("filter input: ".getline('.')) |
2152 | 1190 keepj put ='\"'.s:netrw_passwd.'\"' |
1621 | 1191 " call Decho("filter input: ".getline('.')) |
482 | 1192 else |
2152 | 1193 keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' |
1621 | 1194 " call Decho("filter input: ".getline('.')) |
482 | 1195 endif |
2152 | 1196 keepj put =g:netrw_ftpmode |
2034 | 1197 " call Decho("filter input: ".getline('$')) |
1198 if exists("g:netrw_ftpextracmd") | |
2152 | 1199 keepj put =g:netrw_ftpextracmd |
2034 | 1200 " call Decho("filter input: ".getline("$")) |
1201 endif | |
2152 | 1202 keepj put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"' |
1621 | 1203 " call Decho("filter input: ".getline('.')) |
482 | 1204 " save choice/id/password for future use |
1205 let b:netrw_lastfile = choice | |
719 | 1206 |
482 | 1207 " perform ftp: |
1208 " -i : turns off interactive prompting from ftp | |
1209 " -n unix : DON'T use <.netrc>, even though it exists | |
1210 " -n win32: quit being obnoxious about password | |
2152 | 1211 keepj norm! 1Gdd |
2751 | 1212 " call Decho("executing: %!".s:netrw_ftp_cmd." -i -n") |
1213 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i -n" | |
482 | 1214 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) |
1215 if getline(1) !~ "^$" | |
1216 if !exists("g:netrw_quiet") | |
1121 | 1217 call netrw#ErrorMsg(s:ERROR,getline(1),15) |
482 | 1218 endif |
1219 let mod=1 | |
1220 endif | |
2034 | 1221 |
1222 " remove enew buffer (quietly) | |
1223 let filtbuf= bufnr("%") | |
1224 exe curbuf."b!" | |
1225 let &l:bh= bhkeep | |
1226 exe filtbuf."bw!" | |
719 | 1227 |
482 | 1228 "......................................... |
2034 | 1229 " NetWrite: (scp) NetWrite Method #4 {{{3 |
650 | 1230 elseif b:netrw_method == 4 |
1121 | 1231 " call Decho("write via scp (method #4)") |
482 | 1232 if exists("g:netrw_port") && g:netrw_port != "" |
1668 | 1233 let useport= " ".g:netrw_scpport." ".fnameescape(g:netrw_port) |
482 | 1234 else |
1235 let useport= "" | |
1236 endif | |
1668 | 1237 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)) |
1238 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1) | |
482 | 1239 let b:netrw_lastfile = choice |
719 | 1240 |
482 | 1241 "......................................... |
2034 | 1242 " NetWrite: (http) NetWrite Method #5 {{{3 |
482 | 1243 elseif b:netrw_method == 5 |
1121 | 1244 " call Decho("write via http (method #5)") |
482 | 1245 if !exists("g:netrw_quiet") |
1121 | 1246 call netrw#ErrorMsg(s:ERROR,"currently <netrw.vim> does not support writing using http:",16) |
482 | 1247 endif |
719 | 1248 |
482 | 1249 "......................................... |
2034 | 1250 " NetWrite: (dav) NetWrite Method #6 (cadaver) {{{3 |
650 | 1251 elseif b:netrw_method == 6 |
482 | 1252 " call Decho("write via cadaver (method #6)") |
719 | 1253 |
482 | 1254 " Construct execution string (four lines) which will be passed through filter |
2034 | 1255 let netrw_fname = escape(b:netrw_fname,g:netrw_fname_escape) |
1256 let bhkeep = &l:bh | |
1257 | |
1258 " formerly just a "new...bd!", that changed the window sizes when equalalways. Using enew workaround instead | |
1259 let curbuf = bufnr("%") | |
1260 setlocal bh=hide | |
1261 enew | |
1262 | |
482 | 1263 setlocal ff=unix |
1264 if exists("g:netrw_port") && g:netrw_port != "" | |
2152 | 1265 keepj put ='open '.g:netrw_machine.' '.g:netrw_port |
482 | 1266 else |
2152 | 1267 keepj put ='open '.g:netrw_machine |
482 | 1268 endif |
1621 | 1269 if exists("g:netrw_uid") && exists("s:netrw_passwd") |
2152 | 1270 keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd |
1271 endif | |
1272 keepj put ='put '.tmpfile.' '.netrw_fname | |
719 | 1273 |
482 | 1274 " perform cadaver operation: |
2152 | 1275 keepj norm! 1Gdd |
482 | 1276 " call Decho("executing: %!".g:netrw_dav_cmd) |
1621 | 1277 exe s:netrw_silentxfer."%!".g:netrw_dav_cmd |
2034 | 1278 |
1279 " remove enew buffer (quietly) | |
1280 let filtbuf= bufnr("%") | |
1281 exe curbuf."b!" | |
1282 let &l:bh = bhkeep | |
1283 exe filtbuf."bw!" | |
1284 | |
482 | 1285 let b:netrw_lastfile = choice |
719 | 1286 |
482 | 1287 "......................................... |
2034 | 1288 " NetWrite: (rsync) NetWrite Method #7 {{{3 |
650 | 1289 elseif b:netrw_method == 7 |
1121 | 1290 " call Decho("write via rsync (method #7)") |
1668 | 1291 " call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)) |
1292 exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1) | |
482 | 1293 let b:netrw_lastfile = choice |
719 | 1294 |
482 | 1295 "......................................... |
2034 | 1296 " NetWrite: (sftp) NetWrite Method #9 {{{3 |
650 | 1297 elseif b:netrw_method == 9 |
1121 | 1298 " call Decho("read via sftp (method #9)") |
719 | 1299 let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape) |
482 | 1300 if exists("g:netrw_uid") && ( g:netrw_uid != "" ) |
1301 let uid_machine = g:netrw_uid .'@'. g:netrw_machine | |
1302 else | |
1303 let uid_machine = g:netrw_machine | |
1304 endif | |
2034 | 1305 |
1306 " formerly just a "new...bd!", that changed the window sizes when equalalways. Using enew workaround instead | |
1307 let bhkeep = &l:bh | |
1308 let curbuf = bufnr("%") | |
1309 setlocal bh=hide | |
1310 enew | |
1311 | |
482 | 1312 setlocal ff=unix |
2034 | 1313 call setline(1,'put "'.escape(tmpfile,'\').'" '.netrw_fname) |
1621 | 1314 " call Decho("filter input: ".getline('.')) |
1668 | 1315 " call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1)) |
1316 exe s:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1) | |
2034 | 1317 let filtbuf= bufnr("%") |
1318 exe curbuf."b!" | |
1319 let &l:bh = bhkeep | |
1320 exe filtbuf."bw!" | |
1321 let b:netrw_lastfile = choice | |
719 | 1322 |
482 | 1323 "......................................... |
2034 | 1324 " NetWrite: Complain {{{3 |
650 | 1325 else |
1121 | 1326 call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17) |
2751 | 1327 let leavemod= 1 |
482 | 1328 endif |
1329 endwhile | |
719 | 1330 |
2034 | 1331 " NetWrite: Cleanup: {{{3 |
482 | 1332 " call Decho("cleanup") |
1121 | 1333 if s:FileReadable(tmpfile) |
1334 " call Decho("tmpfile<".tmpfile."> readable, will now delete it") | |
1668 | 1335 call s:NetrwDelete(tmpfile) |
1121 | 1336 endif |
1621 | 1337 call s:NetrwOptionRestore("w:") |
719 | 1338 |
482 | 1339 if a:firstline == 1 && a:lastline == line("$") |
1121 | 1340 " restore modifiability; usually equivalent to set nomod |
1341 let &mod= mod | |
2751 | 1342 elseif !exists("leavemod") |
1343 " indicate that the buffer has not been modified since last written | |
1344 set nomod | |
1345 endif | |
1346 | |
1121 | 1347 " call Dret("netrw#NetWrite") |
482 | 1348 endfun |
1349 | |
519 | 1350 " --------------------------------------------------------------------- |
1621 | 1351 " netrw#NetSource: source a remotely hosted vim script {{{2 |
1121 | 1352 " uses NetRead to get a copy of the file into a temporarily file, |
1353 " then sources that file, | |
1354 " then removes that file. | |
1355 fun! netrw#NetSource(...) | |
1356 " call Dfunc("netrw#NetSource() a:0=".a:0) | |
1357 if a:0 > 0 && a:1 == '?' | |
1358 " give help | |
1359 echomsg 'NetSource Usage:' | |
1360 echomsg ':Nsource dav://machine[:port]/path uses cadaver' | |
1361 echomsg ':Nsource fetch://machine/path uses fetch' | |
1362 echomsg ':Nsource ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>' | |
1363 echomsg ':Nsource http://[user@]machine/path uses http wget' | |
1364 echomsg ':Nsource rcp://[user@]machine/path uses rcp' | |
1365 echomsg ':Nsource rsync://machine[:port]/path uses rsync' | |
1366 echomsg ':Nsource scp://[user@]machine[[:#]port]/path uses scp' | |
1367 echomsg ':Nsource sftp://[user@]machine[[:#]port]/path uses sftp' | |
1368 sleep 4 | |
650 | 1369 else |
1121 | 1370 let i= 1 |
1371 while i <= a:0 | |
1372 call netrw#NetRead(3,a:{i}) | |
1698 | 1373 " call Decho("(netrw#NetSource) s:netread_tmpfile<".s:netrw_tmpfile.">") |
1121 | 1374 if s:FileReadable(s:netrw_tmpfile) |
1698 | 1375 " call Decho("(netrw#NetSource) exe so ".fnameescape(s:netrw_tmpfile)) |
1376 exe "so ".fnameescape(s:netrw_tmpfile) | |
1377 " call Decho("(netrw#NetSource) delete(".s:netrw_tmpfile.")") | |
1121 | 1378 call delete(s:netrw_tmpfile) |
1379 unlet s:netrw_tmpfile | |
1380 else | |
1381 call netrw#ErrorMsg(s:ERROR,"unable to source <".a:{i}.">!",48) | |
719 | 1382 endif |
1121 | 1383 let i= i + 1 |
1384 endwhile | |
719 | 1385 endif |
1121 | 1386 " call Dret("netrw#NetSource") |
482 | 1387 endfun |
1388 | |
1121 | 1389 " =========================================== |
1621 | 1390 " s:NetrwGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2 |
1121 | 1391 " readcmd == %r : replace buffer with newly read file |
1392 " == 0r : read file at top of buffer | |
1393 " == r : read file after current line | |
1394 " == t : leave file in temporary form (ie. don't read into buffer) | |
1621 | 1395 fun! s:NetrwGetFile(readcmd, tfile, method) |
1396 " call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)") | |
1121 | 1397 |
1398 " readcmd=='t': simply do nothing | |
1399 if a:readcmd == 't' | |
1668 | 1400 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
1621 | 1401 " call Dret("NetrwGetFile : skip read of <".a:tfile.">") |
482 | 1402 return |
1403 endif | |
1404 | |
1121 | 1405 " get name of remote filename (ie. url and all) |
1406 let rfile= bufname("%") | |
1407 " call Decho("rfile<".rfile.">") | |
1408 | |
1409 if exists("*NetReadFixup") | |
1410 " for the use of NetReadFixup (not otherwise used internally) | |
1411 let line2= line("$") | |
482 | 1412 endif |
1413 | |
1121 | 1414 if a:readcmd[0] == '%' |
1415 " get file into buffer | |
1416 " call Decho("get file into buffer") | |
1417 | |
1418 " rename the current buffer to the temp file (ie. tfile) | |
1419 if g:netrw_cygwin | |
1420 let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','') | |
482 | 1421 else |
1121 | 1422 let tfile= a:tfile |
482 | 1423 endif |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
1424 " call Decho("exe sil! keepalt file ".fnameescape(tfile)) |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
1425 exe "sil! keepalt file ".fnameescape(tfile) |
1121 | 1426 |
1427 " edit temporary file (ie. read the temporary file in) | |
1428 if rfile =~ '\.zip$' | |
1429 " call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)") | |
1430 call zip#Browse(tfile) | |
1431 elseif rfile =~ '\.tar$' | |
1432 " call Decho("handling remote tar file with tar#Browse(tfile<".tfile.">)") | |
1433 call tar#Browse(tfile) | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
1434 elseif rfile =~ '\.tar\.gz$' |
1121 | 1435 " call Decho("handling remote gzip-compressed tar file") |
1436 call tar#Browse(tfile) | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
1437 elseif rfile =~ '\.tar\.bz2$' |
1121 | 1438 " call Decho("handling remote bz2-compressed tar file") |
1439 call tar#Browse(tfile) | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
1440 elseif rfile =~ '\.tar\.xz$' |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
1441 " call Decho("handling remote xz-compressed tar file") |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
1442 call tar#Browse(tfile) |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
1443 elseif rfile =~ '\.txz$' |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
1444 " call Decho("handling remote xz-compressed tar file (.txz)") |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
1445 call tar#Browse(tfile) |
482 | 1446 else |
1121 | 1447 " call Decho("edit temporary file") |
1448 e! | |
482 | 1449 endif |
1450 | |
1121 | 1451 " rename buffer back to remote filename |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
1452 " call Decho("exe sil! keepalt file ".fnameescape(rfile)) |
2751 | 1453 exe "sil! keepj keepalt file ".fnameescape(rfile) |
2034 | 1454 filetype detect |
1121 | 1455 " call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!") |
1456 let line1 = 1 | |
1457 let line2 = line("$") | |
1458 | |
1459 elseif s:FileReadable(a:tfile) | |
1460 " read file after current line | |
1461 " call Decho("read file<".a:tfile."> after current line") | |
1462 let curline = line(".") | |
1463 let lastline= line("$") | |
1668 | 1464 " call Decho("exe<".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile)."> line#".curline) |
2751 | 1465 exe "keepj ".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile) |
1121 | 1466 let line1= curline + 1 |
1467 let line2= line("$") - lastline + 1 | |
482 | 1468 |
1469 else | |
1121 | 1470 " not readable |
1668 | 1471 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
1121 | 1472 " call Decho("tfile<".a:tfile."> not readable") |
2751 | 1473 keepj call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9) |
1621 | 1474 " call Dret("NetrwGetFile : tfile<".a:tfile."> not readable") |
1121 | 1475 return |
482 | 1476 endif |
1477 | |
1121 | 1478 " User-provided (ie. optional) fix-it-up command |
1479 if exists("*NetReadFixup") | |
1480 " call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")") | |
2751 | 1481 keepj call NetReadFixup(a:method, line1, line2) |
1121 | 1482 " else " Decho |
1483 " call Decho("NetReadFixup() not called, doesn't exist (line1=".line1." line2=".line2.")") | |
766 | 1484 endif |
1485 | |
2751 | 1486 if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu |
1621 | 1487 " update the Buffers menu |
2751 | 1488 keepj call s:UpdateBuffersMenu() |
766 | 1489 endif |
1490 | |
1121 | 1491 " call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile)) |
1492 | |
1493 " make sure file is being displayed | |
1621 | 1494 " redraw! |
1495 | |
1668 | 1496 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
1621 | 1497 " call Dret("NetrwGetFile") |
482 | 1498 endfun |
1499 | |
1121 | 1500 " ------------------------------------------------------------------------ |
1621 | 1501 " s:NetrwMethod: determine method of transfer {{{2 |
2034 | 1502 " Input: |
1503 " choice = url [protocol:]//[userid@]hostname[:port]/[path-to-file] | |
1504 " Output: | |
1505 " b:netrw_method= 1: rcp | |
1506 " 2: ftp + <.netrc> | |
1507 " 3: ftp + machine, id, password, and [path]filename | |
1508 " 4: scp | |
1509 " 5: http (wget) | |
1510 " 6: dav | |
1511 " 7: rsync | |
1512 " 8: fetch | |
1513 " 9: sftp | |
1514 " g:netrw_machine= hostname | |
1515 " b:netrw_fname = filename | |
1516 " g:netrw_port = optional port number (for ftp) | |
1517 " g:netrw_choice = copy of input url (choice) | |
1518 fun! s:NetrwMethod(choice) | |
1621 | 1519 " call Dfunc("NetrwMethod(a:choice<".a:choice.">)") |
719 | 1520 |
2034 | 1521 " record current g:netrw_machine, if any |
1522 " curmachine used if protocol == ftp and no .netrc | |
1523 if exists("g:netrw_machine") | |
1524 let curmachine= g:netrw_machine | |
1525 " call Decho("curmachine<".curmachine.">") | |
1526 else | |
1527 let curmachine= "N O T A HOST" | |
1528 endif | |
2751 | 1529 if exists("g:netrw_port") |
1530 let netrw_port= g:netrw_port | |
1531 endif | |
1532 | |
1533 " insure that netrw_ftp_cmd starts off every method determination | |
1534 " with the current g:netrw_ftp_cmd | |
1535 let s:netrw_ftp_cmd= g:netrw_ftp_cmd | |
2034 | 1536 |
482 | 1537 " initialization |
1538 let b:netrw_method = 0 | |
1539 let g:netrw_machine = "" | |
1540 let b:netrw_fname = "" | |
1541 let g:netrw_port = "" | |
719 | 1542 let g:netrw_choice = a:choice |
1543 | |
482 | 1544 " Patterns: |
1545 " mipf : a:machine a:id password filename Use ftp | |
1621 | 1546 " mf : a:machine filename Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd |
1547 " ftpurm : ftp://[user@]host[[#:]port]/filename Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd | |
482 | 1548 " rcpurm : rcp://[user@]host/filename Use rcp |
1549 " rcphf : [user@]host:filename Use rcp | |
1550 " scpurm : scp://[user@]host[[#:]port]/filename Use scp | |
1551 " httpurm : http://[user@]host/filename Use wget | |
2034 | 1552 " davurm : dav[s]://host[:port]/path Use cadaver/curl |
482 | 1553 " rsyncurm : rsync://host[:port]/path Use rsync |
1554 " fetchurm : fetch://[user@]host[:http]/filename Use fetch (defaults to ftp, override for http) | |
1555 " sftpurm : sftp://[user@]host/filename Use scp | |
1556 let mipf = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$' | |
1557 let mf = '^\(\S\+\)\s\+\(\S\+\)$' | |
1558 let ftpurm = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$' | |
1559 let rcpurm = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$' | |
1560 let rcphf = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$' | |
559 | 1561 let scpurm = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$' |
482 | 1562 let httpurm = '^http://\([^/]\{-}\)\(/.*\)\=$' |
1621 | 1563 let davurm = '^davs\=://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$' |
482 | 1564 let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$' |
1565 let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$' | |
1566 let sftpurm = '^sftp://\([^/]\{-}\)/\(.*\)\=$' | |
719 | 1567 |
482 | 1568 " call Decho("determine method:") |
1569 " Determine Method | |
2751 | 1570 " Method#1: rcp://user@hostname/...path-to-file {{{3 |
482 | 1571 if match(a:choice,rcpurm) == 0 |
1572 " call Decho("rcp://...") | |
1573 let b:netrw_method = 1 | |
1574 let userid = substitute(a:choice,rcpurm,'\1',"") | |
1575 let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"") | |
1576 let b:netrw_fname = substitute(a:choice,rcpurm,'\3',"") | |
1577 if userid != "" | |
1578 let g:netrw_uid= userid | |
1579 endif | |
719 | 1580 |
2751 | 1581 " Method#4: scp://user@hostname/...path-to-file {{{3 |
482 | 1582 elseif match(a:choice,scpurm) == 0 |
1583 " call Decho("scp://...") | |
519 | 1584 let b:netrw_method = 4 |
482 | 1585 let g:netrw_machine = substitute(a:choice,scpurm,'\1',"") |
1586 let g:netrw_port = substitute(a:choice,scpurm,'\2',"") | |
1587 let b:netrw_fname = substitute(a:choice,scpurm,'\3',"") | |
719 | 1588 |
2751 | 1589 " Method#5: http://user@hostname/...path-to-file {{{3 |
482 | 1590 elseif match(a:choice,httpurm) == 0 |
1591 " call Decho("http://...") | |
1592 let b:netrw_method = 5 | |
1593 let g:netrw_machine= substitute(a:choice,httpurm,'\1',"") | |
1594 let b:netrw_fname = substitute(a:choice,httpurm,'\2',"") | |
719 | 1595 |
2751 | 1596 " Method#6: dav://hostname[:port]/..path-to-file.. {{{3 |
482 | 1597 elseif match(a:choice,davurm) == 0 |
1598 " call Decho("dav://...") | |
1599 let b:netrw_method= 6 | |
1600 if a:choice =~ '^s' | |
1601 let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"") | |
1602 else | |
1603 let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"") | |
1604 endif | |
1605 let b:netrw_fname = substitute(a:choice,davurm,'\3',"") | |
719 | 1606 |
2751 | 1607 " Method#7: rsync://user@hostname/...path-to-file {{{3 |
482 | 1608 elseif match(a:choice,rsyncurm) == 0 |
1609 " call Decho("rsync://...") | |
1610 let b:netrw_method = 7 | |
1611 let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"") | |
1612 let b:netrw_fname = substitute(a:choice,rsyncurm,'\2',"") | |
719 | 1613 |
2751 | 1614 " Methods 2,3: ftp://[user@]hostname[[:#]port]/...path-to-file {{{3 |
482 | 1615 elseif match(a:choice,ftpurm) == 0 |
1616 " call Decho("ftp://...") | |
519 | 1617 let userid = substitute(a:choice,ftpurm,'\2',"") |
482 | 1618 let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"") |
1619 let g:netrw_port = substitute(a:choice,ftpurm,'\4',"") | |
1620 let b:netrw_fname = substitute(a:choice,ftpurm,'\5',"") | |
2034 | 1621 " call Decho("g:netrw_machine<".g:netrw_machine.">") |
482 | 1622 if userid != "" |
1623 let g:netrw_uid= userid | |
1624 endif | |
2751 | 1625 if curmachine != g:netrw_machine |
1626 if exists("s:netrw_passwd") | |
1627 " if there's a change in hostname, require password re-entry | |
1628 unlet s:netrw_passwd | |
1629 endif | |
1630 if exists("netrw_port") | |
1631 unlet netrw_port | |
1632 endif | |
2034 | 1633 endif |
1621 | 1634 if exists("g:netrw_uid") && exists("s:netrw_passwd") |
482 | 1635 let b:netrw_method = 3 |
1636 else | |
2751 | 1637 if (has("win32") || has("win95") || has("win64") || has("win16")) && s:netrw_ftp_cmd =~ '-[sS]:' |
1638 " call Decho("has -s: : s:netrw_ftp_cmd<".s:netrw_ftp_cmd.">") | |
1639 " call Decho(" g:netrw_ftp_cmd<".g:netrw_ftp_cmd.">") | |
1640 if g:netrw_ftp_cmd =~ '-[sS]:\S*MACHINE\>' | |
1641 let machine = substitute(g:netrw_machine,'\([^.]\+\)\.\S*','\1','') | |
1642 let s:netrw_ftp_cmd= substitute(g:netrw_ftp_cmd,'\<MACHINE\>',machine.".ftp",'') | |
1643 " call Decho("s:netrw_ftp_cmd<".s:netrw_ftp_cmd.">") | |
1644 endif | |
1645 let b:netrw_method= 2 | |
1646 elseif s:FileReadable(expand("$HOME/.netrc")) && !g:netrw_ignorenetrc | |
1647 " call Decho("using <".expand("$HOME/.netrc")."> (readable)") | |
482 | 1648 let b:netrw_method= 2 |
1649 else | |
1650 if !exists("g:netrw_uid") || g:netrw_uid == "" | |
1651 call NetUserPass() | |
1621 | 1652 elseif !exists("s:netrw_passwd") || s:netrw_passwd == "" |
482 | 1653 call NetUserPass(g:netrw_uid) |
1621 | 1654 " else just use current g:netrw_uid and s:netrw_passwd |
482 | 1655 endif |
1656 let b:netrw_method= 3 | |
1657 endif | |
1658 endif | |
719 | 1659 |
2751 | 1660 " Method#8: fetch {{{3 |
482 | 1661 elseif match(a:choice,fetchurm) == 0 |
1662 " call Decho("fetch://...") | |
1663 let b:netrw_method = 8 | |
1664 let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"") | |
1665 let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"") | |
1666 let b:netrw_option = substitute(a:choice,fetchurm,'\4',"") | |
1667 let b:netrw_fname = substitute(a:choice,fetchurm,'\5',"") | |
719 | 1668 |
2751 | 1669 " Method#3: Issue an ftp : "machine id password [path/]filename" {{{3 |
482 | 1670 elseif match(a:choice,mipf) == 0 |
1671 " call Decho("(ftp) host id pass file") | |
1672 let b:netrw_method = 3 | |
1673 let g:netrw_machine = substitute(a:choice,mipf,'\1',"") | |
1674 let g:netrw_uid = substitute(a:choice,mipf,'\2',"") | |
1621 | 1675 let s:netrw_passwd = substitute(a:choice,mipf,'\3',"") |
482 | 1676 let b:netrw_fname = substitute(a:choice,mipf,'\4',"") |
719 | 1677 |
2751 | 1678 " Method#3: Issue an ftp: "hostname [path/]filename" {{{3 |
482 | 1679 elseif match(a:choice,mf) == 0 |
1680 " call Decho("(ftp) host file") | |
1621 | 1681 if exists("g:netrw_uid") && exists("s:netrw_passwd") |
482 | 1682 let b:netrw_method = 3 |
1683 let g:netrw_machine = substitute(a:choice,mf,'\1',"") | |
1684 let b:netrw_fname = substitute(a:choice,mf,'\2',"") | |
719 | 1685 |
1121 | 1686 elseif s:FileReadable(expand("$HOME/.netrc")) |
482 | 1687 let b:netrw_method = 2 |
1688 let g:netrw_machine = substitute(a:choice,mf,'\1',"") | |
1689 let b:netrw_fname = substitute(a:choice,mf,'\2',"") | |
1690 endif | |
719 | 1691 |
2751 | 1692 " Method#9: sftp://user@hostname/...path-to-file {{{3 |
482 | 1693 elseif match(a:choice,sftpurm) == 0 |
1694 " call Decho("sftp://...") | |
1695 let b:netrw_method = 9 | |
1696 let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"") | |
1697 let b:netrw_fname = substitute(a:choice,sftpurm,'\2',"") | |
719 | 1698 |
2751 | 1699 " Method#1: Issue an rcp: hostname:filename" (this one should be last) {{{3 |
482 | 1700 elseif match(a:choice,rcphf) == 0 |
1701 " call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">") | |
1621 | 1702 let b:netrw_method = 1 |
1703 let userid = substitute(a:choice,rcphf,'\2',"") | |
1704 let g:netrw_machine = substitute(a:choice,rcphf,'\3',"") | |
1705 let b:netrw_fname = substitute(a:choice,rcphf,'\4',"") | |
482 | 1706 " call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">") |
1707 " call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">") | |
1708 " call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">") | |
1709 " call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">") | |
1710 if userid != "" | |
1711 let g:netrw_uid= userid | |
1712 endif | |
719 | 1713 |
2751 | 1714 " Cannot Determine Method {{{3 |
482 | 1715 else |
1716 if !exists("g:netrw_quiet") | |
2034 | 1717 call netrw#ErrorMsg(s:WARNING,"cannot determine method (format: protocol://[user@]hostname[:port]/[path])",45) |
482 | 1718 endif |
1719 let b:netrw_method = -1 | |
1720 endif | |
2751 | 1721 "}}}3 |
1722 | |
482 | 1723 if g:netrw_port != "" |
2751 | 1724 " remove any leading [:#] from port number |
1725 let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','') | |
1726 elseif exists("netrw_port") | |
1727 " retain port number as implicit for subsequent ftp operations | |
1728 let g:netrw_port= netrw_port | |
482 | 1729 endif |
719 | 1730 |
482 | 1731 " call Decho("a:choice <".a:choice.">") |
1732 " call Decho("b:netrw_method <".b:netrw_method.">") | |
1733 " call Decho("g:netrw_machine<".g:netrw_machine.">") | |
1734 " call Decho("g:netrw_port <".g:netrw_port.">") | |
1735 " if exists("g:netrw_uid") "Decho | |
1736 " call Decho("g:netrw_uid <".g:netrw_uid.">") | |
1737 " endif "Decho | |
1621 | 1738 " if exists("s:netrw_passwd") "Decho |
1739 " call Decho("s:netrw_passwd <".s:netrw_passwd.">") | |
482 | 1740 " endif "Decho |
1741 " call Decho("b:netrw_fname <".b:netrw_fname.">") | |
2751 | 1742 " call Dret("NetrwMethod : b:netrw_method=".b:netrw_method." g:netrw_port=".g:netrw_port) |
482 | 1743 endfun |
1744 | |
1745 " ------------------------------------------------------------------------ | |
1121 | 1746 " NetReadFixup: this sort of function is typically written by the user {{{2 |
1747 " to handle extra junk that their system's ftp dumps | |
1748 " into the transfer. This function is provided as an | |
1749 " example and as a fix for a Windows 95 problem: in my | |
1750 " experience, win95's ftp always dumped four blank lines | |
1751 " at the end of the transfer. | |
1752 if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp | |
1753 fun! NetReadFixup(method, line1, line2) | |
1754 " call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")") | |
2034 | 1755 |
1756 " sanity checks -- attempt to convert inputs to integers | |
1757 let method = a:method + 0 | |
1758 let line1 = a:line1 + 0 | |
1759 let line2 = a:line2 + 0 | |
1760 if type(method) != 0 || type(line1) != 0 || type(line2) != 0 || method < 0 || line1 <= 0 || line2 <= 0 | |
1761 " call Dret("NetReadFixup") | |
1762 return | |
1763 endif | |
1764 | |
1121 | 1765 if method == 3 " ftp (no <.netrc>) |
1766 let fourblanklines= line2 - 3 | |
2034 | 1767 if fourblanklines >= line1 |
2152 | 1768 exe "sil keepj ".fourblanklines.",".line2."g/^\s*$/d" |
2034 | 1769 call histdel("/",-1) |
1770 endif | |
1771 endif | |
1772 | |
1121 | 1773 " call Dret("NetReadFixup") |
1774 endfun | |
1775 endif | |
1776 | |
1777 " --------------------------------------------------------------------- | |
650 | 1778 " NetUserPass: set username and password for subsequent ftp transfer {{{2 |
482 | 1779 " Usage: :call NetUserPass() -- will prompt for userid and password |
1780 " :call NetUserPass("uid") -- will prompt for password | |
1781 " :call NetUserPass("uid","password") -- sets global userid and password | |
1782 fun! NetUserPass(...) | |
1783 | |
1784 " get/set userid | |
1785 if a:0 == 0 | |
1786 " call Dfunc("NetUserPass(a:0<".a:0.">)") | |
1787 if !exists("g:netrw_uid") || g:netrw_uid == "" | |
1788 " via prompt | |
1789 let g:netrw_uid= input('Enter username: ') | |
1790 endif | |
1791 else " from command line | |
2152 | 1792 " call Dfunc("NetUserPass(a:1<".a:1.">)") |
482 | 1793 let g:netrw_uid= a:1 |
1794 endif | |
1795 | |
1796 " get password | |
1797 if a:0 <= 1 " via prompt | |
1798 " call Decho("a:0=".a:0." case <=1:") | |
1621 | 1799 let s:netrw_passwd= inputsecret("Enter Password: ") |
482 | 1800 else " from command line |
1801 " call Decho("a:0=".a:0." case >1: a:2<".a:2.">") | |
1621 | 1802 let s:netrw_passwd=a:2 |
482 | 1803 endif |
559 | 1804 |
482 | 1805 " call Dret("NetUserPass") |
1806 endfun | |
1807 | |
1121 | 1808 " =========================================== |
1809 " Shared Browsing Support: {{{1 | |
1810 " =========================================== | |
1811 | |
1812 " --------------------------------------------------------------------- | |
2751 | 1813 " s:NetrwMaps: {{{2 |
1814 fun! s:NetrwMaps(islocal) | |
1815 " call Dfunc("s:NetrwMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">") | |
1121 | 1816 if a:islocal |
1698 | 1817 " call Decho("make local maps") |
2751 | 1818 inoremap <buffer> <silent> a <c-o>:call <SID>NetrwHide(1)<cr> |
1819 inoremap <buffer> <silent> c <c-o>:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr> | |
1820 inoremap <buffer> <silent> C <c-o>:let g:netrw_chgwin= winnr()<cr> | |
1821 inoremap <buffer> <silent> % <c-o>:call <SID>NetrwOpenFile(1)<cr> | |
1822 inoremap <buffer> <silent> - <c-o>:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr> | |
1823 inoremap <buffer> <silent> <cr> <c-o>:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr> | |
1824 inoremap <buffer> <silent> d <c-o>:call <SID>NetrwMakeDir("")<cr> | |
1825 inoremap <buffer> <silent> gb <c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr> | |
1826 inoremap <buffer> <silent> gh <c-o>:<c-u>call <SID>NetrwHidden(1)<cr> | |
1827 inoremap <buffer> <silent> gp <c-o>:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr> | |
1828 inoremap <buffer> <silent> I <c-o>:call <SID>NetrwBannerCtrl(1)<cr> | |
1829 inoremap <buffer> <silent> i <c-o>:call <SID>NetrwListStyle(1)<cr> | |
1830 inoremap <buffer> <silent> mb <c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> | |
1831 inoremap <buffer> <silent> mB <c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> | |
1832 inoremap <buffer> <silent> mc <c-o>:<c-u>call <SID>NetrwMarkFileCopy(1)<cr> | |
1833 inoremap <buffer> <silent> md <c-o>:<c-u>call <SID>NetrwMarkFileDiff(1)<cr> | |
1834 inoremap <buffer> <silent> me <c-o>:<c-u>call <SID>NetrwMarkFileEdit(1)<cr> | |
1835 inoremap <buffer> <silent> mf <c-o>:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr> | |
1836 inoremap <buffer> <silent> mg <c-o>:<c-u>call <SID>NetrwMarkFileGrep(1)<cr> | |
1837 inoremap <buffer> <silent> mh <c-o>:<c-u>call <SID>NetrwMarkHideSfx(1)<cr> | |
1838 inoremap <buffer> <silent> mm <c-o>:<c-u>call <SID>NetrwMarkFileMove(1)<cr> | |
1839 inoremap <buffer> <silent> mp <c-o>:<c-u>call <SID>NetrwMarkFilePrint(1)<cr> | |
1840 inoremap <buffer> <silent> mr <c-o>:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr> | |
1841 inoremap <buffer> <silent> ms <c-o>:<c-u>call <SID>NetrwMarkFileSource(1)<cr> | |
1842 inoremap <buffer> <silent> mT <c-o>:<c-u>call <SID>NetrwMarkFileTag(1)<cr> | |
1843 inoremap <buffer> <silent> mt <c-o>:<c-u>call <SID>NetrwMarkFileTgt(1)<cr> | |
1844 inoremap <buffer> <silent> mu <c-o>:<c-u>call <SID>NetrwUnMarkFile(1)<cr> | |
1845 inoremap <buffer> <silent> mx <c-o>:<c-u>call <SID>NetrwMarkFileExe(1)<cr> | |
1846 inoremap <buffer> <silent> mz <c-o>:<c-u>call <SID>NetrwMarkFileCompress(1)<cr> | |
1847 inoremap <buffer> <silent> O <c-o>:call <SID>NetrwObtain(1)<cr> | |
1848 inoremap <buffer> <silent> o <c-o>:call <SID>NetrwSplit(3)<cr> | |
1849 inoremap <buffer> <silent> p <c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> | |
1850 inoremap <buffer> <silent> P <c-o>:call <SID>NetrwPrevWinOpen(1)<cr> | |
1851 inoremap <buffer> <silent> qb <c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> | |
1852 inoremap <buffer> <silent> qf <c-o>:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr> | |
1853 inoremap <buffer> <silent> r <c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr> | |
1854 inoremap <buffer> <silent> s <c-o>:call <SID>NetrwSortStyle(1)<cr> | |
1855 inoremap <buffer> <silent> S <c-o>:call <SID>NetSortSequence(1)<cr> | |
1856 inoremap <buffer> <silent> T <c-o>:call <SID>NetrwSplit(4)<bar>norm! gT<cr> | |
1857 inoremap <buffer> <silent> t <c-o>:call <SID>NetrwSplit(4)<cr> | |
1858 inoremap <buffer> <silent> u <c-o>:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr> | |
1859 inoremap <buffer> <silent> U <c-o>:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr> | |
1860 inoremap <buffer> <silent> v <c-o>:call <SID>NetrwSplit(5)<cr> | |
1861 inoremap <buffer> <silent> x <c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr> | |
1862 nnoremap <buffer> <silent> a :call <SID>NetrwHide(1)<cr> | |
1863 nnoremap <buffer> <silent> % :call <SID>NetrwOpenFile(1)<cr> | |
1864 nnoremap <buffer> <silent> c :exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr> | |
1865 nnoremap <buffer> <silent> C :let g:netrw_chgwin= winnr()<cr> | |
1621 | 1866 nnoremap <buffer> <silent> <cr> :call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr> |
2751 | 1867 nnoremap <buffer> <silent> d :call <SID>NetrwMakeDir("")<cr> |
1621 | 1868 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr> |
2751 | 1869 nnoremap <buffer> <silent> gb :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr> |
1870 nnoremap <buffer> <silent> gd :<c-u>call <SID>NetrwForceChgDir(1,<SID>NetrwGetWord())<cr> | |
1871 nnoremap <buffer> <silent> gf :<c-u>call <SID>NetrwForceFile(1,<SID>NetrwGetWord())<cr> | |
1872 nnoremap <buffer> <silent> gh :<c-u>call <SID>NetrwHidden(1)<cr> | |
1873 nnoremap <buffer> <silent> gp :<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr> | |
1874 nnoremap <buffer> <silent> I :call <SID>NetrwBannerCtrl(1)<cr> | |
1875 nnoremap <buffer> <silent> i :call <SID>NetrwListStyle(1)<cr> | |
2034 | 1876 nnoremap <buffer> <silent> mb :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> |
2751 | 1877 nnoremap <buffer> <silent> mB :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> |
1621 | 1878 nnoremap <buffer> <silent> mc :<c-u>call <SID>NetrwMarkFileCopy(1)<cr> |
1879 nnoremap <buffer> <silent> md :<c-u>call <SID>NetrwMarkFileDiff(1)<cr> | |
1880 nnoremap <buffer> <silent> me :<c-u>call <SID>NetrwMarkFileEdit(1)<cr> | |
1881 nnoremap <buffer> <silent> mf :<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr> | |
1882 nnoremap <buffer> <silent> mg :<c-u>call <SID>NetrwMarkFileGrep(1)<cr> | |
1883 nnoremap <buffer> <silent> mh :<c-u>call <SID>NetrwMarkHideSfx(1)<cr> | |
1884 nnoremap <buffer> <silent> mm :<c-u>call <SID>NetrwMarkFileMove(1)<cr> | |
1885 nnoremap <buffer> <silent> mp :<c-u>call <SID>NetrwMarkFilePrint(1)<cr> | |
1886 nnoremap <buffer> <silent> mr :<c-u>call <SID>NetrwMarkFileRegexp(1)<cr> | |
1887 nnoremap <buffer> <silent> ms :<c-u>call <SID>NetrwMarkFileSource(1)<cr> | |
1888 nnoremap <buffer> <silent> mT :<c-u>call <SID>NetrwMarkFileTag(1)<cr> | |
1889 nnoremap <buffer> <silent> mt :<c-u>call <SID>NetrwMarkFileTgt(1)<cr> | |
1890 nnoremap <buffer> <silent> mu :<c-u>call <SID>NetrwUnMarkFile(1)<cr> | |
1891 nnoremap <buffer> <silent> mx :<c-u>call <SID>NetrwMarkFileExe(1)<cr> | |
1892 nnoremap <buffer> <silent> mz :<c-u>call <SID>NetrwMarkFileCompress(1)<cr> | |
2751 | 1893 nnoremap <buffer> <silent> O :call <SID>NetrwObtain(1)<cr> |
1621 | 1894 nnoremap <buffer> <silent> o :call <SID>NetrwSplit(3)<cr> |
1895 nnoremap <buffer> <silent> p :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> | |
1896 nnoremap <buffer> <silent> P :call <SID>NetrwPrevWinOpen(1)<cr> | |
2034 | 1897 nnoremap <buffer> <silent> qb :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> |
1621 | 1898 nnoremap <buffer> <silent> qf :<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr> |
1899 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr> | |
1900 nnoremap <buffer> <silent> s :call <SID>NetrwSortStyle(1)<cr> | |
1121 | 1901 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(1)<cr> |
2751 | 1902 nnoremap <buffer> <silent> T :call <SID>NetrwSplit(4)<bar>norm! gT<cr> |
1621 | 1903 nnoremap <buffer> <silent> t :call <SID>NetrwSplit(4)<cr> |
2034 | 1904 nnoremap <buffer> <silent> u :<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr> |
1905 nnoremap <buffer> <silent> U :<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr> | |
1621 | 1906 nnoremap <buffer> <silent> v :call <SID>NetrwSplit(5)<cr> |
1907 nnoremap <buffer> <silent> x :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr> | |
1908 if !hasmapto('<Plug>NetrwHideEdit') | |
1909 nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit | |
2152 | 1910 imap <buffer> <unique> <c-h> <Plug>NetrwHideEdit |
1621 | 1911 endif |
1912 nnoremap <buffer> <silent> <Plug>NetrwHideEdit :call <SID>NetrwHideEdit(1)<cr> | |
1913 if !hasmapto('<Plug>NetrwRefresh') | |
1914 nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh | |
2152 | 1915 imap <buffer> <unique> <c-l> <Plug>NetrwRefresh |
1621 | 1916 endif |
1917 nnoremap <buffer> <silent> <Plug>NetrwRefresh :call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr> | |
1121 | 1918 if s:didstarstar || !mapcheck("<s-down>","n") |
1919 nnoremap <buffer> <silent> <s-down> :Nexplore<cr> | |
2152 | 1920 inoremap <buffer> <silent> <s-down> :Nexplore<cr> |
1121 | 1921 endif |
1922 if s:didstarstar || !mapcheck("<s-up>","n") | |
1923 nnoremap <buffer> <silent> <s-up> :Pexplore<cr> | |
2152 | 1924 inoremap <buffer> <silent> <s-up> :Pexplore<cr> |
1121 | 1925 endif |
1698 | 1926 let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape) |
1621 | 1927 if g:netrw_mousemaps == 1 |
1928 nnoremap <buffer> <silent> <leftmouse> <leftmouse>:call <SID>NetrwLeftmouse(1)<cr> | |
1929 nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr> | |
1930 nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr> | |
2751 | 1931 nmap <buffer> <silent> <2-leftmouse> - |
1698 | 1932 exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' |
1933 exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' | |
2152 | 1934 inoremap <buffer> <silent> <leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(1)<cr> |
1935 inoremap <buffer> <silent> <middlemouse> <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(1)<cr> | |
1936 inoremap <buffer> <silent> <s-leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr> | |
1937 exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' | |
1698 | 1938 endif |
1939 exe 'nnoremap <buffer> <silent> <del> :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' | |
2152 | 1940 exe 'nnoremap <buffer> <silent> D :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' |
1941 exe 'nnoremap <buffer> <silent> R :call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>' | |
1942 exe 'nnoremap <buffer> <silent> <Leader>m :call <SID>NetrwMakeDir("")<cr>' | |
1698 | 1943 exe 'vnoremap <buffer> <silent> <del> :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' |
1944 exe 'vnoremap <buffer> <silent> D :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' | |
1945 exe 'vnoremap <buffer> <silent> R :call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>' | |
2152 | 1946 exe 'inoremap <buffer> <silent> <del> <c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' |
1947 exe 'inoremap <buffer> <silent> D <c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>' | |
1948 exe 'inoremap <buffer> <silent> R <c-o>:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>' | |
1949 exe 'inoremap <buffer> <silent> <Leader>m <c-o>:call <SID>NetrwMakeDir("")<cr>' | |
1621 | 1950 nnoremap <buffer> <F1> :he netrw-quickhelp<cr> |
1121 | 1951 |
1952 else " remote | |
1698 | 1953 " call Decho("make remote maps") |
1121 | 1954 call s:RemotePathAnalysis(b:netrw_curdir) |
1621 | 1955 nnoremap <buffer> <silent> <cr> :call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr> |
1956 nnoremap <buffer> <silent> <c-l> :call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> | |
1957 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr> | |
1958 nnoremap <buffer> <silent> a :call <SID>NetrwHide(0)<cr> | |
2034 | 1959 nnoremap <buffer> <silent> mb :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> |
1621 | 1960 nnoremap <buffer> <silent> mc :<c-u>call <SID>NetrwMarkFileCopy(0)<cr> |
1961 nnoremap <buffer> <silent> md :<c-u>call <SID>NetrwMarkFileDiff(0)<cr> | |
1962 nnoremap <buffer> <silent> me :<c-u>call <SID>NetrwMarkFileEdit(0)<cr> | |
1963 nnoremap <buffer> <silent> mf :<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr> | |
1964 nnoremap <buffer> <silent> mg :<c-u>call <SID>NetrwMarkFileGrep(0)<cr> | |
1965 nnoremap <buffer> <silent> mh :<c-u>call <SID>NetrwMarkHideSfx(0)<cr> | |
1966 nnoremap <buffer> <silent> mm :<c-u>call <SID>NetrwMarkFileMove(0)<cr> | |
1967 nnoremap <buffer> <silent> mp :<c-u>call <SID>NetrwMarkFilePrint(0)<cr> | |
1968 nnoremap <buffer> <silent> mr :<c-u>call <SID>NetrwMarkFileRegexp(0)<cr> | |
1969 nnoremap <buffer> <silent> ms :<c-u>call <SID>NetrwMarkFileSource(0)<cr> | |
1970 nnoremap <buffer> <silent> mT :<c-u>call <SID>NetrwMarkFileTag(0)<cr> | |
1971 nnoremap <buffer> <silent> mt :<c-u>call <SID>NetrwMarkFileTgt(0)<cr> | |
1972 nnoremap <buffer> <silent> mu :<c-u>call <SID>NetrwUnMarkFile(0)<cr> | |
1973 nnoremap <buffer> <silent> mx :<c-u>call <SID>NetrwMarkFileExe(0)<cr> | |
1974 nnoremap <buffer> <silent> mz :<c-u>call <SID>NetrwMarkFileCompress(0)<cr> | |
2034 | 1975 nnoremap <buffer> <silent> gb :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr> |
2751 | 1976 nnoremap <buffer> <silent> gd :<c-u>call <SID>NetrwForceChgDir(0,<SID>NetrwGetWord())<cr> |
1977 nnoremap <buffer> <silent> gf :<c-u>call <SID>NetrwForceFile(0,<SID>NetrwGetWord())<cr> | |
1621 | 1978 nnoremap <buffer> <silent> gh :<c-u>call <SID>NetrwHidden(0)<cr> |
2034 | 1979 nnoremap <buffer> <silent> gp :<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr> |
1121 | 1980 nnoremap <buffer> <silent> C :let g:netrw_chgwin= winnr()<cr> |
1621 | 1981 nnoremap <buffer> <silent> i :call <SID>NetrwListStyle(0)<cr> |
2034 | 1982 nnoremap <buffer> <silent> I :call <SID>NetrwBannerCtrl(1)<cr> |
1621 | 1983 nnoremap <buffer> <silent> o :call <SID>NetrwSplit(0)<cr> |
1984 nnoremap <buffer> <silent> O :call <SID>NetrwObtain(0)<cr> | |
1985 nnoremap <buffer> <silent> p :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> | |
1986 nnoremap <buffer> <silent> P :call <SID>NetrwPrevWinOpen(0)<cr> | |
2034 | 1987 nnoremap <buffer> <silent> qb :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> |
1988 nnoremap <buffer> <silent> mB :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> | |
1621 | 1989 nnoremap <buffer> <silent> qf :<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr> |
1990 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> | |
1991 nnoremap <buffer> <silent> s :call <SID>NetrwSortStyle(0)<cr> | |
1121 | 1992 nnoremap <buffer> <silent> S :call <SID>NetSortSequence(0)<cr> |
1621 | 1993 nnoremap <buffer> <silent> t :call <SID>NetrwSplit(1)<cr> |
2034 | 1994 nnoremap <buffer> <silent> T :call <SID>NetrwSplit(1)<bar>norm! gT<cr> |
1995 nnoremap <buffer> <silent> u :<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr> | |
1996 nnoremap <buffer> <silent> U :<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr> | |
1621 | 1997 nnoremap <buffer> <silent> v :call <SID>NetrwSplit(2)<cr> |
1998 nnoremap <buffer> <silent> x :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr> | |
1668 | 1999 nnoremap <buffer> <silent> % :call <SID>NetrwOpenFile(0)<cr> |
2152 | 2000 inoremap <buffer> <silent> <cr> <c-o>:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr> |
2001 inoremap <buffer> <silent> <c-l> <c-o>:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> | |
2002 inoremap <buffer> <silent> - <c-o>:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr> | |
2003 inoremap <buffer> <silent> a <c-o>:call <SID>NetrwHide(0)<cr> | |
2004 inoremap <buffer> <silent> mb <c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr> | |
2005 inoremap <buffer> <silent> mc <c-o>:<c-u>call <SID>NetrwMarkFileCopy(0)<cr> | |
2006 inoremap <buffer> <silent> md <c-o>:<c-u>call <SID>NetrwMarkFileDiff(0)<cr> | |
2007 inoremap <buffer> <silent> me <c-o>:<c-u>call <SID>NetrwMarkFileEdit(0)<cr> | |
2008 inoremap <buffer> <silent> mf <c-o>:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr> | |
2009 inoremap <buffer> <silent> mg <c-o>:<c-u>call <SID>NetrwMarkFileGrep(0)<cr> | |
2010 inoremap <buffer> <silent> mh <c-o>:<c-u>call <SID>NetrwMarkHideSfx(0)<cr> | |
2011 inoremap <buffer> <silent> mm <c-o>:<c-u>call <SID>NetrwMarkFileMove(0)<cr> | |
2012 inoremap <buffer> <silent> mp <c-o>:<c-u>call <SID>NetrwMarkFilePrint(0)<cr> | |
2013 inoremap <buffer> <silent> mr <c-o>:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr> | |
2014 inoremap <buffer> <silent> ms <c-o>:<c-u>call <SID>NetrwMarkFileSource(0)<cr> | |
2015 inoremap <buffer> <silent> mT <c-o>:<c-u>call <SID>NetrwMarkFileTag(0)<cr> | |
2016 inoremap <buffer> <silent> mt <c-o>:<c-u>call <SID>NetrwMarkFileTgt(0)<cr> | |
2017 inoremap <buffer> <silent> mu <c-o>:<c-u>call <SID>NetrwUnMarkFile(0)<cr> | |
2018 inoremap <buffer> <silent> mx <c-o>:<c-u>call <SID>NetrwMarkFileExe(0)<cr> | |
2019 inoremap <buffer> <silent> mz <c-o>:<c-u>call <SID>NetrwMarkFileCompress(0)<cr> | |
2020 inoremap <buffer> <silent> gb <c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr> | |
2021 inoremap <buffer> <silent> gh <c-o>:<c-u>call <SID>NetrwHidden(0)<cr> | |
2022 inoremap <buffer> <silent> gp <c-o>:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr> | |
2023 inoremap <buffer> <silent> C <c-o>:let g:netrw_chgwin= winnr()<cr> | |
2024 inoremap <buffer> <silent> i <c-o>:call <SID>NetrwListStyle(0)<cr> | |
2025 inoremap <buffer> <silent> I <c-o>:call <SID>NetrwBannerCtrl(1)<cr> | |
2026 inoremap <buffer> <silent> o <c-o>:call <SID>NetrwSplit(0)<cr> | |
2027 inoremap <buffer> <silent> O <c-o>:call <SID>NetrwObtain(0)<cr> | |
2028 inoremap <buffer> <silent> p <c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr> | |
2029 inoremap <buffer> <silent> P <c-o>:call <SID>NetrwPrevWinOpen(0)<cr> | |
2030 inoremap <buffer> <silent> qb <c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr> | |
2031 inoremap <buffer> <silent> mB <c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr> | |
2032 inoremap <buffer> <silent> qf <c-o>:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr> | |
2033 inoremap <buffer> <silent> r <c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> | |
2034 inoremap <buffer> <silent> s <c-o>:call <SID>NetrwSortStyle(0)<cr> | |
2035 inoremap <buffer> <silent> S <c-o>:call <SID>NetSortSequence(0)<cr> | |
2036 inoremap <buffer> <silent> t <c-o>:call <SID>NetrwSplit(1)<cr> | |
2037 inoremap <buffer> <silent> T <c-o>:call <SID>NetrwSplit(1)<bar>norm! gT<cr> | |
2038 inoremap <buffer> <silent> u <c-o>:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr> | |
2039 inoremap <buffer> <silent> U <c-o>:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr> | |
2040 inoremap <buffer> <silent> v <c-o>:call <SID>NetrwSplit(2)<cr> | |
2041 inoremap <buffer> <silent> x <c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr> | |
2042 inoremap <buffer> <silent> % <c-o>:call <SID>NetrwOpenFile(0)<cr> | |
1621 | 2043 if !hasmapto('<Plug>NetrwHideEdit') |
2044 nmap <buffer> <c-h> <Plug>NetrwHideEdit | |
2152 | 2045 imap <buffer> <c-h> <Plug>NetrwHideEdit |
1621 | 2046 endif |
2047 nnoremap <buffer> <silent> <Plug>NetrwHideEdit :call <SID>NetrwHideEdit(0)<cr> | |
2048 if !hasmapto('<Plug>NetrwRefresh') | |
2049 nmap <buffer> <c-l> <Plug>NetrwRefresh | |
2152 | 2050 imap <buffer> <c-l> <Plug>NetrwRefresh |
1621 | 2051 endif |
1698 | 2052 |
2053 let mapsafepath = escape(s:path, s:netrw_map_escape) | |
2054 let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape) | |
2055 | |
1621 | 2056 nnoremap <buffer> <silent> <Plug>NetrwRefresh :call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr> |
2057 if g:netrw_mousemaps == 1 | |
2058 nnoremap <buffer> <silent> <leftmouse> <leftmouse>:call <SID>NetrwLeftmouse(0)<cr> | |
2059 nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr> | |
2060 nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr> | |
2751 | 2061 nmap <buffer> <silent> <2-leftmouse> - |
1698 | 2062 exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' |
2063 exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' | |
2152 | 2064 inoremap <buffer> <silent> <leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(0)<cr> |
2065 inoremap <buffer> <silent> <middlemouse> <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(0)<cr> | |
2066 inoremap <buffer> <silent> <s-leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr> | |
2067 exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' | |
1698 | 2068 endif |
2069 exe 'nnoremap <buffer> <silent> <del> :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' | |
2152 | 2070 exe 'nnoremap <buffer> <silent> d :call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>' |
2071 exe 'nnoremap <buffer> <silent> D :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' | |
2072 exe 'nnoremap <buffer> <silent> R :call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' | |
1698 | 2073 exe 'vnoremap <buffer> <silent> <del> :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' |
2152 | 2074 exe 'vnoremap <buffer> <silent> D :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' |
2075 exe 'vnoremap <buffer> <silent> R :call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' | |
2076 exe 'inoremap <buffer> <silent> <del> <c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' | |
2077 exe 'inoremap <buffer> <silent> d <c-o>:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>' | |
2078 exe 'inoremap <buffer> <silent> D <c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' | |
2079 exe 'inoremap <buffer> <silent> R <c-o>:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>' | |
1668 | 2080 nnoremap <buffer> <F1> :he netrw-quickhelp<cr> |
2152 | 2081 inoremap <buffer> <F1> <c-o>:he netrw-quickhelp<cr> |
1121 | 2082 endif |
2751 | 2083 |
2084 " set up Rexplore and leftmouse-double-click | |
2085 com! Rexplore call s:NetrwRexplore(w:netrw_rexlocal,exists("w:netrw_rexdir")? w:netrw_rexdir : ".") | |
2086 if g:netrw_mousemaps && g:netrw_retmap | |
2087 if !hasmapto("<Plug>NetrwReturn") | |
2088 if maparg("<2-leftmouse>","n") == "" || maparg("<2-leftmouse>","n") =~ '^-$' | |
2089 " call Decho("making map for 2-leftmouse") | |
2090 nmap <unique> <silent> <2-leftmouse> <Plug>NetrwReturn | |
2091 elseif maparg("<c-leftmouse>","n") == "" | |
2092 " call Decho("making map for c-leftmouse") | |
2093 nmap <unique> <silent> <c-leftmouse> <Plug>NetrwReturn | |
2094 endif | |
2095 endif | |
2096 exe 'nnoremap <silent> <Plug>NetrwReturn :Rexplore<cr>' | |
2097 " call Decho("made <Plug>NetrwReturn map") | |
2098 endif | |
2099 | |
2100 keepj call s:SetRexDir(a:islocal,b:netrw_curdir) | |
2101 " call Dret("s:NetrwMaps") | |
1121 | 2102 endfun |
2103 | |
2104 " --------------------------------------------------------------------- | |
1621 | 2105 " s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2 |
2106 fun! s:ExplorePatHls(pattern) | |
2107 " call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)") | |
2108 let repat= substitute(a:pattern,'^**/\{1,2}','','') | |
2109 " call Decho("repat<".repat.">") | |
2110 let repat= escape(repat,'][.\') | |
2111 " call Decho("repat<".repat.">") | |
2112 let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>' | |
2113 " call Dret("s:ExplorePatHls repat<".repat.">") | |
2114 return repat | |
1121 | 2115 endfun |
2116 | |
2117 " --------------------------------------------------------------------- | |
2034 | 2118 " s:NetrwBookHistHandler: {{{2 |
1621 | 2119 " 0: (user: <mb>) bookmark current directory |
2120 " 1: (user: <gb>) change to the bookmarked directory | |
2121 " 2: (user: <qb>) list bookmarks | |
2122 " 3: (browsing) record current directory history | |
2123 " 4: (user: <u>) go up (previous) bookmark | |
2124 " 5: (user: <U>) go down (next) bookmark | |
2125 " 6: (user: <mB>) delete bookmark | |
2034 | 2126 fun! s:NetrwBookHistHandler(chg,curdir) |
2152 | 2127 " call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax) |
1121 | 2128 |
2129 if a:chg == 0 | |
2130 " bookmark the current directory | |
2131 " call Decho("(user: <b>) bookmark the current directory") | |
2034 | 2132 if !exists("g:netrw_bookmarklist") |
2133 let g:netrw_bookmarklist= [] | |
2134 endif | |
2135 if index(g:netrw_bookmarklist,a:curdir) == -1 | |
2136 " curdir not currently in g:netrw_bookmarklist, so include it | |
2137 call add(g:netrw_bookmarklist,a:curdir) | |
2138 call sort(g:netrw_bookmarklist) | |
1121 | 2139 endif |
2140 echo "bookmarked the current directory" | |
2141 | |
2142 elseif a:chg == 1 | |
2143 " change to the bookmarked directory | |
2034 | 2144 " call Decho("(user: <".v:count."mb>) change to the bookmarked directory") |
2145 if exists("g:netrw_bookmarklist[v:count-1]") | |
2751 | 2146 exe "keepj e ".fnameescape(g:netrw_bookmarklist[v:count-1]) |
1121 | 2147 else |
2148 echomsg "Sorry, bookmark#".v:count." doesn't exist!" | |
2149 endif | |
2150 | |
2151 elseif a:chg == 2 | |
1621 | 2152 " redraw! |
1121 | 2153 let didwork= 0 |
2154 " list user's bookmarks | |
2155 " call Decho("(user: <q>) list user's bookmarks") | |
2034 | 2156 if exists("g:netrw_bookmarklist") |
2157 " call Decho('list '.len(g:netrw_bookmarklist).' bookmarks') | |
2158 let cnt= 1 | |
2159 for bmd in g:netrw_bookmarklist | |
2160 " call Decho("Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1]) | |
2161 echo "Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1] | |
2162 let didwork = 1 | |
2163 let cnt = cnt + 1 | |
2164 endfor | |
1121 | 2165 endif |
2166 | |
2167 " list directory history | |
2034 | 2168 let cnt = g:netrw_dirhist_cnt |
1121 | 2169 let first = 1 |
2170 let histcnt = 0 | |
2751 | 2171 if g:netrw_dirhistmax > 0 |
2172 while ( first || cnt != g:netrw_dirhist_cnt ) | |
2034 | 2173 " call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:netrw_dirhist_cnt) |
2751 | 2174 let histcnt= histcnt + 1 |
2175 if exists("g:netrw_dirhist_{cnt}") | |
2034 | 2176 " call Decho("Netrw History#".histcnt.": ".g:netrw_dirhist_{cnt}) |
2751 | 2177 echo "Netrw History#".histcnt.": ".g:netrw_dirhist_{cnt} |
2178 let didwork= 1 | |
2179 endif | |
2180 let first = 0 | |
2181 let cnt = ( cnt - 1 ) % g:netrw_dirhistmax | |
2182 if cnt < 0 | |
2183 let cnt= cnt + g:netrw_dirhistmax | |
2184 endif | |
2185 endwhile | |
2186 else | |
2187 let g:netrw_dirhist_cnt= 0 | |
2188 endif | |
1121 | 2189 if didwork |
2190 call inputsave()|call input("Press <cr> to continue")|call inputrestore() | |
2191 endif | |
2192 | |
2193 elseif a:chg == 3 | |
2194 " saves most recently visited directories (when they differ) | |
2195 " call Decho("(browsing) record curdir history") | |
2034 | 2196 if !exists("g:netrw_dirhist_cnt") || !exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") || g:netrw_dirhist_{g:netrw_dirhist_cnt} != a:curdir |
2751 | 2197 if g:netrw_dirhistmax > 0 |
2198 let g:netrw_dirhist_cnt = ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax | |
2199 let g:netrw_dirhist_{g:netrw_dirhist_cnt} = a:curdir | |
2200 endif | |
2034 | 2201 " call Decho("save dirhist#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">") |
1121 | 2202 endif |
2203 | |
2204 elseif a:chg == 4 | |
2205 " u: change to the previous directory stored on the history list | |
2206 " call Decho("(user: <u>) chg to prev dir from history") | |
2751 | 2207 if g:netrw_dirhistmax > 0 |
2208 let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax | |
2209 if g:netrw_dirhist_cnt < 0 | |
2210 let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax | |
2211 endif | |
2212 else | |
2213 let g:netrw_dirhist_cnt= 0 | |
2034 | 2214 endif |
2215 if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") | |
2216 " call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">") | |
1121 | 2217 if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") |
2218 setlocal ma noro | |
1621 | 2219 " call Decho("setlocal ma noro") |
2751 | 2220 sil! keepj %d |
1121 | 2221 setlocal nomod |
1621 | 2222 " call Decho("setlocal nomod") |
1121 | 2223 endif |
2034 | 2224 " " call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})) |
2152 | 2225 exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}) |
1121 | 2226 else |
2751 | 2227 if g:netrw_dirhistmax > 0 |
2228 let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax | |
2229 else | |
2230 let g:netrw_dirhist_cnt= 0 | |
2231 endif | |
1121 | 2232 echo "Sorry, no predecessor directory exists yet" |
2233 endif | |
2234 | |
2235 elseif a:chg == 5 | |
2236 " U: change to the subsequent directory stored on the history list | |
2237 " call Decho("(user: <U>) chg to next dir from history") | |
2751 | 2238 if g:netrw_dirhistmax > 0 |
2239 let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax | |
2240 if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") | |
2034 | 2241 " call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">") |
2751 | 2242 if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") |
2243 setlocal ma noro | |
1621 | 2244 " call Decho("setlocal ma noro") |
2751 | 2245 sil! keepj %d |
1621 | 2246 " call Decho("removed all lines from buffer (%d)") |
2751 | 2247 setlocal nomod |
1621 | 2248 " call Decho("setlocal nomod") |
2751 | 2249 endif |
2034 | 2250 " call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})) |
2751 | 2251 exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}) |
2252 else | |
2253 let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax | |
2254 if g:netrw_dirhist_cnt < 0 | |
2255 let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax | |
2256 endif | |
2257 echo "Sorry, no successor directory exists yet" | |
2258 endif | |
1121 | 2259 else |
2751 | 2260 let g:netrw_dirhist_cnt= 0 |
2261 echo "Sorry, no successor directory exists yet (g:netrw_dirhistmax is ".g:netrw_dirhistmax.")" | |
1121 | 2262 endif |
1621 | 2263 |
2264 elseif a:chg == 6 | |
2034 | 2265 " delete the v:count'th bookmark |
2266 " call Decho("delete bookmark#".v:count."<".g:netrw_bookmarklist[v:count-1].">") | |
2267 let savefile= s:NetrwHome()."/.netrwbook" | |
2268 if filereadable(savefile) | |
2751 | 2269 keepj call s:NetrwBookHistSave() " done here to merge bookmarks first |
2270 keepj call delete(savefile) | |
2271 endif | |
2272 keepj call remove(g:netrw_bookmarklist,v:count-1) | |
1621 | 2273 endif |
2274 call s:NetrwBookmarkMenu() | |
2152 | 2275 " call Dret("s:NetrwBookHistHandler") |
2034 | 2276 endfun |
2277 | |
2278 " --------------------------------------------------------------------- | |
2279 " s:NetrwBookHistRead: this function reads bookmarks and history {{{2 | |
2280 " Sister function: s:NetrwBookHistSave() | |
2281 fun! s:NetrwBookHistRead() | |
2282 " call Dfunc("s:NetrwBookHistRead()") | |
2283 if !exists("s:netrw_initbookhist") | |
2284 let home = s:NetrwHome() | |
2285 let savefile= home."/.netrwbook" | |
2286 if filereadable(savefile) | |
2287 " call Decho("sourcing .netrwbook") | |
2751 | 2288 exe "keepj so ".savefile |
2289 endif | |
2290 if g:netrw_dirhistmax > 0 | |
2291 let savefile= home."/.netrwhist" | |
2292 if filereadable(savefile) | |
2034 | 2293 " call Decho("sourcing .netrwhist") |
2751 | 2294 exe "keepj so ".savefile |
2295 endif | |
2296 let s:netrw_initbookhist= 1 | |
2297 au VimLeave * call s:NetrwBookHistSave() | |
2298 endif | |
2034 | 2299 endif |
2300 " call Dret("s:NetrwBookHistRead") | |
2301 endfun | |
2302 | |
2303 " --------------------------------------------------------------------- | |
2304 " s:NetrwBookHistSave: this function saves bookmarks and history {{{2 | |
2305 " Sister function: s:NetrwBookHistRead() | |
2306 " I used to do this via viminfo but that appears to | |
2307 " be unreliable for long-term storage | |
2308 fun! s:NetrwBookHistSave() | |
2309 " call Dfunc("s:NetrwBookHistSave() dirhistmax=".g:netrw_dirhistmax) | |
2751 | 2310 if g:netrw_dirhistmax <= 0 |
2311 " call Dret("s:NetrwBookHistSave : dirhistmax=".g:netrw_dirhistmax) | |
2312 return | |
2313 endif | |
2314 | |
2034 | 2315 let savefile= s:NetrwHome()."/.netrwhist" |
2316 1split | |
2317 call s:NetrwEnew() | |
2318 setlocal cino= com= cpo-=aA fo=nroql2 tw=0 report=10000 noswf | |
2319 setlocal nocin noai noci magic nospell nohid wig= noaw | |
2320 setlocal ma noro write | |
2321 if exists("&acd") | setlocal noacd | endif | |
2751 | 2322 sil! keepj %d |
2034 | 2323 |
2324 " save .netrwhist -- no attempt to merge | |
2751 | 2325 sil! file .netrwhist |
2034 | 2326 call setline(1,"let g:netrw_dirhistmax =".g:netrw_dirhistmax) |
2327 call setline(2,"let g:netrw_dirhist_cnt =".g:netrw_dirhist_cnt) | |
2328 let lastline = line("$") | |
2329 let cnt = 1 | |
2330 while cnt <= g:netrw_dirhist_cnt | |
2331 call setline((cnt+lastline),'let g:netrw_dirhist_'.cnt."='".g:netrw_dirhist_{cnt}."'") | |
2332 let cnt= cnt + 1 | |
2333 endwhile | |
2152 | 2334 exe "sil! w! ".savefile |
2335 | |
2336 sil keepj %d | |
2034 | 2337 if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] |
2338 " merge and write .netrwbook | |
2339 let savefile= s:NetrwHome()."/.netrwbook" | |
2340 | |
2341 if filereadable(savefile) | |
2342 let booklist= deepcopy(g:netrw_bookmarklist) | |
2152 | 2343 exe "sil keepj so ".savefile |
2034 | 2344 for bdm in booklist |
2345 if index(g:netrw_bookmarklist,bdm) == -1 | |
2346 call add(g:netrw_bookmarklist,bdm) | |
2347 endif | |
2348 endfor | |
2349 call sort(g:netrw_bookmarklist) | |
2152 | 2350 exe "sil! w! ".savefile |
2034 | 2351 endif |
2352 | |
2353 " construct and save .netrwbook | |
2354 call setline(1,"let g:netrw_bookmarklist= ".string(g:netrw_bookmarklist)) | |
2152 | 2355 exe "sil! w! ".savefile |
2034 | 2356 endif |
2357 let bgone= bufnr("%") | |
2358 q! | |
2359 exe bgone."bwipe!" | |
2360 | |
2361 " call Dret("s:NetrwBookHistSave") | |
1621 | 2362 endfun |
2363 | |
2364 " --------------------------------------------------------------------- | |
2365 " s:NetrwBrowse: This function uses the command in g:netrw_list_cmd to provide a {{{2 | |
2366 " list of the contents of a local or remote directory. It is assumed that the | |
2367 " g:netrw_list_cmd has a string, USEPORT HOSTNAME, that needs to be substituted | |
2368 " with the requested remote hostname first. | |
2369 fun! s:NetrwBrowse(islocal,dirname) | |
2370 if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif | |
2152 | 2371 " call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr()) |
1621 | 2372 " call Decho("tab#".tabpagenr()." win#".winnr()) |
2373 " call Dredir("ls!") | |
2034 | 2374 if !exists("s:netrw_initbookhist") |
2751 | 2375 keepj call s:NetrwBookHistRead() |
2034 | 2376 endif |
2377 | |
2378 " simplify the dirname (especially for ".."s in dirnames) | |
2379 if a:dirname !~ '^\a\+://' | |
2380 let dirname= simplify(a:dirname) | |
2381 else | |
2382 let dirname= a:dirname | |
2383 endif | |
1621 | 2384 |
2385 if exists("s:netrw_skipbrowse") | |
2386 unlet s:netrw_skipbrowse | |
1668 | 2387 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
1621 | 2388 " call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse) |
2389 return | |
2390 endif | |
2391 if !exists("*shellescape") | |
2751 | 2392 keepj call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69) |
1621 | 2393 " call Dret("s:NetrwBrowse : missing shellescape()") |
2394 return | |
2395 endif | |
2396 if !exists("*fnameescape") | |
2751 | 2397 keepj call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing fnameescape()",70) |
1621 | 2398 " call Dret("s:NetrwBrowse : missing fnameescape()") |
2399 return | |
2400 endif | |
2401 | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2402 call s:NetrwOptionSave("w:") |
1621 | 2403 |
2404 " re-instate any marked files | |
2405 if exists("s:netrwmarkfilelist_{bufnr('%')}") | |
2406 " call Decho("clearing marked files") | |
2407 exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/" | |
2408 endif | |
2409 | |
2410 if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep | |
2411 " call Decho("handle w:netrw_acdkeep:") | |
2034 | 2412 " call Decho("keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")") |
2152 | 2413 exe 'keepj lcd '.fnameescape(dirname) |
2034 | 2414 call s:NetrwSafeOptions() |
1621 | 2415 " call Decho("getcwd<".getcwd().">") |
2416 | |
2034 | 2417 elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"' |
1621 | 2418 " looks like a regular file, attempt transfer |
2034 | 2419 " call Decho("attempt transfer as regular file<".dirname.">") |
1621 | 2420 |
2421 " remove any filetype indicator from end of dirname, except for the {{{3 | |
2422 " "this is a directory" indicator (/). | |
2423 " There shouldn't be one of those here, anyway. | |
2034 | 2424 let path= substitute(dirname,'[*=@|]\r\=$','','e') |
1621 | 2425 " call Decho("new path<".path.">") |
2034 | 2426 call s:RemotePathAnalysis(dirname) |
1621 | 2427 |
2428 " remote-read the requested file into current buffer {{{3 | |
2152 | 2429 keepj mark ' |
2034 | 2430 call s:NetrwEnew(dirname) |
2431 call s:NetrwSafeOptions() | |
1621 | 2432 setlocal ma noro |
2433 " call Decho("setlocal ma noro") | |
2034 | 2434 let b:netrw_curdir= dirname |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2435 " call Decho("exe sil! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)." (bt=".&bt.")") |
2751 | 2436 exe "sil! keepj keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path) |
2437 exe "sil! keepj keepalt doau BufReadPre ".fnameescape(s:fname) | |
2438 sil call netrw#NetRead(2,s:method."://".s:user.s:machine."/".s:path) | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2439 if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz' && s:path !~ '.tar.xz' && s:path !~ '.txz' |
1621 | 2440 " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error |
2751 | 2441 exe "sil keepj keepalt doau BufReadPost ".fnameescape(s:fname) |
1621 | 2442 endif |
2443 | |
2444 " save certain window-oriented variables into buffer-oriented variables {{{3 | |
2445 call s:SetBufWinVars() | |
2446 call s:NetrwOptionRestore("w:") | |
2447 setlocal ma nomod | |
2448 | |
1668 | 2449 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
1621 | 2450 " call Dret("s:NetrwBrowse : file<".s:fname.">") |
2451 return | |
2452 endif | |
2453 | |
2751 | 2454 " use buffer-oriented WinVars if buffer variables exist but associated window variables don't {{{3 |
1621 | 2455 call s:UseBufWinVars() |
2456 | |
2457 " set up some variables {{{3 | |
2458 let b:netrw_browser_active = 1 | |
2034 | 2459 let dirname = dirname |
1621 | 2460 let s:last_sort_by = g:netrw_sort_by |
2461 | |
2462 " set up menu {{{3 | |
2751 | 2463 keepj call s:NetrwMenu(1) |
1621 | 2464 |
2465 " set up buffer {{{3 | |
2466 let reusing= s:NetrwGetBuffer(a:islocal,dirname) | |
2467 " maintain markfile highlighting | |
2468 if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != "" | |
2469 " call Decho("bufnr(%)=".bufnr('%')) | |
2470 " call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/") | |
2471 exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/" | |
2472 else | |
2473 " call Decho("2match none") | |
2474 2match none | |
2475 endif | |
2476 if reusing | |
2477 call s:NetrwOptionRestore("w:") | |
2478 setlocal noma nomod nowrap | |
1668 | 2479 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
1621 | 2480 " call Dret("s:NetrwBrowse : re-using buffer") |
2481 return | |
2482 endif | |
2483 | |
2484 " set b:netrw_curdir to the new directory name {{{3 | |
2152 | 2485 " call Decho("set b:netrw_curdir to the new directory name: (buf#".bufnr("%").")") |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2486 let b:netrw_curdir= dirname |
1621 | 2487 if b:netrw_curdir =~ '[/\\]$' |
2488 let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e') | |
2489 endif | |
2490 if b:netrw_curdir == '' | |
2491 if has("amiga") | |
2492 " On the Amiga, the empty string connotes the current directory | |
2493 let b:netrw_curdir= getcwd() | |
2494 else | |
2495 " under unix, when the root directory is encountered, the result | |
2496 " from the preceding substitute is an empty string. | |
2497 let b:netrw_curdir= '/' | |
2498 endif | |
2499 endif | |
2500 if !a:islocal && b:netrw_curdir !~ '/$' | |
2501 let b:netrw_curdir= b:netrw_curdir.'/' | |
2502 endif | |
2503 " call Decho("b:netrw_curdir<".b:netrw_curdir.">") | |
2504 | |
2505 " ------------ | |
2506 " (local only) {{{3 | |
2507 " ------------ | |
2508 if a:islocal | |
2509 " call Decho("local only:") | |
2510 | |
2511 " Set up ShellCmdPost handling. Append current buffer to browselist | |
2512 call s:LocalFastBrowser() | |
2513 | |
2514 " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3 | |
2515 if !g:netrw_keepdir | |
2516 " call Decho("handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) | |
2517 " call Decho("l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist")) | |
2518 if !exists("&l:acd") || !&l:acd | |
2519 " call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir)) | |
2520 try | |
2152 | 2521 exe 'keepj lcd '.fnameescape(b:netrw_curdir) |
1621 | 2522 catch /^Vim\%((\a\+)\)\=:E472/ |
2523 call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61) | |
2524 if exists("w:netrw_prvdir") | |
2525 let b:netrw_curdir= w:netrw_prvdir | |
2526 else | |
2527 call s:NetrwOptionRestore("w:") | |
2528 setlocal noma nomod nowrap | |
2529 let b:netrw_curdir= dirname | |
1668 | 2530 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
1621 | 2531 " call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">") |
2532 return | |
2533 endif | |
2534 endtry | |
2535 endif | |
2536 endif | |
2537 | |
2538 " -------------------------------- | |
2539 " remote handling: {{{3 | |
2540 " -------------------------------- | |
2541 else | |
2542 " call Decho("remote only:") | |
2543 | |
2034 | 2544 " analyze dirname and g:netrw_list_cmd {{{4 |
2545 " call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">") | |
2546 if dirname =~ "^NetrwTreeListing\>" | |
1621 | 2547 let dirname= b:netrw_curdir |
2034 | 2548 " call Decho("(dirname was ".dirname.") dirname<".dirname.">") |
1621 | 2549 elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") |
2550 let dirname= substitute(b:netrw_curdir,'\\','/','g') | |
2551 if dirname !~ '/$' | |
2552 let dirname= dirname.'/' | |
2553 endif | |
2554 let b:netrw_curdir = dirname | |
2555 " call Decho("(liststyle is TREELIST) dirname<".dirname.">") | |
2556 else | |
2034 | 2557 let dirname = substitute(dirname,'\\','/','g') |
1621 | 2558 " call Decho("(normal) dirname<".dirname.">") |
2559 endif | |
2560 | |
2561 let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$' | |
2562 if dirname !~ dirpat | |
2563 if !exists("g:netrw_quiet") | |
2751 | 2564 keepj call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20) |
2565 endif | |
2566 keepj call s:NetrwOptionRestore("w:") | |
1621 | 2567 setlocal noma nomod nowrap |
1668 | 2568 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
1621 | 2569 " call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">") |
2570 return | |
2571 endif | |
2572 let b:netrw_curdir= dirname | |
2573 " call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)") | |
2574 endif " (additional remote handling) | |
2575 | |
2576 " ----------------------- | |
2577 " Directory Listing: {{{3 | |
2578 " ----------------------- | |
2751 | 2579 keepj call s:NetrwMaps(a:islocal) |
2580 keepj call s:PerformListing(a:islocal) | |
2581 if v:version >= 700 && has("balloon_eval") && &l:bexpr == "" | |
2582 let &l:bexpr= "netrw#NetrwBalloonHelp()" | |
2583 set beval | |
2584 endif | |
2034 | 2585 |
2586 " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd | |
2587 " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed). | |
2588 " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting | |
2589 " the variable below avoids that second refresh of the screen. The s:LocalBrowseShellCmdRefresh() | |
2590 " function gets called due to that autocmd; it notices that the following variable is set | |
2591 " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008 | |
2592 let s:locbrowseshellcmd= 1 | |
1621 | 2593 |
1668 | 2594 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
2751 | 2595 " call Dret("s:NetrwBrowse : did PerformListing ft<".&ft.">") |
1621 | 2596 return |
2597 endfun | |
2598 | |
2599 " --------------------------------------------------------------------- | |
2600 " s:NetrwFileInfo: supports qf (query for file information) {{{2 | |
2601 fun! s:NetrwFileInfo(islocal,fname) | |
2602 " call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)") | |
2603 if a:islocal | |
2604 if (has("unix") || has("macunix")) && executable("/bin/ls") | |
2605 if exists("b:netrw_curdir") | |
2606 " call Decho('using ls with b:netrw_curdir<'.b:netrw_curdir.'>') | |
2607 if b:netrw_curdir =~ '/$' | |
2608 echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir.a:fname)) | |
2609 else | |
2610 echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir."/".a:fname)) | |
2611 endif | |
2612 else | |
2613 " call Decho('using ls '.a:fname." using cwd<".getcwd().">") | |
2614 echo system("/bin/ls -lsad ".shellescape(a:fname)) | |
2615 endif | |
2616 else | |
2617 " use vim functions to return information about file below cursor | |
2618 " call Decho("using vim functions to query for file info") | |
2619 if !isdirectory(a:fname) && !filereadable(a:fname) && a:fname =~ '[*@/]' | |
2620 let fname= substitute(a:fname,".$","","") | |
2621 else | |
2622 let fname= a:fname | |
2623 endif | |
2624 let t = getftime(fname) | |
2625 let sz = getfsize(fname) | |
2626 echo a:fname.": ".sz." ".strftime(g:netrw_timefmt,getftime(fname)) | |
2627 " call Decho(fname.": ".sz." ".strftime(g:netrw_timefmt,getftime(fname))) | |
2628 endif | |
2629 else | |
2630 echo "sorry, \"qf\" not supported yet for remote files" | |
2631 endif | |
2632 " call Dret("s:NetrwFileInfo") | |
1121 | 2633 endfun |
2634 | |
2635 " --------------------------------------------------------------------- | |
1621 | 2636 " s:NetrwGetBuffer: {{{2 |
2637 " returns 0=cleared buffer | |
2638 " 1=re-used buffer | |
2639 fun! s:NetrwGetBuffer(islocal,dirname) | |
2640 " call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle) | |
2641 let dirname= a:dirname | |
2642 | |
2643 " re-use buffer if possible {{{3 | |
2644 " call Decho("--re-use a buffer if possible--") | |
2645 if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST | |
2646 " find NetrwTreeList buffer if there is one | |
2034 | 2647 " call Decho("find NetrwTreeList buffer if there is one") |
1621 | 2648 if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0 |
2649 " call Decho(" re-use w:netrw_treebufnr=".w:netrw_treebufnr) | |
2650 let eikeep= &ei | |
2651 set ei=all | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2652 exe "sil! b ".w:netrw_treebufnr |
1621 | 2653 let &ei= eikeep |
2034 | 2654 " call Dret("s:NetrwGetBuffer : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>") |
1621 | 2655 return |
2656 endif | |
2657 let bufnum= -1 | |
2658 " call Decho(" liststyle=TREE but w:netrw_treebufnr doesn't exist") | |
2659 | |
2660 else | |
2661 " find buffer number of buffer named precisely the same as dirname {{{3 | |
2662 " call Decho("--find buffer numnber of buffer named precisely the same as dirname--") | |
2663 " call Dredir("ls!") | |
2664 | |
2665 " get dirname and associated buffer number | |
2666 let bufnum = bufnr(escape(dirname,'\')) | |
2667 " call Decho(" find buffer<".dirname.">'s number ") | |
2668 " call Decho(" bufnr(dirname<".escape(dirname,'\').">)=".bufnum) | |
2669 | |
2670 if bufnum < 0 && dirname !~ '/$' | |
2034 | 2671 " try appending a trailing / |
1621 | 2672 " call Decho(" try appending a trailing / to dirname<".dirname.">") |
2673 let bufnum= bufnr(escape(dirname.'/','\')) | |
2674 if bufnum > 0 | |
2675 let dirname= dirname.'/' | |
2676 endif | |
2677 endif | |
2678 | |
2679 if bufnum < 0 && dirname =~ '/$' | |
2034 | 2680 " try removing a trailing / |
1621 | 2681 " call Decho(" try removing a trailing / from dirname<".dirname.">") |
2682 let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\')) | |
2683 if bufnum > 0 | |
2684 let dirname= substitute(dirname,'/$','','') | |
2685 endif | |
2686 endif | |
2687 | |
2688 " call Decho(" findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)") | |
2689 " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/ and abc/ matches) | |
2690 if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.' | |
2691 " handle approximate matches | |
2034 | 2692 " call Decho(" handling approx match: bufnum#".bufnum."<".bufname(bufnum)."> approx-dirname<".dirname.">") |
1621 | 2693 let ibuf = 1 |
2694 let buflast = bufnr("$") | |
2152 | 2695 " call Decho(" findbuf2: buflast=bufnr($)=".buflast) |
1621 | 2696 while ibuf <= buflast |
2697 let bname= substitute(bufname(ibuf),'\\','/','g') | |
1668 | 2698 let bname= substitute(bname,'.\zs/$','','') |
2152 | 2699 " call Decho(" findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">") |
2700 if bname != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/' | |
2701 " bname is not empty | |
2702 " dirname ends with bname, | |
2703 " dirname doesn't start with /, so its not a absolute path | |
2704 " call Decho(" findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/') | |
2034 | 2705 break |
2706 endif | |
2152 | 2707 if bname =~ '^'.dirname.'/\=$' |
2708 " bname begins with dirname | |
2709 " call Decho(' findbuf3b: passes test 2 : bname<'.bname.'>=~^'.dirname.'/\=$') | |
2034 | 2710 break |
2711 endif | |
2712 if dirname =~ '^'.bname.'/$' | |
2152 | 2713 " call Decho(' findbuf3c: passes test 3 : dirname<'.dirname.'>=~^'.bname.'/$') |
2714 break | |
2715 endif | |
2716 if bname != '' && dirname =~ '/'.bname.'$' && bname == bufname("%") && line("$") == 1 | |
2717 " call Decho(' findbuf3d: passes test 4 : dirname<'.dirname.'>=~ /'.bname.'$') | |
2034 | 2718 break |
2719 endif | |
1621 | 2720 let ibuf= ibuf + 1 |
2721 endwhile | |
2722 if ibuf > buflast | |
2723 let bufnum= -1 | |
2724 else | |
2725 let bufnum= ibuf | |
2726 endif | |
2727 " call Decho(" findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")") | |
2728 endif | |
2729 endif | |
2730 | |
2731 " get enew buffer and name it -or- re-use buffer {{{3 | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2732 sil! keepj mark ' |
1621 | 2733 if bufnum < 0 || !bufexists(bufnum) |
2152 | 2734 " call Decho("--get enew buffer and name it (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")") |
1621 | 2735 call s:NetrwEnew(dirname) |
2736 " call Decho(" got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)") | |
2737 " name the buffer | |
2738 if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST | |
2739 " Got enew buffer; transform into a NetrwTreeListing | |
2740 " call Decho("--transform enew buffer#".bufnr("%")." into a NetrwTreeListing --") | |
2741 if !exists("s:netrw_treelistnum") | |
2742 let s:netrw_treelistnum= 1 | |
2743 else | |
2744 let s:netrw_treelistnum= s:netrw_treelistnum + 1 | |
2745 endif | |
2746 let w:netrw_treebufnr= bufnr("%") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2747 " call Decho(" exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum)) |
2152 | 2748 exe 'sil! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum) |
2749 set bt=nofile noswf | |
2751 | 2750 nnoremap <silent> <buffer> [ :sil call <SID>TreeListMove('[')<cr> |
2751 nnoremap <silent> <buffer> ] :sil call <SID>TreeListMove(']')<cr> | |
2752 nnoremap <silent> <buffer> [[ :sil call <SID>TreeListMove('[')<cr> | |
2753 nnoremap <silent> <buffer> ]] :sil call <SID>TreeListMove(']')<cr> | |
1621 | 2754 " call Decho(" tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr) |
2755 else | |
2756 " let v:errmsg= "" " Decho | |
2757 let escdirname= fnameescape(dirname) | |
2152 | 2758 " call Decho(" errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">") |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2759 " call Decho(' exe sil! keepalt file '.escdirname) |
2152 | 2760 " let v:errmsg= "" " Decho |
2761 exe 'sil! keepalt file '.escdirname | |
1621 | 2762 " call Decho(" errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">") |
2763 endif | |
2764 " call Decho(" named enew buffer#".bufnr("%")."<".bufname("%").">") | |
2765 | |
2766 else " Re-use the buffer | |
2152 | 2767 " call Decho("--re-use buffer#".bufnum." (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")") |
1621 | 2768 let eikeep= &ei |
2769 set ei=all | |
2770 if getline(2) =~ '^" Netrw Directory Listing' | |
2771 " call Decho(" re-use buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using: keepalt b ".bufnum) | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2772 exe "sil! keepalt b ".bufnum |
1621 | 2773 else |
2774 " call Decho(" reusing buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using: b ".bufnum) | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2775 exe "sil! b ".bufnum |
1621 | 2776 endif |
2777 if bufname("%") == '.' | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2778 " call Decho("exe sil! keepalt file ".fnameescape(getcwd())) |
2152 | 2779 exe "sil! keepalt file ".fnameescape(getcwd()) |
1621 | 2780 endif |
2781 let &ei= eikeep | |
2782 if line("$") <= 1 | |
2751 | 2783 keepj call s:NetrwListSettings(a:islocal) |
1621 | 2784 " call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it") |
2785 return 0 | |
2786 elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST | |
2787 " call Decho("--re-use tree listing--") | |
2788 " call Decho(" clear buffer<".expand("%")."> with :%d") | |
2152 | 2789 sil keepj %d |
2751 | 2790 keepj call s:NetrwListSettings(a:islocal) |
1621 | 2791 " call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh") |
2792 return 0 | |
2793 else | |
2794 " call Dret("s:NetrwGetBuffer 1 : buf#".bufnr("%")) | |
2795 return 1 | |
2796 endif | |
2797 endif | |
2798 | |
2799 " do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc {{{3 | |
2800 " fastbrowse Local Remote Hiding a buffer implies it may be re-used (fast) | |
2801 " slow 0 D D Deleting a buffer implies it will not be re-used (slow) | |
2802 " med 1 D H | |
2803 " fast 2 H H | |
2152 | 2804 " call Decho("--do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--") |
1621 | 2805 let fname= expand("%") |
2751 | 2806 keepj call s:NetrwListSettings(a:islocal) |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2807 " call Decho("exe sil! keepalt file ".fnameescape(fname)) |
2751 | 2808 exe "sil! keepj keepalt file ".fnameescape(fname) |
1621 | 2809 |
2810 " delete all lines from buffer {{{3 | |
2811 " call Decho("--delete all lines from buffer--") | |
2812 " call Decho(" clear buffer<".expand("%")."> with :%d") | |
2152 | 2813 sil! keepalt keepj %d |
1621 | 2814 |
2815 " call Dret("s:NetrwGetBuffer 0 : buf#".bufnr("%")) | |
2816 return 0 | |
2817 endfun | |
2818 | |
2819 " --------------------------------------------------------------------- | |
2820 " s:NetrwGetcwd: get the current directory. {{{2 | |
2821 " Change backslashes to forward slashes, if any. | |
2822 " If doesc is true, escape certain troublesome characters | |
2823 fun! s:NetrwGetcwd(doesc) | |
2824 " call Dfunc("NetrwGetcwd(doesc=".a:doesc.")") | |
2825 let curdir= substitute(getcwd(),'\\','/','ge') | |
2826 if curdir !~ '[\/]$' | |
2827 let curdir= curdir.'/' | |
2828 endif | |
2829 if a:doesc | |
2830 let curdir= fnameescape(curdir) | |
2831 endif | |
2832 " call Dret("NetrwGetcwd <".curdir.">") | |
2833 return curdir | |
2834 endfun | |
2835 | |
2836 " --------------------------------------------------------------------- | |
2837 " s:NetrwGetWord: it gets the directory/file named under the cursor {{{2 | |
2838 fun! s:NetrwGetWord() | |
2839 " call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol(".")) | |
2840 call s:UseBufWinVars() | |
2841 | |
2842 " insure that w:netrw_liststyle is set up | |
2843 if !exists("w:netrw_liststyle") | |
2844 if exists("g:netrw_liststyle") | |
2845 let w:netrw_liststyle= g:netrw_liststyle | |
2846 else | |
2847 let w:netrw_liststyle= s:THINLIST | |
2848 endif | |
2849 " call Decho("w:netrw_liststyle=".w:netrw_liststyle) | |
2850 endif | |
2851 | |
2852 if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt | |
2853 " Active Banner support | |
2854 " call Decho("active banner handling") | |
2152 | 2855 keepj norm! 0 |
1621 | 2856 let dirname= "./" |
2857 let curline= getline('.') | |
2858 | |
2859 if curline =~ '"\s*Sorted by\s' | |
2152 | 2860 keepj norm s |
1621 | 2861 let s:netrw_skipbrowse= 1 |
2862 echo 'Pressing "s" also works' | |
2863 | |
2864 elseif curline =~ '"\s*Sort sequence:' | |
2865 let s:netrw_skipbrowse= 1 | |
2866 echo 'Press "S" to edit sorting sequence' | |
2867 | |
2868 elseif curline =~ '"\s*Quick Help:' | |
2152 | 2869 keepj norm ? |
1621 | 2870 let s:netrw_skipbrowse= 1 |
2871 echo 'Pressing "?" also works' | |
2872 | |
2873 elseif curline =~ '"\s*\%(Hiding\|Showing\):' | |
2152 | 2874 keepj norm a |
1621 | 2875 let s:netrw_skipbrowse= 1 |
2876 echo 'Pressing "a" also works' | |
2877 | |
2878 elseif line("$") > w:netrw_bannercnt | |
2152 | 2879 exe 'sil keepj '.w:netrw_bannercnt |
1621 | 2880 endif |
2881 | |
2882 elseif w:netrw_liststyle == s:THINLIST | |
2883 " call Decho("thin column handling") | |
2152 | 2884 keepj norm! 0 |
1621 | 2885 let dirname= getline('.') |
2886 | |
2887 elseif w:netrw_liststyle == s:LONGLIST | |
2888 " call Decho("long column handling") | |
2152 | 2889 keepj norm! 0 |
1621 | 2890 let dirname= substitute(getline('.'),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e') |
2891 | |
2892 elseif w:netrw_liststyle == s:TREELIST | |
2893 " call Decho("treelist handling") | |
2894 let dirname= substitute(getline('.'),'^\(| \)*','','e') | |
2895 | |
2896 else | |
2897 " call Decho("obtain word from wide listing") | |
2898 let dirname= getline('.') | |
2899 | |
2900 if !exists("b:netrw_cpf") | |
2901 let b:netrw_cpf= 0 | |
2751 | 2902 exe 'sil keepj '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif' |
2034 | 2903 call histdel("/",-1) |
1621 | 2904 " call Decho("computed cpf=".b:netrw_cpf) |
2905 endif | |
2906 | |
2907 " call Decho("buf#".bufnr("%")."<".bufname("%").">") | |
2908 let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf | |
2909 " call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart." bannercnt=".w:netrw_bannercnt) | |
2910 " call Decho("1: dirname<".dirname.">") | |
2911 if filestart == 0 | |
2152 | 2912 keepj norm! 0ma |
1621 | 2913 else |
2914 call cursor(line("."),filestart+1) | |
2152 | 2915 keepj norm! ma |
1621 | 2916 endif |
2917 let rega= @a | |
1668 | 2918 let eofname= filestart + b:netrw_cpf + 1 |
2919 if eofname <= col("$") | |
2920 call cursor(line("."),filestart+b:netrw_cpf+1) | |
2152 | 2921 keepj norm! "ay`a |
1668 | 2922 else |
2152 | 2923 keepj norm! "ay$ |
1668 | 2924 endif |
1621 | 2925 let dirname = @a |
2926 let @a = rega | |
2927 " call Decho("2: dirname<".dirname.">") | |
2928 let dirname= substitute(dirname,'\s\+$','','e') | |
2929 " call Decho("3: dirname<".dirname.">") | |
2930 endif | |
2931 | |
2932 " symlinks are indicated by a trailing "@". Remove it before further processing. | |
2933 let dirname= substitute(dirname,"@$","","") | |
2934 | |
2935 " executables are indicated by a trailing "*". Remove it before further processing. | |
2936 let dirname= substitute(dirname,"\*$","","") | |
2937 | |
2938 " call Dret("s:NetrwGetWord <".dirname.">") | |
2939 return dirname | |
2940 endfun | |
2941 | |
2942 " --------------------------------------------------------------------- | |
2152 | 2943 " s:NetrwListSettings: make standard settings for a netrw listing {{{2 |
1621 | 2944 fun! s:NetrwListSettings(islocal) |
2945 " call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")") | |
2946 let fname= bufname("%") | |
1668 | 2947 " call Decho("setlocal bt=nofile nobl ma nonu nowrap noro") |
1621 | 2948 setlocal bt=nofile nobl ma nonu nowrap noro |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2949 " call Decho("exe sil! keepalt file ".fnameescape(fname)) |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
2950 exe "sil! keepalt file ".fnameescape(fname) |
1621 | 2951 if g:netrw_use_noswf |
2952 setlocal noswf | |
2953 endif | |
2954 " call Dredir("ls!") | |
2955 " call Decho("exe setlocal ts=".g:netrw_maxfilenamelen) | |
2956 exe "setlocal ts=".g:netrw_maxfilenamelen | |
2957 setlocal isk+=.,~,- | |
2958 if g:netrw_fastbrowse > a:islocal | |
2959 setlocal bh=hide | |
2960 else | |
2961 setlocal bh=delete | |
2962 endif | |
2963 " call Dret("s:NetrwListSettings") | |
2964 endfun | |
2965 | |
2966 " --------------------------------------------------------------------- | |
2967 " s:NetrwListStyle: {{{2 | |
2968 " islocal=0: remote browsing | |
2969 " =1: local browsing | |
2970 fun! s:NetrwListStyle(islocal) | |
2971 " call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle) | |
2972 let fname = s:NetrwGetWord() | |
2973 if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif | |
2974 let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST | |
2975 " call Decho("fname<".fname.">") | |
2976 " call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle) | |
2977 " call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist").">") | |
2978 | |
2979 if w:netrw_liststyle == s:THINLIST | |
2980 " use one column listing | |
2981 " call Decho("use one column list") | |
2982 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge') | |
2983 | |
2984 elseif w:netrw_liststyle == s:LONGLIST | |
2985 " use long list | |
2986 " call Decho("use long list") | |
2987 let g:netrw_list_cmd = g:netrw_list_cmd." -l" | |
2988 | |
2989 elseif w:netrw_liststyle == s:WIDELIST | |
2990 " give wide list | |
2991 " call Decho("use wide list") | |
2992 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge') | |
2993 | |
2994 elseif w:netrw_liststyle == s:TREELIST | |
2995 " call Decho("use tree list") | |
2996 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge') | |
2997 | |
2998 else | |
2751 | 2999 keepj call netrw#ErrorMsg(s:WARNING,"bad value for g:netrw_liststyle (=".w:netrw_liststyle.")",46) |
1621 | 3000 let g:netrw_liststyle = s:THINLIST |
3001 let w:netrw_liststyle = g:netrw_liststyle | |
3002 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge') | |
3003 endif | |
3004 setlocal ma noro | |
3005 " call Decho("setlocal ma noro") | |
3006 | |
3007 " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh | |
3008 " call Decho("clear buffer<".expand("%")."> with :%d") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3009 sil! keepj %d |
2152 | 3010 " following prevents tree listing buffer from being marked "modified" |
3011 setlocal nomod | |
1621 | 3012 |
3013 " refresh the listing | |
2152 | 3014 " call Decho("refresh the listing") |
1621 | 3015 let svpos= netrw#NetrwSavePosn() |
2751 | 3016 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) |
3017 keepj call netrw#NetrwRestorePosn(svpos) | |
3018 keepj call s:NetrwCursor() | |
1621 | 3019 |
3020 " keep cursor on the filename | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3021 sil! keepj $ |
1621 | 3022 let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc') |
3023 " call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A')) | |
3024 if result <= 0 && exists("w:netrw_bannercnt") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3025 exe "sil! keepj ".w:netrw_bannercnt |
1621 | 3026 endif |
3027 | |
3028 " call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : "")) | |
3029 endfun | |
3030 | |
3031 " --------------------------------------------------------------------- | |
2034 | 3032 " s:NetrwBannerCtrl: toggles the display of the banner {{{2 |
3033 fun! s:NetrwBannerCtrl(islocal) | |
3034 " call Dfunc("s:NetrwBannerCtrl(islocal=".a:islocal.") g:netrw_banner=".g:netrw_banner) | |
3035 | |
3036 " toggle the banner (enable/suppress) | |
3037 let g:netrw_banner= !g:netrw_banner | |
3038 | |
3039 " refresh the listing | |
3040 let svpos= netrw#NetrwSavePosn() | |
3041 call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) | |
3042 | |
3043 " keep cursor on the filename | |
3044 let fname= s:NetrwGetWord() | |
2152 | 3045 sil keepj $ |
2034 | 3046 let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc') |
3047 " call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A')) | |
3048 if result <= 0 && exists("w:netrw_bannercnt") | |
2152 | 3049 exe "keepj ".w:netrw_bannercnt |
2034 | 3050 endif |
3051 " call Dret("s:NetrwBannerCtrl : g:netrw_banner=".g:netrw_banner) | |
3052 endfun | |
3053 | |
3054 " --------------------------------------------------------------------- | |
1621 | 3055 " s:NetrwBookmarkMenu: Uses menu priorities {{{2 |
3056 " .2.[cnt] for bookmarks, and | |
3057 " .3.[cnt] for history | |
3058 " (see s:NetrwMenu()) | |
3059 fun! s:NetrwBookmarkMenu() | |
1121 | 3060 if !exists("s:netrw_menucnt") |
3061 return | |
3062 endif | |
2034 | 3063 " call Dfunc("NetrwBookmarkMenu() histcnt=".g:netrw_dirhist_cnt." menucnt=".s:netrw_menucnt) |
1621 | 3064 |
3065 " the following test assures that gvim is running, has menus available, and has menus enabled. | |
2751 | 3066 if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu |
1121 | 3067 if exists("g:NetrwTopLvlMenu") |
1621 | 3068 " call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)") |
2152 | 3069 exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks' |
3070 exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete' | |
2034 | 3071 endif |
3072 if !exists("s:netrw_initbookhist") | |
3073 call s:NetrwBookHistRead() | |
1121 | 3074 endif |
3075 | |
3076 " show bookmarked places | |
2034 | 3077 if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] |
3078 let cnt= 1 | |
3079 for bmd in g:netrw_bookmarklist | |
2751 | 3080 " call Decho('sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmd.' :e '.bmd) |
2152 | 3081 let bmd= escape(bmd,g:netrw_menu_escape) |
2034 | 3082 |
3083 " show bookmarks for goto menu | |
2152 | 3084 exe 'sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmd.' :e '.bmd."\<cr>" |
2034 | 3085 |
3086 " show bookmarks for deletion menu | |
2152 | 3087 exe 'sil! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.bmd.' '.cnt."mB" |
2034 | 3088 let cnt= cnt + 1 |
3089 endfor | |
3090 | |
3091 endif | |
1121 | 3092 |
3093 " show directory browsing history | |
2751 | 3094 if g:netrw_dirhistmax > 0 |
3095 let cnt = g:netrw_dirhist_cnt | |
3096 let first = 1 | |
3097 let histcnt = 0 | |
3098 while ( first || cnt != g:netrw_dirhist_cnt ) | |
3099 let histcnt = histcnt + 1 | |
3100 let priority = g:netrw_dirhist_cnt + histcnt | |
3101 if exists("g:netrw_dirhist_{cnt}") | |
3102 let histdir= escape(g:netrw_dirhist_{cnt},g:netrw_menu_escape) | |
3103 " call Decho('sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.' :e '.histdir) | |
3104 exe 'sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.' :e '.histdir."\<cr>" | |
3105 endif | |
3106 let first = 0 | |
3107 let cnt = ( cnt - 1 ) % g:netrw_dirhistmax | |
3108 if cnt < 0 | |
3109 let cnt= cnt + g:netrw_dirhistmax | |
3110 endif | |
3111 endwhile | |
3112 endif | |
2034 | 3113 |
1121 | 3114 endif |
1621 | 3115 " call Dret("NetrwBookmarkMenu") |
1121 | 3116 endfun |
3117 | |
3118 " --------------------------------------------------------------------- | |
1621 | 3119 " s:NetrwBrowseChgDir: constructs a new directory based on the current {{{2 |
3120 " directory and a new directory name. Also, if the | |
3121 " "new directory name" is actually a file, | |
3122 " NetrwBrowseChgDir() edits the file. | |
3123 fun! s:NetrwBrowseChgDir(islocal,newdir,...) | |
3124 " call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">") | |
3125 | |
3126 if !exists("b:netrw_curdir") | |
3127 " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called | |
3128 " and the current window is the NetrwMessage window. | |
3129 " call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!") | |
3130 " call Decho("getcwd<".getcwd().">") | |
3131 " call Dredir("ls!") | |
3132 " call Dret("s:NetrwBrowseChgDir") | |
3133 return | |
3134 endif | |
3135 | |
2751 | 3136 keepj call s:NetrwOptionSave("s:") |
3137 keepj call s:NetrwSafeOptions() | |
1621 | 3138 let nbcd_curpos = netrw#NetrwSavePosn() |
3139 let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos | |
2152 | 3140 if (has("win32") || has("win95") || has("win64") || has("win16")) |
3141 let dirname = substitute(b:netrw_curdir,'\\','/','ge') | |
3142 else | |
3143 let dirname= b:netrw_curdir | |
3144 endif | |
3145 let newdir = a:newdir | |
3146 let dolockout = 0 | |
1621 | 3147 |
3148 " set up o/s-dependent directory recognition pattern | |
3149 if has("amiga") | |
3150 let dirpat= '[\/:]$' | |
1121 | 3151 else |
1621 | 3152 let dirpat= '[\/]$' |
3153 endif | |
3154 " call Decho("dirname<".dirname."> dirpat<".dirpat.">") | |
3155 | |
3156 if dirname !~ dirpat | |
3157 " apparently vim is "recognizing" that it is in a directory and | |
2751 | 3158 " is removing the trailing "/". Bad idea, so let's put it back. |
1621 | 3159 let dirname= dirname.'/' |
3160 " call Decho("adjusting dirname<".dirname.">") | |
3161 endif | |
3162 | |
3163 if newdir !~ dirpat | |
3164 " ------------ | |
3165 " edit a file: | |
3166 " ------------ | |
3167 " call Decho('case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">") | |
3168 if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)' | |
3169 let dirname= s:NetrwTreeDir() | |
3170 if dirname =~ '/$' | |
3171 let dirname= dirname.newdir | |
3172 else | |
3173 let dirname= s:NetrwTreeDir()."/".newdir | |
3174 endif | |
2034 | 3175 " call Decho("dirname<".dirname.">") |
1621 | 3176 " call Decho("tree listing") |
3177 elseif newdir =~ '^\(/\|\a:\)' | |
3178 let dirname= newdir | |
1121 | 3179 else |
1621 | 3180 let dirname= s:ComposePath(dirname,newdir) |
3181 endif | |
3182 " call Decho("handling a file: dirname<".dirname."> (a:0=".a:0.")") | |
3183 " this lets NetrwBrowseX avoid the edit | |
3184 if a:0 < 1 | |
3185 " call Decho("set up windows for editing<".fnameescape(dirname)."> didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist")) | |
2751 | 3186 keepj call s:NetrwOptionRestore("s:") |
1621 | 3187 if !exists("s:didsplit") |
3188 if g:netrw_browse_split == 1 | |
3189 new | |
2034 | 3190 if !&ea |
3191 wincmd _ | |
3192 endif | |
1621 | 3193 elseif g:netrw_browse_split == 2 |
3194 rightb vert new | |
2034 | 3195 if !&ea |
3196 wincmd | | |
3197 endif | |
1621 | 3198 elseif g:netrw_browse_split == 3 |
3199 tabnew | |
3200 elseif g:netrw_browse_split == 4 | |
3201 if s:NetrwPrevWinOpen(2) == 3 | |
3202 " call Dret("s:NetrwBrowseChgDir") | |
3203 return | |
3204 endif | |
3205 else | |
3206 " handling a file, didn't split, so remove menu | |
3207 " call Decho("handling a file+didn't split, so remove menu") | |
3208 call s:NetrwMenu(0) | |
3209 " optional change to window | |
3210 if g:netrw_chgwin >= 1 | |
3211 exe "keepjumps ".g:netrw_chgwin."wincmd w" | |
3212 endif | |
3213 endif | |
3214 endif | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3215 |
1621 | 3216 " the point where netrw actually edits the (local) file |
3217 " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will | |
3218 if a:islocal | |
3219 " call Decho("edit local file: exe e! ".fnameescape(dirname)) | |
3220 exe "e! ".fnameescape(dirname) | |
3221 else | |
3222 " call Decho("remote file: NetrwBrowse will edit it") | |
3223 endif | |
3224 let dolockout= 1 | |
2034 | 3225 |
3226 " handle g:Netrw_funcref -- call external-to-netrw functions | |
3227 " This code will handle g:Netrw_funcref as an individual function reference | |
3228 " or as a list of function references. It will ignore anything that's not | |
3229 " a function reference. See :help Funcref for information about function references. | |
3230 if exists("g:Netrw_funcref") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3231 " call Decho("handle optional Funcrefs") |
2034 | 3232 if type(g:Netrw_funcref) == 2 |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3233 " call Decho("handling a g:Netrw_funcref") |
2751 | 3234 keepj call g:Netrw_funcref() |
2034 | 3235 elseif type(g:Netrw_funcref) == 3 |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3236 " call Decho("handling a list of g:Netrw_funcrefs") |
2034 | 3237 for Fncref in g:Netrw_funcref |
3238 if type(FncRef) == 2 | |
2751 | 3239 keepj call FncRef() |
2034 | 3240 endif |
3241 endfor | |
3242 endif | |
3243 endif | |
1621 | 3244 endif |
3245 | |
3246 elseif newdir =~ '^/' | |
3247 " --------------------------------- | |
3248 " just go to the new directory spec | |
3249 " --------------------------------- | |
3250 " call Decho('case "just go to new directory spec": newdir<'.newdir.'>') | |
3251 let dirname= newdir | |
2751 | 3252 keepj call s:SetRexDir(a:islocal,dirname) |
3253 keepj call s:NetrwOptionRestore("s:") | |
1621 | 3254 |
3255 elseif newdir == './' | |
3256 " -------------------------- | |
3257 " refresh the directory list | |
3258 " -------------------------- | |
3259 " call Decho('case "refresh directory listing": newdir == "./"') | |
2751 | 3260 keepj call s:SetRexDir(a:islocal,dirname) |
1621 | 3261 |
3262 elseif newdir == '../' | |
3263 " ------------------- | |
3264 " go up one directory | |
3265 " ------------------- | |
3266 " call Decho('case "go up one directory": newdir == "../"') | |
3267 | |
3268 if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") | |
3269 " force a refresh | |
3270 " call Decho("clear buffer<".expand("%")."> with :%d") | |
3271 setlocal noro ma | |
3272 " call Decho("setlocal noro ma") | |
2152 | 3273 keepj %d |
1621 | 3274 endif |
3275 | |
3276 if has("amiga") | |
3277 " amiga | |
3278 " call Decho('case "go up one directory": newdir == "../" and amiga') | |
3279 if a:islocal | |
3280 let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','') | |
3281 let dirname= substitute(dirname,'/$','','') | |
3282 else | |
3283 let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','') | |
3284 endif | |
3285 " call Decho("amiga: dirname<".dirname."> (go up one dir)") | |
3286 | |
3287 else | |
3288 " unix or cygwin | |
3289 " call Decho('case "go up one directory": newdir == "../" and unix or cygwin') | |
3290 if a:islocal | |
3291 let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','') | |
3292 if dirname == "" | |
3293 let dirname= '/' | |
3294 endif | |
3295 else | |
3296 let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','') | |
3297 endif | |
3298 " call Decho("unix: dirname<".dirname."> (go up one dir)") | |
3299 endif | |
2751 | 3300 keepj call s:SetRexDir(a:islocal,dirname) |
1621 | 3301 |
3302 elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") | |
3303 " call Decho('case liststyle is TREELIST and w:netrw_treedict exists') | |
3304 " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh) | |
3305 setlocal noro ma | |
3306 " call Decho("setlocal noro ma") | |
3307 if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")) | |
3308 " call Decho("clear buffer<".expand("%")."> with :%d") | |
2152 | 3309 keepj %d |
1621 | 3310 endif |
3311 let treedir = s:NetrwTreeDir() | |
3312 let s:treecurpos = nbcd_curpos | |
3313 let haskey= 0 | |
3314 " call Decho("w:netrw_treedict<".string(w:netrw_treedict).">") | |
3315 | |
3316 " search treedict for tree dir as-is | |
3317 if has_key(w:netrw_treedict,treedir) | |
3318 " call Decho('....searched for treedir<'.treedir.'> : found it!') | |
3319 let haskey= 1 | |
3320 else | |
3321 " call Decho('....searched for treedir<'.treedir.'> : not found') | |
3322 endif | |
3323 | |
3324 " search treedict for treedir with a / appended | |
3325 if !haskey && treedir !~ '/$' | |
3326 if has_key(w:netrw_treedict,treedir."/") | |
3327 let treedir= treedir."/" | |
3328 " call Decho('....searched.for treedir<'.treedir.'> found it!') | |
3329 let haskey = 1 | |
3330 else | |
3331 " call Decho('....searched for treedir<'.treedir.'/> : not found') | |
3332 endif | |
3333 endif | |
3334 | |
3335 " search treedict for treedir with any trailing / elided | |
3336 if !haskey && treedir =~ '/$' | |
3337 let treedir= substitute(treedir,'/$','','') | |
3338 if has_key(w:netrw_treedict,treedir) | |
3339 " call Decho('....searched.for treedir<'.treedir.'> found it!') | |
3340 let haskey = 1 | |
3341 else | |
3342 " call Decho('....searched for treedir<'.treedir.'> : not found') | |
3343 endif | |
3344 endif | |
3345 | |
3346 if haskey | |
3347 " close tree listing for selected subdirectory | |
3348 " call Decho("closing selected subdirectory<".dirname.">") | |
3349 call remove(w:netrw_treedict,treedir) | |
2034 | 3350 " call Decho("removed entry<".treedir."> from treedict") |
1621 | 3351 " call Decho("yielding treedict<".string(w:netrw_treedict).">") |
2152 | 3352 let dirname= w:netrw_treetop |
1621 | 3353 else |
3354 " go down one directory | |
3355 let dirname= substitute(treedir,'/*$','/','') | |
3356 " call Decho("go down one dir: treedir<".treedir.">") | |
3357 endif | |
2751 | 3358 keepj call s:SetRexDir(a:islocal,dirname) |
2034 | 3359 let s:treeforceredraw = 1 |
1621 | 3360 |
3361 else | |
3362 " go down one directory | |
3363 let dirname= s:ComposePath(dirname,newdir) | |
3364 " call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">") | |
2751 | 3365 keepj call s:SetRexDir(a:islocal,dirname) |
3366 endif | |
3367 | |
3368 keepj call s:NetrwOptionRestore("s:") | |
1621 | 3369 if dolockout |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3370 " call Decho("filewritable(dirname<".dirname.">)=".filewritable(dirname)) |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3371 if filewritable(dirname) |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3372 " call Decho("doing modification lockout settings: ma nomod noro") |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3373 setlocal ma nomod noro |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3374 else |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3375 " call Decho("doing modification lockout settings: ma nomod ro") |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3376 setlocal ma nomod ro |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
3377 endif |
1621 | 3378 " call Decho("setlocal ma nomod noro") |
3379 endif | |
3380 | |
3381 " call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">") | |
3382 return dirname | |
1121 | 3383 endfun |
3384 | |
3385 " --------------------------------------------------------------------- | |
2034 | 3386 " s:NetrwBrowseX: (implements "x") executes a special "viewer" script or program for the {{{2 |
3387 " given filename; typically this means given their extension. | |
3388 " 0=local, 1=remote | |
1621 | 3389 fun! netrw#NetrwBrowseX(fname,remote) |
3390 " call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")") | |
3391 | |
2034 | 3392 " special core dump handler |
3393 if a:fname =~ '/core\(\.\d\+\)\=$' | |
3394 if exists("g:Netrw_corehandler") | |
3395 if type(g:Netrw_corehandler) == 2 | |
3396 " g:Netrw_corehandler is a function reference (see :help Funcref) | |
3397 " call Decho("g:Netrw_corehandler is a funcref") | |
3398 call g:Netrw_corehandler(a:fname) | |
3399 elseif type(g:netrw_corehandler) == 3) | |
3400 " g:Netrw_corehandler is a List of function references (see :help Funcref) | |
3401 " call Decho("g:Netrw_corehandler is a List") | |
3402 for Fncref in g:Netrw_corehandler | |
3403 if type(FncRef) == 2 | |
3404 call FncRef(a:fname) | |
3405 endif | |
3406 endfor | |
3407 endif | |
3408 " call Dret("NetrwBrowseX : coredump handler invoked") | |
3409 return | |
3410 endif | |
3411 endif | |
3412 | |
1621 | 3413 " set up the filename |
3414 " (lower case the extension, make a local copy of a remote file) | |
3415 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e') | |
3416 if has("win32") || has("win95") || has("win64") || has("win16") | |
3417 let exten= substitute(exten,'^.*$','\L&\E','') | |
3418 endif | |
2034 | 3419 " call Decho("exten<".exten.">") |
1621 | 3420 |
3421 " seems kde systems often have gnome-open due to dependencies, even though | |
3422 " gnome-open's subsidiary display tools are largely absent. Kde systems | |
3423 " usually have "kdeinit" running, though... (tnx Mikolaj Machowski) | |
3424 if !exists("s:haskdeinit") | |
3425 if has("unix") | |
1668 | 3426 let s:haskdeinit= system("ps -e") =~ 'kdeinit' |
1621 | 3427 if v:shell_error |
3428 let s:haskdeinit = 0 | |
3429 endif | |
3430 else | |
3431 let s:haskdeinit= 0 | |
3432 endif | |
3433 " call Decho("setting s:haskdeinit=".s:haskdeinit) | |
3434 endif | |
3435 | |
3436 if a:remote == 1 | |
3437 " create a local copy | |
2034 | 3438 " call Decho("a:remote=".a:remote.": create a local copy of <".a:fname.">") |
1621 | 3439 setlocal bh=delete |
2034 | 3440 call netrw#NetRead(3,a:fname) |
3441 " attempt to rename tempfile | |
3442 let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','') | |
3443 let newname= substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','') | |
3444 " call Decho("basename<".basename.">") | |
3445 " call Decho("newname <".newname.">") | |
3446 if rename(s:netrw_tmpfile,newname) == 0 | |
3447 " renaming succeeded | |
3448 let fname= newname | |
3449 else | |
3450 " renaming failed | |
3451 let fname= s:netrw_tmpfile | |
3452 endif | |
1668 | 3453 else |
3454 let fname= a:fname | |
2152 | 3455 " special ~ handler for local |
3456 if fname =~ '^\~' && expand("$HOME") != "" | |
3457 " call Decho('invoking special ~ handler') | |
3458 let fname= substitute(fname,'^\~',expand("$HOME"),'') | |
3459 endif | |
1621 | 3460 endif |
2034 | 3461 " call Decho("fname<".fname.">") |
1621 | 3462 " call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten)) |
3463 | |
3464 " set up redirection | |
3465 if &srr =~ "%s" | |
3466 if (has("win32") || has("win95") || has("win64") || has("win16")) | |
3467 let redir= substitute(&srr,"%s","nul","") | |
3468 else | |
3469 let redir= substitute(&srr,"%s","/dev/null","") | |
3470 endif | |
3471 elseif (has("win32") || has("win95") || has("win64") || has("win16")) | |
3472 let redir= &srr . "nul" | |
3473 else | |
3474 let redir= &srr . "/dev/null" | |
3475 endif | |
3476 " call Decho("redir{".redir."} srr{".&srr."}") | |
3477 | |
3478 " extract any viewing options. Assumes that they're set apart by quotes. | |
3479 if exists("g:netrw_browsex_viewer") | |
2034 | 3480 " call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">") |
1621 | 3481 if g:netrw_browsex_viewer =~ '\s' |
3482 let viewer = substitute(g:netrw_browsex_viewer,'\s.*$','','') | |
3483 let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." " | |
3484 let oviewer = '' | |
3485 let cnt = 1 | |
3486 while !executable(viewer) && viewer != oviewer | |
3487 let viewer = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\1','') | |
3488 let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." " | |
3489 let cnt = cnt + 1 | |
3490 let oviewer = viewer | |
3491 " call Decho("!exe: viewer<".viewer."> viewopt<".viewopt.">") | |
3492 endwhile | |
1121 | 3493 else |
1621 | 3494 let viewer = g:netrw_browsex_viewer |
3495 let viewopt = "" | |
3496 endif | |
3497 " call Decho("viewer<".viewer."> viewopt<".viewopt.">") | |
3498 endif | |
3499 | |
3500 " execute the file handler | |
3501 if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-' | |
3502 " call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">") | |
3503 let ret= netrwFileHandlers#Invoke(exten,fname) | |
3504 | |
3505 elseif exists("g:netrw_browsex_viewer") && executable(viewer) | |
3506 " call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">") | |
2751 | 3507 " call Decho("exe sil !".viewer." ".viewopt.shellescape(fname,1).redir) |
3508 exe "sil !".viewer." ".viewopt.shellescape(fname,1).redir | |
1621 | 3509 let ret= v:shell_error |
3510 | |
3511 elseif has("win32") || has("win64") | |
2034 | 3512 if executable("start") |
2751 | 3513 " call Decho('exe sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)) |
3514 exe 'sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1) | |
2034 | 3515 elseif executable("rundll32") |
2751 | 3516 " call Decho('exe sil !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)) |
3517 exe 'sil !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1) | |
2034 | 3518 else |
3519 call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74) | |
3520 endif | |
1621 | 3521 call inputsave()|call input("Press <cr> to continue")|call inputrestore() |
3522 let ret= v:shell_error | |
3523 | |
3524 elseif has("unix") && executable("gnome-open") && !s:haskdeinit | |
2751 | 3525 " call Decho("exe sil !gnome-open ".shellescape(fname,1)." ".redir) |
2152 | 3526 exe "sil !gnome-open ".shellescape(fname,1).redir |
1621 | 3527 let ret= v:shell_error |
3528 | |
3529 elseif has("unix") && executable("kfmclient") && s:haskdeinit | |
2751 | 3530 " call Decho("exe sil !kfmclient exec ".shellescape(fname,1)." ".redir) |
2152 | 3531 exe "sil !kfmclient exec ".shellescape(fname,1)." ".redir |
1621 | 3532 let ret= v:shell_error |
3533 | |
3534 elseif has("macunix") && executable("open") | |
2751 | 3535 " call Decho("exe sil !open ".shellescape(fname,1)." ".redir) |
2152 | 3536 exe "sil !open ".shellescape(fname,1)." ".redir |
1621 | 3537 let ret= v:shell_error |
3538 | |
1121 | 3539 else |
1621 | 3540 " netrwFileHandlers#Invoke() always returns 0 |
3541 let ret= netrwFileHandlers#Invoke(exten,fname) | |
3542 endif | |
3543 | |
3544 " if unsuccessful, attempt netrwFileHandlers#Invoke() | |
3545 if ret | |
3546 let ret= netrwFileHandlers#Invoke(exten,fname) | |
3547 endif | |
3548 | |
1668 | 3549 " restoring redraw! after external file handlers |
3550 redraw! | |
1621 | 3551 |
3552 " cleanup: remove temporary file, | |
3553 " delete current buffer if success with handler, | |
3554 " return to prior buffer (directory listing) | |
3555 " Feb 12, 2008: had to de-activiate removal of | |
3556 " temporary file because it wasn't getting seen. | |
3557 " if a:remote == 1 && fname != a:fname | |
3558 " call Decho("deleting temporary file<".fname.">") | |
1668 | 3559 " call s:NetrwDelete(fname) |
1621 | 3560 " endif |
3561 | |
3562 if a:remote == 1 | |
3563 setlocal bh=delete bt=nofile | |
3564 if g:netrw_use_noswf | |
3565 setlocal noswf | |
3566 endif | |
2751 | 3567 exe "sil! keepj norm! \<c-o>" |
1621 | 3568 " redraw! |
3569 endif | |
3570 | |
3571 " call Dret("NetrwBrowseX") | |
1121 | 3572 endfun |
3573 | |
3574 " --------------------------------------------------------------------- | |
2034 | 3575 " s:NetrwChgPerm: (implements "gp") change file permission {{{2 |
3576 fun! s:NetrwChgPerm(islocal,curdir) | |
3577 " call Dfunc("s:NetrwChgPerm(islocal=".a:islocal." curdir<".a:curdir.">)") | |
3578 call inputsave() | |
3579 let newperm= input("Enter new permission: ") | |
3580 call inputrestore() | |
3581 let chgperm= substitute(g:netrw_chgperm,'\<FILENAME\>',shellescape(expand("<cfile>")),'') | |
3582 let chgperm= substitute(chgperm,'\<PERM\>',shellescape(newperm),'') | |
3583 " call Decho("chgperm<".chgperm.">") | |
3584 call system(chgperm) | |
3585 if v:shell_error != 0 | |
2751 | 3586 keepj call netrw#ErrorMsg(1,"changing permission on file<".expand("<cfile>")."> seems to have failed",75) |
2034 | 3587 endif |
3588 if a:islocal | |
2751 | 3589 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) |
2034 | 3590 endif |
3591 " call Dret("s:NetrwChgPerm") | |
3592 endfun | |
3593 | |
3594 " --------------------------------------------------------------------- | |
3595 " s:NetrwClearExplore: clear explore variables (if any) {{{2 | |
3596 fun! s:NetrwClearExplore() | |
3597 " call Dfunc("s:NetrwClearExplore()") | |
3598 2match none | |
3599 if exists("s:explore_match") |unlet s:explore_match |endif | |
3600 if exists("s:explore_indx") |unlet s:explore_indx |endif | |
3601 if exists("s:netrw_explore_prvdir") |unlet s:netrw_explore_prvdir |endif | |
3602 if exists("s:dirstarstar") |unlet s:dirstarstar |endif | |
3603 if exists("s:explore_prvdir") |unlet s:explore_prvdir |endif | |
3604 if exists("w:netrw_explore_indx") |unlet w:netrw_explore_indx |endif | |
3605 if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif | |
3606 if exists("w:netrw_explore_list") |unlet w:netrw_explore_list |endif | |
3607 if exists("w:netrw_explore_bufnr") |unlet w:netrw_explore_bufnr |endif | |
3608 " redraw! | |
3609 echo " " | |
3610 echo " " | |
3611 " call Dret("s:NetrwClearExplore") | |
3612 endfun | |
3613 | |
3614 " --------------------------------------------------------------------- | |
1121 | 3615 " netrw#Explore: launch the local browser in the directory of the current file {{{2 |
2034 | 3616 " indx: == -1: Nexplore |
3617 " == -2: Pexplore | |
3618 " == +: this is overloaded: | |
3619 " * If Nexplore/Pexplore is in use, then this refers to the | |
3620 " indx'th item in the w:netrw_explore_list[] of items which | |
3621 " matched the */pattern **/pattern *//pattern **//pattern | |
3622 " * If Hexplore or Vexplore, then this will override | |
3623 " g:netrw_winsize to specify the qty of rows or columns the | |
3624 " newly split window should have. | |
3625 " dosplit==0: the window will be split iff the current file has been modified | |
3626 " dosplit==1: the window will be split before running the local browser | |
3627 " style == 0: Explore style == 1: Explore! | |
3628 " == 2: Hexplore style == 3: Hexplore! | |
3629 " == 4: Vexplore style == 5: Vexplore! | |
3630 " == 6: Texplore | |
1121 | 3631 fun! netrw#Explore(indx,dosplit,style,...) |
1209 | 3632 " call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." a:0=".a:0) |
1121 | 3633 if !exists("b:netrw_curdir") |
3634 let b:netrw_curdir= getcwd() | |
1209 | 3635 " call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)") |
1121 | 3636 endif |
2152 | 3637 let curdir = simplify(b:netrw_curdir) |
2034 | 3638 let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e') |
3639 " call Decho("curdir<".curdir."> curfiledir<".curfiledir.">") | |
1121 | 3640 |
3641 " save registers | |
2152 | 3642 sil! let keepregstar = @* |
3643 sil! let keepregplus = @+ | |
3644 sil! let keepregslash= @/ | |
1121 | 3645 |
3646 " if dosplit or file has been modified | |
3647 if a:dosplit || &modified || a:style == 6 | |
2152 | 3648 " call Decho("case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified") |
1121 | 3649 call s:SaveWinVars() |
2034 | 3650 let winsize= g:netrw_winsize |
3651 if a:indx > 0 | |
3652 let winsize= a:indx | |
3653 endif | |
1121 | 3654 |
3655 if a:style == 0 " Explore, Sexplore | |
3656 " call Decho("style=0: Explore or Sexplore") | |
2034 | 3657 exe winsize."wincmd s" |
1121 | 3658 |
3659 elseif a:style == 1 "Explore!, Sexplore! | |
3660 " call Decho("style=1: Explore! or Sexplore!") | |
2034 | 3661 exe winsize."wincmd v" |
1121 | 3662 |
3663 elseif a:style == 2 " Hexplore | |
3664 " call Decho("style=2: Hexplore") | |
2034 | 3665 exe "bel ".winsize."wincmd s" |
1121 | 3666 |
3667 elseif a:style == 3 " Hexplore! | |
3668 " call Decho("style=3: Hexplore!") | |
2034 | 3669 exe "abo ".winsize."wincmd s" |
1121 | 3670 |
3671 elseif a:style == 4 " Vexplore | |
3672 " call Decho("style=4: Vexplore") | |
2034 | 3673 exe "lefta ".winsize."wincmd v" |
1121 | 3674 |
3675 elseif a:style == 5 " Vexplore! | |
3676 " call Decho("style=5: Vexplore!") | |
2034 | 3677 exe "rightb ".winsize."wincmd v" |
1121 | 3678 |
3679 elseif a:style == 6 " Texplore | |
3680 call s:SaveBufVars() | |
3681 " call Decho("style = 6: Texplore") | |
2751 | 3682 exe "tabnew ".fnameescape(curdir) |
1121 | 3683 call s:RestoreBufVars() |
3684 endif | |
3685 call s:RestoreWinVars() | |
2152 | 3686 " else " Decho |
3687 " call Decho("case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6") | |
3688 endif | |
3689 keepj norm! 0 | |
1121 | 3690 |
1209 | 3691 if a:0 > 0 |
2152 | 3692 " call Decho("case [a:0=".a:0."] > 0: a:1<".a:1.">") |
1209 | 3693 if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)) |
2152 | 3694 " call Decho("case a:1: ~ and unix or cygwin") |
3695 let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),'')) | |
1209 | 3696 " call Decho("using dirname<".dirname."> (case: ~ && unix||cygwin)") |
3697 elseif a:1 == '.' | |
2152 | 3698 " call Decho("case a:1: .") |
3699 let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd()) | |
1209 | 3700 if dirname !~ '/$' |
3701 let dirname= dirname."/" | |
3702 endif | |
3703 " call Decho("using dirname<".dirname."> (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")") | |
3704 elseif a:1 =~ '\$' | |
2152 | 3705 " call Decho("case a:1: $") |
3706 let dirname= simplify(expand(a:1)) | |
2034 | 3707 " call Decho("using user-specified dirname<".dirname."> with $env-var") |
2152 | 3708 elseif a:1 !~ '^\*/' |
3709 " call Decho("case a:1: other, not pattern or filepattern") | |
3710 let dirname= simplify(a:1) | |
3711 " call Decho("using user-specified dirname<".dirname.">") | |
1209 | 3712 else |
2152 | 3713 " call Decho("case a:1: pattern or filepattern") |
1209 | 3714 let dirname= a:1 |
1121 | 3715 endif |
1621 | 3716 else |
3717 " clear explore | |
2152 | 3718 " call Decho("case a:0=".a:0.": clearing Explore list") |
2034 | 3719 call s:NetrwClearExplore() |
1621 | 3720 " call Dret("netrw#Explore : cleared list") |
3721 return | |
3722 endif | |
2152 | 3723 |
3724 " call Decho("dirname<".dirname.">") | |
3725 if dirname =~ '\.\./\=$' | |
3726 let dirname= simplify(fnamemodify(dirname,':p:h')) | |
3727 elseif dirname =~ '\.\.' || dirname == '.' | |
3728 let dirname= simplify(fnamemodify(dirname,':p')) | |
3729 endif | |
3730 " call Decho("dirname<".dirname."> (after simplify)") | |
1621 | 3731 |
3732 if dirname =~ '/\*\*/' | |
3733 " handle .../**/.../filepat | |
3734 " call Decho("case Explore .../**/.../filepat") | |
3735 let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','') | |
3736 if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16"))) | |
3737 let b:netrw_curdir = prefixdir | |
3738 else | |
3739 let b:netrw_curdir= getcwd().'/'.prefixdir | |
3740 endif | |
3741 let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','') | |
3742 let starpat= 4; | |
3743 " call Decho("pwd<".getcwd()."> dirname<".dirname.">") | |
3744 " call Decho("case Explore ../**/../filepat (starpat=".starpat.")") | |
3745 | |
3746 elseif dirname =~ '^\*//' | |
3747 " starpat=1: Explore *//pattern (current directory only search for files containing pattern) | |
3748 " call Decho("case Explore *//pattern") | |
3749 let pattern= substitute(dirname,'^\*//\(.*\)$','\1','') | |
3750 let starpat= 1 | |
3751 " call Decho("Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") | |
1121 | 3752 if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif |
1621 | 3753 |
1121 | 3754 elseif dirname =~ '^\*\*//' |
1621 | 3755 " starpat=2: Explore **//pattern (recursive descent search for files containing pattern) |
1121 | 3756 " call Decho("case Explore **//pattern") |
1621 | 3757 let pattern= substitute(dirname,'^\*\*//','','') |
3758 let starpat= 2 | |
3759 " call Decho("Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") | |
3760 | |
3761 elseif dirname =~ '^\*/' | |
3762 " starpat=3: Explore */filepat (search in current directory for filenames matching filepat) | |
3763 let starpat= 3 | |
3764 " call Decho("case Explore */filepat (starpat=".starpat.")") | |
3765 | |
3766 elseif dirname=~ '^\*\*/' | |
3767 " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) | |
3768 let starpat= 4 | |
3769 " call Decho("case Explore **/filepat (starpat=".starpat.")") | |
2034 | 3770 |
1621 | 3771 else |
3772 let starpat= 0 | |
2034 | 3773 " call Decho("default case: starpat=".starpat) |
3774 endif | |
1621 | 3775 |
3776 if starpat == 0 && a:indx >= 0 | |
3777 " [Explore Hexplore Vexplore Sexplore] [dirname] | |
2034 | 3778 " call Decho("case starpat==0 && a:indx=".a:indx.": dirname<".dirname."> Explore Hexplore Vexplore Sexplore") |
1621 | 3779 if dirname == "" |
2034 | 3780 let dirname= curfiledir |
3781 " call Decho("empty dirname, using current file's directory<".dirname.">") | |
1621 | 3782 endif |
3783 if dirname =~ '^scp:' || dirname =~ '^ftp:' | |
3784 " call Decho("calling NetrwBrowse(0,dirname<".dirname.">)") | |
3785 call s:NetrwBrowse(0,dirname) | |
1121 | 3786 else |
1621 | 3787 if dirname == ""|let dirname= getcwd()|endif |
3788 " call Decho("calling LocalBrowseCheck(dirname<".dirname.">)") | |
3789 call netrw#LocalBrowseCheck(dirname) | |
3790 endif | |
3791 | |
2034 | 3792 " call Decho("curdir<".curdir.">") |
1621 | 3793 if has("win32") || has("win95") || has("win64") || has("win16") |
2152 | 3794 keepj call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW') |
1621 | 3795 else |
2152 | 3796 keepj call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW') |
1621 | 3797 endif |
3798 | |
3799 " starpat=1: Explore *//pattern (current directory only search for files containing pattern) | |
3800 " starpat=2: Explore **//pattern (recursive descent search for files containing pattern) | |
3801 " starpat=3: Explore */filepat (search in current directory for filenames matching filepat) | |
3802 " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) | |
3803 elseif a:indx <= 0 | |
3804 " Nexplore, Pexplore, Explore: handle starpat | |
2034 | 3805 " call Decho("case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx) |
1121 | 3806 if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir") |
3807 " call Decho("set up <s-up> and <s-down> maps") | |
3808 let s:didstarstar= 1 | |
3809 nnoremap <buffer> <silent> <s-up> :Pexplore<cr> | |
3810 nnoremap <buffer> <silent> <s-down> :Nexplore<cr> | |
3811 endif | |
3812 | |
3813 if has("path_extra") | |
1621 | 3814 " call Decho("starpat=".starpat.": has +path_extra") |
1121 | 3815 if !exists("w:netrw_explore_indx") |
3816 let w:netrw_explore_indx= 0 | |
3817 endif | |
2034 | 3818 |
1121 | 3819 let indx = a:indx |
1621 | 3820 " call Decho("starpat=".starpat.": set indx= [a:indx=".indx."]") |
2034 | 3821 |
1121 | 3822 if indx == -1 |
1621 | 3823 " Nexplore |
3824 " call Decho("case Nexplore with starpat=".starpat.": (indx=".indx.")") | |
1121 | 3825 if !exists("w:netrw_explore_list") " sanity check |
2751 | 3826 keepj call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40) |
2152 | 3827 sil! let @* = keepregstar |
3828 sil! let @+ = keepregstar | |
3829 sil! let @/ = keepregslash | |
1121 | 3830 " call Dret("netrw#Explore") |
3831 return | |
3832 endif | |
3833 let indx= w:netrw_explore_indx | |
3834 if indx < 0 | let indx= 0 | endif | |
3835 if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif | |
3836 let curfile= w:netrw_explore_list[indx] | |
3837 " call Decho("indx=".indx." curfile<".curfile.">") | |
3838 while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx] | |
3839 let indx= indx + 1 | |
3840 " call Decho("indx=".indx." (Nexplore while loop)") | |
3841 endwhile | |
3842 if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif | |
3843 " call Decho("Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) | |
3844 | |
3845 elseif indx == -2 | |
1621 | 3846 " Pexplore |
3847 " call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")") | |
1121 | 3848 if !exists("w:netrw_explore_list") " sanity check |
2751 | 3849 keepj call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41) |
2152 | 3850 sil! let @* = keepregstar |
3851 sil! let @+ = keepregstar | |
3852 sil! let @/ = keepregslash | |
1121 | 3853 " call Dret("netrw#Explore") |
3854 return | |
3855 endif | |
3856 let indx= w:netrw_explore_indx | |
3857 if indx < 0 | let indx= 0 | endif | |
3858 if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif | |
3859 let curfile= w:netrw_explore_list[indx] | |
3860 " call Decho("indx=".indx." curfile<".curfile.">") | |
3861 while indx >= 0 && curfile == w:netrw_explore_list[indx] | |
3862 let indx= indx - 1 | |
3863 " call Decho("indx=".indx." (Pexplore while loop)") | |
3864 endwhile | |
3865 if indx < 0 | let indx= 0 | endif | |
3866 " call Decho("Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) | |
3867 | |
3868 else | |
3869 " Explore -- initialize | |
3870 " build list of files to Explore with Nexplore/Pexplore | |
1621 | 3871 " call Decho("starpat=".starpat.": case Explore: initialize (indx=".indx.")") |
2751 | 3872 keepj call s:NetrwClearExplore() |
1121 | 3873 let w:netrw_explore_indx= 0 |
3874 if !exists("b:netrw_curdir") | |
3875 let b:netrw_curdir= getcwd() | |
3876 endif | |
1621 | 3877 " call Decho("starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">") |
3878 | |
3879 " switch on starpat to build the w:netrw_explore_list of files | |
3880 if starpat == 1 | |
3881 " starpat=1: Explore *//pattern (current directory only search for files containing pattern) | |
3882 " call Decho("starpat=".starpat.": build *//pattern list") | |
2034 | 3883 " call Decho("pattern<".pattern.">") |
3884 try | |
2152 | 3885 exe "keepj noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*" |
2034 | 3886 catch /^Vim\%((\a\+)\)\=:E480/ |
3887 call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76) | |
3888 " call Dret("netrw#Explore : unable to find pattern<".pattern.">") | |
3889 return | |
3890 endtry | |
3891 let w:netrw_explore_list = s:NetrwExploreListUniq(map(getqflist(),'bufname(v:val.bufnr)')) | |
1621 | 3892 if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif |
3893 | |
3894 elseif starpat == 2 | |
3895 " starpat=2: Explore **//pattern (recursive descent search for files containing pattern) | |
3896 " call Decho("starpat=".starpat.": build **//pattern list") | |
3897 try | |
2152 | 3898 exe "sil keepj noautocmd vimgrep /".pattern."/gj "."**/*" |
1621 | 3899 catch /^Vim\%((\a\+)\)\=:E480/ |
2034 | 3900 call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45) |
1121 | 3901 if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif |
2751 | 3902 sil! let @* = keepregstar |
3903 sil! let @+ = keepregstar | |
3904 sil! let @/ = keepregslash | |
1621 | 3905 " call Dret("netrw#Explore : no files matched pattern") |
3906 return | |
3907 endtry | |
3908 let s:netrw_curdir = b:netrw_curdir | |
3909 let w:netrw_explore_list = getqflist() | |
2034 | 3910 let w:netrw_explore_list = s:NetrwExploreListUniq(map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)')) |
1621 | 3911 |
3912 elseif starpat == 3 | |
3913 " starpat=3: Explore */filepat (search in current directory for filenames matching filepat) | |
3914 " call Decho("starpat=".starpat.": build */filepat list") | |
2034 | 3915 let filepat= substitute(dirname,'^\*/','','') |
3916 let filepat= substitute(filepat,'^[%#<]','\\&','') | |
3917 " call Decho("b:netrw_curdir<".b:netrw_curdir.">") | |
3918 " call Decho("filepat<".filepat.">") | |
3919 let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n')) | |
3920 if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif | |
1621 | 3921 |
3922 elseif starpat == 4 | |
3923 " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) | |
3924 " call Decho("starpat=".starpat.": build **/filepat list") | |
2034 | 3925 let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n')) |
1621 | 3926 if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif |
3927 endif " switch on starpat to build w:netrw_explore_list | |
1121 | 3928 |
3929 let w:netrw_explore_listlen = len(w:netrw_explore_list) | |
1621 | 3930 " call Decho("w:netrw_explore_list<".string(w:netrw_explore_list).">") |
3931 " call Decho("w:netrw_explore_listlen=".w:netrw_explore_listlen) | |
1121 | 3932 |
3933 if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/') | |
2751 | 3934 keepj call netrw#ErrorMsg(s:WARNING,"no files matched",42) |
2152 | 3935 sil! let @* = keepregstar |
3936 sil! let @+ = keepregstar | |
3937 sil! let @/ = keepregslash | |
1121 | 3938 " call Dret("netrw#Explore : no files matched") |
3939 return | |
482 | 3940 endif |
1621 | 3941 endif " if indx ... endif |
1121 | 3942 |
3943 " NetrwStatusLine support - for exploring support | |
3944 let w:netrw_explore_indx= indx | |
2034 | 3945 " call Decho("w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen) |
1121 | 3946 |
3947 " wrap the indx around, but issue a note | |
3948 if indx >= w:netrw_explore_listlen || indx < 0 | |
3949 " call Decho("wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")") | |
3950 let indx = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0 | |
3951 let w:netrw_explore_indx= indx | |
2751 | 3952 keepj call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43) |
1121 | 3953 endif |
3954 | |
3955 exe "let dirfile= w:netrw_explore_list[".indx."]" | |
3956 " call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">") | |
3957 let newdir= substitute(dirfile,'/[^/]*$','','e') | |
3958 " call Decho("newdir<".newdir.">") | |
3959 | |
3960 " call Decho("calling LocalBrowseCheck(newdir<".newdir.">)") | |
3961 call netrw#LocalBrowseCheck(newdir) | |
3962 if !exists("w:netrw_liststyle") | |
3963 let w:netrw_liststyle= g:netrw_liststyle | |
3964 endif | |
3965 if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST | |
2152 | 3966 keepj call search('^'.substitute(dirfile,"^.*/","","").'\>',"W") |
1121 | 3967 else |
2152 | 3968 keepj call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w") |
1121 | 3969 endif |
3970 let w:netrw_explore_mtchcnt = indx + 1 | |
3971 let w:netrw_explore_bufnr = bufnr("%") | |
3972 let w:netrw_explore_line = line(".") | |
2751 | 3973 keepj call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}') |
1121 | 3974 " call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line) |
3975 | |
3976 else | |
1621 | 3977 " call Decho("your vim does not have +path_extra") |
1121 | 3978 if !exists("g:netrw_quiet") |
2751 | 3979 keepj call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44) |
482 | 3980 endif |
2152 | 3981 sil! let @* = keepregstar |
3982 sil! let @+ = keepregstar | |
3983 sil! let @/ = keepregslash | |
1121 | 3984 " call Dret("netrw#Explore : missing +path_extra") |
3985 return | |
3986 endif | |
3987 | |
3988 else | |
2034 | 3989 " call Decho("default case: Explore newdir<".dirname.">") |
1121 | 3990 if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/' |
2152 | 3991 sil! unlet w:netrw_treedict |
3992 sil! unlet w:netrw_treetop | |
1121 | 3993 endif |
3994 let newdir= dirname | |
3995 if !exists("b:netrw_curdir") | |
2751 | 3996 keepj call netrw#LocalBrowseCheck(getcwd()) |
1121 | 3997 else |
2751 | 3998 keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir)) |
1621 | 3999 endif |
4000 endif | |
4001 | |
4002 " visual display of **/ **// */ Exploration files | |
2034 | 4003 " call Decho("w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist")) |
4004 " call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">") | |
1621 | 4005 if exists("w:netrw_explore_indx") && exists("b:netrw_curdir") |
2034 | 4006 " call Decho("s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-")) |
1621 | 4007 if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir |
4008 " only update match list if current directory isn't the same as before | |
2034 | 4009 " call Decho("only update match list if current directory not the same as before") |
1621 | 4010 let s:explore_prvdir = b:netrw_curdir |
4011 let s:explore_match = "" | |
2034 | 4012 let dirlen = s:Strlen(b:netrw_curdir) |
1621 | 4013 if b:netrw_curdir !~ '/$' |
4014 let dirlen= dirlen + 1 | |
4015 endif | |
4016 let prvfname= "" | |
4017 for fname in w:netrw_explore_list | |
4018 " call Decho("fname<".fname.">") | |
4019 if fname =~ '^'.b:netrw_curdir | |
4020 if s:explore_match == "" | |
2034 | 4021 let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>' |
1621 | 4022 else |
2034 | 4023 let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>' |
1621 | 4024 endif |
4025 elseif fname !~ '^/' && fname != prvfname | |
4026 if s:explore_match == "" | |
2034 | 4027 let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>' |
1621 | 4028 else |
2034 | 4029 let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>' |
1621 | 4030 endif |
4031 endif | |
4032 let prvfname= fname | |
4033 endfor | |
4034 " call Decho("explore_match<".s:explore_match.">") | |
4035 exe "2match netrwMarkFile /".s:explore_match."/" | |
4036 endif | |
4037 echo "<s-up>==Pexplore <s-down>==Nexplore" | |
4038 else | |
4039 2match none | |
4040 if exists("s:explore_match") | unlet s:explore_match | endif | |
4041 if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif | |
4042 echo " " | |
4043 " call Decho("cleared explore match list") | |
1121 | 4044 endif |
4045 | |
2152 | 4046 sil! let @* = keepregstar |
4047 sil! let @+ = keepregstar | |
4048 sil! let @/ = keepregslash | |
1121 | 4049 " call Dret("netrw#Explore : @/<".@/.">") |
4050 endfun | |
4051 | |
4052 " --------------------------------------------------------------------- | |
2034 | 4053 " s:NetrwExploreListUniq: {{{2 |
4054 fun! s:NetrwExploreListUniq(explist) | |
4055 " call Dfunc("s:NetrwExploreListUniq(explist)") | |
4056 | |
4057 " this assumes that the list is already sorted | |
4058 let newexplist= [] | |
4059 for member in a:explist | |
4060 if !exists("uniqmember") || member != uniqmember | |
4061 let uniqmember = member | |
4062 let newexplist = newexplist + [ member ] | |
4063 endif | |
4064 endfor | |
4065 | |
4066 " call Dret("s:NetrwExploreListUniq") | |
4067 return newexplist | |
4068 endfun | |
4069 | |
4070 " --------------------------------------------------------------------- | |
2751 | 4071 " s:NetrwForceChgDir: (gd support) Force treatment as a directory {{{2 |
4072 fun! s:NetrwForceChgDir(islocal,newdir) | |
4073 " call Dfunc("s:NetrwForceChgDir(islocal=".a:islocal." newdir<".a:newdir.">)") | |
4074 if a:newdir !~ '/$' | |
4075 " ok, looks like force is needed to get directory-style treatment | |
4076 if a:newdir =~ '@$' | |
4077 let newdir= substitute(a:newdir,'@$','/','') | |
4078 elseif a:newdir =~ '[*=|\\]$' | |
4079 let newdir= substitute(a:newdir,'.$','/','') | |
4080 else | |
4081 let newdir= a:newdir.'/' | |
4082 endif | |
4083 " call Decho("adjusting newdir<".newdir."> due to gd") | |
4084 else | |
4085 " should already be getting treatment as a directory | |
4086 let newdir= a:newdir | |
4087 endif | |
4088 call s:NetrwBrowseChgDir(a:islocal,newdir) | |
4089 call s:NetrwBrowse(a:islocal,newdir) | |
4090 " call Dret("s:NetrwForceChgDir") | |
4091 endfun | |
4092 | |
4093 " --------------------------------------------------------------------- | |
4094 " s:NetrwForceFile: (gf support) Force treatment as a file {{{2 | |
4095 fun! s:NetrwForceFile(islocal,newfile) | |
4096 " " call Dfunc("s:NetrwForceFile(islocal=".a:islocal." newdir<".a:newdir.">)") | |
4097 if a:newfile =~ '[/@*=|\\]$' | |
4098 let newfile= substitute(a:newfile,'.$','','') | |
4099 else | |
4100 let newfile= a:newfile | |
4101 endif | |
4102 call s:NetrwBrowseChgDir(a:islocal,newfile) | |
4103 " call Dret("s:NetrwForceFile") | |
4104 endfun | |
4105 | |
4106 " --------------------------------------------------------------------- | |
1621 | 4107 " s:NetrwHide: this function is invoked by the "a" map for browsing {{{2 |
4108 " and switches the hiding mode. The actual hiding is done by | |
4109 " s:NetrwListHide(). | |
4110 " g:netrw_hide= 0: show all | |
4111 " 1: show not-hidden files | |
4112 " 2: show hidden files only | |
4113 fun! s:NetrwHide(islocal) | |
4114 " call Dfunc("NetrwHide(islocal=".a:islocal.") g:netrw_hide=".g:netrw_hide) | |
4115 let svpos= netrw#NetrwSavePosn() | |
4116 | |
4117 if exists("s:netrwmarkfilelist_{bufnr('%')}") | |
4118 " call Decho(((g:netrw_hide == 1)? "unhide" : "hide")." files in markfilelist<".string(s:netrwmarkfilelist_{bufnr("%")}).">") | |
4119 " call Decho("g:netrw_list_hide<".g:netrw_list_hide.">") | |
4120 | |
4121 " hide the files in the markfile list | |
4122 for fname in s:netrwmarkfilelist_{bufnr("%")} | |
4123 " call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." isk=".&isk) | |
4124 if match(g:netrw_list_hide,'\<'.fname.'\>') != -1 | |
4125 " remove fname from hiding list | |
4126 let g:netrw_list_hide= substitute(g:netrw_list_hide,'..\<'.escape(fname,g:netrw_fname_escape).'\>..','','') | |
4127 let g:netrw_list_hide= substitute(g:netrw_list_hide,',,',',','g') | |
4128 let g:netrw_list_hide= substitute(g:netrw_list_hide,'^,\|,$','','') | |
4129 " call Decho("unhide: g:netrw_list_hide<".g:netrw_list_hide.">") | |
4130 else | |
4131 " append fname to hiding list | |
4132 if exists("g:netrw_list_hide") && g:netrw_list_hide != "" | |
4133 let g:netrw_list_hide= g:netrw_list_hide.',\<'.escape(fname,g:netrw_fname_escape).'\>' | |
4134 else | |
4135 let g:netrw_list_hide= '\<'.escape(fname,g:netrw_fname_escape).'\>' | |
4136 endif | |
4137 " call Decho("hide: g:netrw_list_hide<".g:netrw_list_hide.">") | |
4138 endif | |
4139 endfor | |
2751 | 4140 keepj call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir) |
1621 | 4141 let g:netrw_hide= 1 |
4142 | |
4143 else | |
4144 | |
4145 " switch between show-all/show-not-hidden/show-hidden | |
4146 let g:netrw_hide=(g:netrw_hide+1)%3 | |
2152 | 4147 exe "keepj norm! 0" |
1621 | 4148 if g:netrw_hide && g:netrw_list_hide == "" |
2751 | 4149 keepj call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49) |
1621 | 4150 " call Dret("NetrwHide") |
4151 return | |
4152 endif | |
4153 endif | |
4154 | |
2751 | 4155 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) |
4156 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 4157 " call Dret("NetrwHide") |
4158 endfun | |
4159 | |
4160 " --------------------------------------------------------------------- | |
4161 " s:NetrwHidden: invoked by "gh" {{{2 | |
4162 fun! s:NetrwHidden(islocal) | |
4163 " call Dfunc("s:NetrwHidden()") | |
4164 " save current position | |
4165 let svpos= netrw#NetrwSavePosn() | |
4166 | |
4167 if g:netrw_list_hide =~ '\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+' | |
4168 " remove pattern from hiding list | |
4169 let g:netrw_list_hide= substitute(g:netrw_list_hide,'\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+','','') | |
2034 | 4170 elseif s:Strlen(g:netrw_list_hide) >= 1 |
1621 | 4171 let g:netrw_list_hide= g:netrw_list_hide . ',\(^\|\s\s\)\zs\.\S\+' |
4172 else | |
4173 let g:netrw_list_hide= '\(^\|\s\s\)\zs\.\S\+' | |
4174 endif | |
4175 | |
4176 " refresh screen and return to saved position | |
2751 | 4177 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) |
4178 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 4179 " call Dret("s:NetrwHidden") |
4180 endfun | |
4181 | |
4182 " --------------------------------------------------------------------- | |
2034 | 4183 " s:NetrwHome: this function determines a "home" for saving bookmarks and history {{{2 |
4184 fun! s:NetrwHome() | |
4185 if exists("g:netrw_home") | |
4186 let home= g:netrw_home | |
4187 else | |
4188 " go to vim plugin home | |
4189 for home in split(&rtp,',') + [''] | |
4190 if isdirectory(home) && filewritable(home) | break | endif | |
4191 let basehome= substitute(home,'[/\\]\.vim$','','') | |
4192 if isdirectory(basehome) && filewritable(basehome) | |
4193 let home= basehome."/.vim" | |
4194 break | |
4195 endif | |
4196 endfor | |
4197 if home == "" | |
4198 " just pick the first directory | |
4199 let home= substitute(&rtp,',.*$','','') | |
4200 endif | |
4201 if (has("win32") || has("win95") || has("win64") || has("win16")) | |
4202 let home= substitute(home,'/','\\','g') | |
4203 endif | |
4204 endif | |
4205 " insure that the home directory exists | |
4206 if !isdirectory(home) | |
4207 if exists("g:netrw_mkdir") | |
4208 call system(g:netrw_mkdir." ".shellescape(home)) | |
4209 else | |
4210 call mkdir(home) | |
4211 endif | |
4212 endif | |
4213 let g:netrw_home= home | |
4214 return home | |
4215 endfun | |
4216 | |
4217 " --------------------------------------------------------------------- | |
1621 | 4218 " s:NetrwLeftmouse: handles the <leftmouse> when in a netrw browsing window {{{2 |
4219 fun! s:NetrwLeftmouse(islocal) | |
4220 " call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")") | |
2152 | 4221 |
4222 " check if the status bar was clicked on instead of a file/directory name | |
2751 | 4223 while getchar(0) != 0 |
4224 "clear the input stream | |
4225 endwhile | |
2152 | 4226 call feedkeys("\<LeftMouse>") |
2751 | 4227 let c = getchar() |
2152 | 4228 let mouse_lnum = v:mouse_lnum |
4229 let wlastline = line('w$') | |
4230 let lastline = line('$') | |
4231 " call Decho("v:mouse_lnum=".mouse_lnum." line(w$)=".wlastline." line($)=".lastline." v:mouse_win=".v:mouse_win." winnr#".winnr()) | |
4232 " call Decho("v:mouse_col =".v:mouse_col." col=".col(".")." wincol =".wincol()." winwidth =".winwidth(0)) | |
4233 if mouse_lnum >= wlastline + 1 || v:mouse_win != winnr() | |
4234 " appears to be a status bar leftmouse click | |
4235 " call Dret("s:NetrwLeftmouse : detected a status bar leftmouse click") | |
4236 return | |
4237 endif | |
4238 if v:mouse_col != col('.') | |
4239 " call Dret("s:NetrwLeftmouse : detected a vertical separator bar leftmouse click") | |
4240 return | |
4241 endif | |
4242 | |
1621 | 4243 if a:islocal |
4244 if exists("b:netrw_curdir") | |
2751 | 4245 keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord())) |
1621 | 4246 endif |
4247 else | |
4248 if exists("b:netrw_curdir") | |
2751 | 4249 keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord())) |
1621 | 4250 endif |
4251 endif | |
4252 " call Dret("s:NetrwLeftmouse") | |
4253 endfun | |
4254 | |
4255 " --------------------------------------------------------------------- | |
4256 " s:NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2 | |
4257 " separated patterns given in g:netrw_list_hide | |
4258 fun! s:NetrwListHide() | |
2751 | 4259 " call Dfunc("NetrwListHide() g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">") |
1621 | 4260 |
4261 " find a character not in the "hide" string to use as a separator for :g and :v commands | |
4262 " How-it-works: take the hiding command, convert it into a range. Duplicate | |
4263 " characters don't matter. Remove all such characters from the '/~...90' | |
4264 " string. Use the first character left as a separator character. | |
4265 let listhide= g:netrw_list_hide | |
4266 let sep = strpart(substitute('/~@#$%^&*{};:,<.>?|1234567890','['.escape(listhide,'-]^\').']','','ge'),1,1) | |
4267 " call Decho("sep=".sep) | |
4268 | |
4269 while listhide != "" | |
4270 if listhide =~ ',' | |
4271 let hide = substitute(listhide,',.*$','','e') | |
4272 let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e') | |
4273 else | |
4274 let hide = listhide | |
4275 let listhide = "" | |
4276 endif | |
4277 | |
4278 " Prune the list by hiding any files which match | |
4279 if g:netrw_hide == 1 | |
4280 " call Decho("hiding<".hide."> listhide<".listhide.">") | |
2152 | 4281 exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d' |
1621 | 4282 elseif g:netrw_hide == 2 |
4283 " call Decho("showing<".hide."> listhide<".listhide.">") | |
2152 | 4284 exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @' |
1621 | 4285 endif |
4286 endwhile | |
4287 if g:netrw_hide == 2 | |
2152 | 4288 exe 'sil keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d' |
4289 exe 'sil keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e' | |
1621 | 4290 endif |
4291 | |
2751 | 4292 " remove any blank lines that have somehow remained. |
4293 " This seems to happen under Windows. | |
4294 exe 'sil! keepj 1,$g@^\s*$@d' | |
4295 | |
1621 | 4296 " call Dret("NetrwListHide") |
4297 endfun | |
4298 | |
4299 " --------------------------------------------------------------------- | |
4300 " NetrwHideEdit: allows user to edit the file/directory hiding list | |
4301 fun! s:NetrwHideEdit(islocal) | |
4302 " call Dfunc("NetrwHideEdit(islocal=".a:islocal.")") | |
4303 | |
4304 " save current cursor position | |
4305 let svpos= netrw#NetrwSavePosn() | |
4306 | |
4307 " get new hiding list from user | |
4308 call inputsave() | |
4309 let newhide= input("Edit Hiding List: ",g:netrw_list_hide) | |
4310 call inputrestore() | |
4311 let g:netrw_list_hide= newhide | |
4312 " call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">") | |
4313 | |
4314 " refresh the listing | |
2751 | 4315 sil keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./")) |
1621 | 4316 |
4317 " restore cursor position | |
4318 call netrw#NetrwRestorePosn(svpos) | |
4319 | |
4320 " call Dret("NetrwHideEdit") | |
4321 endfun | |
4322 | |
4323 " --------------------------------------------------------------------- | |
4324 " NetSortSequence: allows user to edit the sorting sequence | |
4325 fun! s:NetSortSequence(islocal) | |
4326 " call Dfunc("NetSortSequence(islocal=".a:islocal.")") | |
4327 | |
4328 let svpos= netrw#NetrwSavePosn() | |
4329 call inputsave() | |
4330 let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence) | |
4331 call inputrestore() | |
4332 | |
4333 " refresh the listing | |
4334 let g:netrw_sort_sequence= newsortseq | |
2751 | 4335 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) |
4336 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 4337 |
4338 " call Dret("NetSortSequence") | |
4339 endfun | |
4340 | |
4341 " --------------------------------------------------------------------- | |
4342 " s:NetrwMakeDir: this function makes a directory (both local and remote) {{{2 | |
4343 fun! s:NetrwMakeDir(usrhost) | |
4344 " call Dfunc("NetrwMakeDir(usrhost<".a:usrhost.">)") | |
4345 | |
4346 " get name of new directory from user. A bare <CR> will skip. | |
4347 " if its currently a directory, also request will be skipped, but with | |
4348 " a message. | |
4349 call inputsave() | |
4350 let newdirname= input("Please give directory name: ") | |
4351 call inputrestore() | |
4352 " call Decho("newdirname<".newdirname.">") | |
4353 | |
4354 if newdirname == "" | |
4355 " call Dret("NetrwMakeDir : user aborted with bare <cr>") | |
4356 return | |
4357 endif | |
4358 | |
4359 if a:usrhost == "" | |
4360 " call Decho("local mkdir") | |
4361 | |
4362 " Local mkdir: | |
4363 " sanity checks | |
4364 let fullnewdir= b:netrw_curdir.'/'.newdirname | |
4365 " call Decho("fullnewdir<".fullnewdir.">") | |
4366 if isdirectory(fullnewdir) | |
4367 if !exists("g:netrw_quiet") | |
2751 | 4368 keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24) |
1621 | 4369 endif |
4370 " call Dret("NetrwMakeDir : directory<".newdirname."> exists previously") | |
4371 return | |
4372 endif | |
4373 if s:FileReadable(fullnewdir) | |
4374 if !exists("g:netrw_quiet") | |
2751 | 4375 keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25) |
1621 | 4376 endif |
4377 " call Dret("NetrwMakeDir : file<".newdirname."> exists previously") | |
4378 return | |
4379 endif | |
4380 | |
4381 " requested new local directory is neither a pre-existing file or | |
4382 " directory, so make it! | |
4383 if exists("*mkdir") | |
4384 call mkdir(fullnewdir,"p") | |
4385 else | |
4386 let netrw_origdir= s:NetrwGetcwd(1) | |
2152 | 4387 exe 'keepj lcd '.fnameescape(b:netrw_curdir) |
1621 | 4388 " call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">") |
2751 | 4389 " call Decho("exe sil! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1)) |
2152 | 4390 exe "sil! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1) |
1621 | 4391 if !g:netrw_keepdir |
2152 | 4392 exe 'keepj lcd '.fnameescape(netrw_origdir) |
1621 | 4393 " call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">") |
4394 endif | |
4395 endif | |
4396 | |
4397 if v:shell_error == 0 | |
4398 " refresh listing | |
4399 " call Decho("refresh listing") | |
4400 let svpos= netrw#NetrwSavePosn() | |
4401 call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) | |
4402 call netrw#NetrwRestorePosn(svpos) | |
4403 elseif !exists("g:netrw_quiet") | |
4404 call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",26) | |
4405 endif | |
4406 " redraw! | |
4407 | |
4408 elseif !exists("b:netrw_method") || b:netrw_method == 4 | |
4409 " Remote mkdir: | |
4410 " call Decho("remote mkdir") | |
4411 let mkdircmd = s:MakeSshCmd(g:netrw_mkdir_cmd) | |
4412 let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname | |
2751 | 4413 " call Decho("exe sil! !".mkdircmd." ".shellescape(newdirname,1)) |
2152 | 4414 exe "sil! !".mkdircmd." ".shellescape(newdirname,1) |
1621 | 4415 if v:shell_error == 0 |
4416 " refresh listing | |
4417 let svpos= netrw#NetrwSavePosn() | |
2751 | 4418 keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) |
4419 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 4420 elseif !exists("g:netrw_quiet") |
2751 | 4421 keepj call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27) |
1621 | 4422 endif |
4423 " redraw! | |
4424 | |
4425 elseif b:netrw_method == 2 | |
4426 " COMBAK -- future work | |
2751 | 4427 keepj call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68) |
1621 | 4428 elseif b:netrw_method == 3 |
4429 " COMBAK -- future work | |
2751 | 4430 keepj call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68) |
1621 | 4431 endif |
4432 | |
4433 " call Dret("NetrwMakeDir") | |
4434 endfun | |
4435 | |
4436 " --------------------------------------------------------------------- | |
4437 " s:NetrwMarkFile: (invoked by mf) This function is used to both {{{2 | |
4438 " mark and unmark files. If a markfile list exists, | |
4439 " then the rename and delete functions will use it instead | |
4440 " of whatever may happen to be under the cursor at that | |
4441 " moment. When the mouse and gui are available, | |
4442 " shift-leftmouse may also be used to mark files. | |
1698 | 4443 " |
4444 " Creates two lists | |
4445 " s:netrwmarkfilelist -- holds complete paths to all marked files | |
4446 " s:netrwmarkfilelist_# -- holds list of marked files in current-buffer's directory (#==bufnr()) | |
4447 " | |
4448 " Creates a marked file match string | |
4449 " s:netrwmarfilemtch_# -- used with 2match to display marked files | |
4450 " | |
1702 | 4451 " Creates a buffer version of islocal |
4452 " b:netrw_islocal | |
1621 | 4453 fun! s:NetrwMarkFile(islocal,fname) |
4454 " call Dfunc("s:NetrwMarkFile(islocal=".a:islocal." fname<".a:fname.">)") | |
4455 let curbufnr= bufnr("%") | |
4456 let curdir = b:netrw_curdir | |
2034 | 4457 let trailer = '[@=|\/\*]\=\>' |
2751 | 4458 |
1621 | 4459 if exists("s:netrwmarkfilelist_{curbufnr}") |
2751 | 4460 " markfile list pre-exists |
1621 | 4461 " call Decho("starting s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">") |
4462 " call Decho("starting s:netrwmarkfilemtch_{curbufnr}<".s:netrwmarkfilemtch_{curbufnr}.">") | |
1702 | 4463 let b:netrw_islocal= a:islocal |
1621 | 4464 |
4465 if index(s:netrwmarkfilelist_{curbufnr},a:fname) == -1 | |
1702 | 4466 " append filename to buffer's markfilelist |
1621 | 4467 " call Decho("append filename<".a:fname."> to local markfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">") |
4468 call add(s:netrwmarkfilelist_{curbufnr},a:fname) | |
2034 | 4469 let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(a:fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer |
1621 | 4470 |
4471 else | |
1702 | 4472 " remove filename from buffer's markfilelist |
1621 | 4473 " call Decho("remove filename<".a:fname."> from local markfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">") |
4474 call filter(s:netrwmarkfilelist_{curbufnr},'v:val != a:fname') | |
4475 if s:netrwmarkfilelist_{curbufnr} == [] | |
4476 " local markfilelist is empty; remove it entirely | |
2034 | 4477 " call Decho("markfile list now empty") |
1621 | 4478 call s:NetrwUnmarkList(curbufnr,curdir) |
4479 else | |
4480 " rebuild match list to display markings correctly | |
4481 " call Decho("rebuild s:netrwmarkfilemtch_".curbufnr) | |
4482 let s:netrwmarkfilemtch_{curbufnr}= "" | |
4483 let first = 1 | |
4484 for fname in s:netrwmarkfilelist_{curbufnr} | |
4485 if first | |
2034 | 4486 let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer |
1621 | 4487 else |
2034 | 4488 let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer |
1621 | 4489 endif |
4490 let first= 0 | |
4491 endfor | |
4492 " call Decho("ending s:netrwmarkfilelist_"curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">") | |
4493 " call Decho("ending s:netrwmarkfilemtch_"curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">") | |
4494 endif | |
4495 endif | |
4496 | |
4497 else | |
4498 " initialize new markfilelist | |
4499 | |
4500 " call Decho("add fname<".a:fname."> to new markfilelist_".curbufnr) | |
4501 let s:netrwmarkfilelist_{curbufnr}= [] | |
4502 call add(s:netrwmarkfilelist_{curbufnr},a:fname) | |
4503 " call Decho("ending s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">") | |
4504 | |
4505 " build initial markfile matching pattern | |
4506 if a:fname =~ '/$' | |
4507 let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc) | |
4508 else | |
2034 | 4509 let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc).trailer |
1621 | 4510 endif |
4511 " call Decho("ending s:netrwmarkfilemtch_".curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">") | |
4512 endif | |
4513 | |
4514 " handle global markfilelist | |
4515 if exists("s:netrwmarkfilelist") | |
4516 let dname= s:ComposePath(b:netrw_curdir,a:fname) | |
4517 if index(s:netrwmarkfilelist,dname) == -1 | |
4518 " append new filename to global markfilelist | |
4519 call add(s:netrwmarkfilelist,s:ComposePath(b:netrw_curdir,a:fname)) | |
4520 " call Decho("append filename<".a:fname."> to global markfilelist<".string(s:netrwmarkfilelist).">") | |
4521 else | |
4522 " remove new filename from global markfilelist | |
4523 " call Decho("filter(".string(s:netrwmarkfilelist).",'v:val != '.".dname.")") | |
4524 call filter(s:netrwmarkfilelist,'v:val != "'.dname.'"') | |
4525 " call Decho("ending s:netrwmarkfilelist <".string(s:netrwmarkfilelist).">") | |
4526 if s:netrwmarkfilelist == [] | |
4527 unlet s:netrwmarkfilelist | |
4528 endif | |
4529 endif | |
4530 else | |
4531 " initialize new global-directory markfilelist | |
4532 let s:netrwmarkfilelist= [] | |
4533 call add(s:netrwmarkfilelist,s:ComposePath(b:netrw_curdir,a:fname)) | |
4534 " call Decho("init s:netrwmarkfilelist<".string(s:netrwmarkfilelist).">") | |
4535 endif | |
4536 | |
4537 " set up 2match'ing to netrwmarkfilemtch list | |
4538 if exists("s:netrwmarkfilemtch_{curbufnr}") && s:netrwmarkfilemtch_{curbufnr} != "" | |
4539 " call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{curbufnr}."/") | |
2034 | 4540 if exists("g:did_drchip_netrwlist_syntax") |
4541 exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{curbufnr}."/" | |
4542 endif | |
1621 | 4543 else |
4544 " call Decho("2match none") | |
4545 2match none | |
4546 endif | |
2751 | 4547 " call Dret("s:NetrwMarkFile : s:netrwmarkfilelist_".curbufnr."<".(exists("s:netrwmarkfilelist_{curbufnr}")? string(s:netrwmarkfilelist_{curbufnr}) : " doesn't exist").">") |
1621 | 4548 endfun |
4549 | |
4550 " --------------------------------------------------------------------- | |
4551 " s:NetrwMarkFileCompress: (invoked by mz) This function is used to {{{2 | |
4552 " compress/decompress files using the programs | |
4553 " in g:netrw_compress and g:netrw_uncompress, | |
4554 " using g:netrw_compress_suffix to know which to | |
4555 " do. By default: | |
4556 " g:netrw_compress = "gzip" | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
4557 " g:netrw_decompress = { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf", ".xz" : "unxz"} |
1621 | 4558 fun! s:NetrwMarkFileCompress(islocal) |
4559 " call Dfunc("s:NetrwMarkFileCompress(islocal=".a:islocal.")") | |
4560 let svpos = netrw#NetrwSavePosn() | |
4561 let curdir = b:netrw_curdir | |
4562 let curbufnr = bufnr("%") | |
4563 | |
4564 if exists("s:netrwmarkfilelist_{curbufnr}") && exists("g:netrw_compress") && exists("g:netrw_decompress") | |
4565 for fname in s:netrwmarkfilelist_{curbufnr} | |
4566 " for every filename in the marked list | |
4567 for sfx in sort(keys(g:netrw_decompress)) | |
4568 if fname =~ '\'.sfx.'$' | |
4569 " fname has a suffix indicating that its compressed; apply associated decompression routine | |
2034 | 4570 let exe= netrw#WinPath(g:netrw_decompress[sfx]) |
1621 | 4571 " call Decho("fname<".fname."> is compressed so decompress with <".exe.">") |
4572 if a:islocal | |
4573 if g:netrw_keepdir | |
1668 | 4574 let fname= shellescape(s:ComposePath(curdir,fname)) |
1621 | 4575 endif |
4576 else | |
1698 | 4577 let fname= shellescape(b:netrw_curdir.fname,1) |
1621 | 4578 endif |
4579 if executable(exe) | |
4580 if a:islocal | |
4581 call system(exe." ".fname) | |
4582 else | |
2751 | 4583 keepj call s:RemoteSystem(exe." ".fname) |
1621 | 4584 endif |
4585 else | |
2751 | 4586 keepj call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50) |
1621 | 4587 endif |
4588 break | |
4589 endif | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
4590 unlet sfx |
1621 | 4591 endfor |
4592 if exists("exe") | |
4593 unlet exe | |
4594 elseif a:islocal | |
4595 " fname not a compressed file, so compress it | |
2034 | 4596 call system(netrw#WinPath(g:netrw_compress)." ".shellescape(s:ComposePath(b:netrw_curdir,fname))) |
1621 | 4597 else |
4598 " fname not a compressed file, so compress it | |
2751 | 4599 keepj call s:RemoteSystem(netrw#WinPath(g:netrw_compress)." ".shellescape(fname)) |
1621 | 4600 endif |
4601 endfor | |
4602 call s:NetrwUnmarkList(curbufnr,curdir) | |
2751 | 4603 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) |
4604 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 4605 endif |
4606 " call Dret("s:NetrwMarkFileCompress") | |
4607 endfun | |
4608 | |
4609 " --------------------------------------------------------------------- | |
4610 " s:NetrwMarkFileCopy: (invoked by mc) copy marked files to target {{{2 | |
4611 " If no marked files, then set up directory as the | |
4612 " target. Currently does not support copying entire | |
4613 " directories. Uses the local-buffer marked file list. | |
4614 " Returns 1=success (used by NetrwMarkFileMove()) | |
4615 " 0=failure | |
4616 fun! s:NetrwMarkFileCopy(islocal) | |
4617 " call Dfunc("s:NetrwMarkFileCopy(islocal=".a:islocal.") target<".(exists("s:netrwmftgt")? s:netrwmftgt : '---').">") | |
4618 | |
4619 " sanity checks | |
4620 if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')}) | |
2751 | 4621 keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66) |
1621 | 4622 " call Dret("s:NetrwMarkFileCopy 0") |
4623 return 0 | |
4624 endif | |
4625 " call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')})) | |
4626 if !exists("s:netrwmftgt") | |
2751 | 4627 keepj call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67) |
1621 | 4628 " call Dret("s:NetrwMarkFileCopy 0") |
4629 return 0 | |
4630 endif | |
4631 " call Decho("sanity chk passed: s:netrwmftgt<".s:netrwmftgt.">") | |
4632 let curdir = b:netrw_curdir | |
4633 let curbufnr = bufnr("%") | |
4634 | |
4635 if a:islocal && s:netrwmftgt_islocal | |
4636 " Copy marked files, local directory to local directory | |
4637 " call Decho("copy from local to local") | |
1698 | 4638 let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)")) |
1621 | 4639 " call Decho("system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt).")") |
2034 | 4640 call system(netrw#WinPath(g:netrw_localcopycmd)." ".args." ".shellescape(s:netrwmftgt)) |
1621 | 4641 |
4642 elseif a:islocal && !s:netrwmftgt_islocal | |
4643 " Copy marked files, local directory to remote directory | |
4644 " call Decho("copy from local to remote") | |
2751 | 4645 keepj call s:NetrwUpload(s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt) |
1621 | 4646 |
4647 elseif !a:islocal && s:netrwmftgt_islocal | |
4648 " call Decho("copy from remote to local") | |
2751 | 4649 keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt) |
1621 | 4650 |
4651 elseif !a:islocal && !s:netrwmftgt_islocal | |
4652 " call Decho("copy from remote to remote") | |
4653 let curdir = getcwd() | |
4654 let tmpdir = s:GetTempfile("") | |
4655 if tmpdir !~ '/' | |
4656 let tmpdir= curdir."/".tmpdir | |
4657 endif | |
4658 if exists("*mkdir") | |
4659 call mkdir(tmpdir) | |
4660 else | |
2152 | 4661 exe "sil! !".g:netrw_local_mkdir.' '.shellescape(tmpdir,1) |
1621 | 4662 endif |
4663 if isdirectory(tmpdir) | |
2152 | 4664 exe "keepj lcd ".fnameescape(tmpdir) |
2751 | 4665 keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir) |
1698 | 4666 let localfiles= map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),'substitute(v:val,"^.*/","","")') |
2751 | 4667 keepj call s:NetrwUpload(localfiles,s:netrwmftgt) |
1621 | 4668 if getcwd() == tmpdir |
4669 for fname in s:netrwmarkfilelist_{bufnr('%')} | |
2751 | 4670 keepj call s:NetrwDelete(fname) |
1621 | 4671 endfor |
2152 | 4672 exe "keepj lcd ".fnameescape(curdir) |
4673 exe "sil !".g:netrw_local_rmdir." ".shellescape(tmpdir,1) | |
1621 | 4674 else |
2152 | 4675 exe "keepj lcd ".fnameescape(curdir) |
1621 | 4676 endif |
4677 endif | |
4678 endif | |
4679 | |
4680 " ------- | |
4681 " cleanup | |
4682 " ------- | |
4683 " call Decho("cleanup") | |
4684 | |
4685 " remove markings from local buffer | |
4686 call s:NetrwUnmarkList(curbufnr,curdir) | |
4687 | |
4688 " refresh buffers | |
4689 if !s:netrwmftgt_islocal | |
4690 call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt) | |
4691 endif | |
4692 if a:islocal | |
2751 | 4693 keepj call s:NetrwRefreshDir(a:islocal,curdir) |
1621 | 4694 endif |
2034 | 4695 if g:netrw_fastbrowse <= 1 |
2751 | 4696 keepj call s:LocalBrowseShellCmdRefresh() |
2034 | 4697 endif |
1621 | 4698 |
4699 " call Dret("s:NetrwMarkFileCopy 1") | |
4700 return 1 | |
4701 endfun | |
4702 | |
4703 " --------------------------------------------------------------------- | |
4704 " s:NetrwMarkFileDiff: (invoked by md) This function is used to {{{2 | |
4705 " invoke vim's diff mode on the marked files. | |
4706 " Either two or three files can be so handled. | |
4707 " Uses the global marked file list. | |
4708 fun! s:NetrwMarkFileDiff(islocal) | |
4709 " call Dfunc("s:NetrwMarkFileDiff(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">") | |
4710 let curbufnr= bufnr("%") | |
1698 | 4711 |
1621 | 4712 if exists("s:netrwmarkfilelist_{curbufnr}") |
4713 let cnt = 0 | |
4714 let curdir = b:netrw_curdir | |
4715 for fname in s:netrwmarkfilelist | |
4716 let cnt= cnt + 1 | |
4717 if cnt == 1 | |
1698 | 4718 " call Decho("diffthis: fname<".fname.">") |
4719 exe "e ".fnameescape(fname) | |
1621 | 4720 diffthis |
4721 elseif cnt == 2 || cnt == 3 | |
4722 vsplit | |
4723 wincmd l | |
4724 " call Decho("diffthis: ".fname) | |
1698 | 4725 exe "e ".fnameescape(fname) |
1621 | 4726 diffthis |
4727 else | |
4728 break | |
4729 endif | |
4730 endfor | |
4731 call s:NetrwUnmarkList(curbufnr,curdir) | |
4732 endif | |
1698 | 4733 |
1621 | 4734 " call Dret("s:NetrwMarkFileDiff") |
4735 endfun | |
4736 | |
4737 " --------------------------------------------------------------------- | |
4738 " s:NetrwMarkFileEdit: (invoked by me) put marked files on arg list and start editing them {{{2 | |
4739 " Uses global markfilelist | |
4740 fun! s:NetrwMarkFileEdit(islocal) | |
4741 " call Dfunc("s:NetrwMarkFileEdit(islocal=".a:islocal.")") | |
4742 | |
4743 let curdir = b:netrw_curdir | |
4744 let curbufnr = bufnr("%") | |
4745 if exists("s:netrwmarkfilelist_{curbufnr}") | |
4746 call s:SetRexDir(a:islocal,curdir) | |
1698 | 4747 let flist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)")) |
1621 | 4748 " unmark markedfile list |
4749 " call s:NetrwUnmarkList(curbufnr,curdir) | |
4750 call s:NetrwUnmarkAll() | |
2751 | 4751 " call Decho("exe sil args ".flist) |
4752 exe "sil args ".flist | |
1621 | 4753 endif |
4754 | |
4755 " call Dret("s:NetrwMarkFileEdit") | |
4756 endfun | |
4757 | |
4758 " --------------------------------------------------------------------- | |
4759 " s:NetrwMarkFileExe: (invoked by mx) execute arbitrary command on marked files, one at a time {{{2 | |
4760 " Uses the local marked-file list. | |
4761 fun! s:NetrwMarkFileExe(islocal) | |
4762 " call Dfunc("s:NetrwMarkFileExe(islocal=".a:islocal.")") | |
4763 let svpos = netrw#NetrwSavePosn() | |
4764 let curdir = b:netrw_curdir | |
4765 let curbufnr = bufnr("%") | |
4766 | |
4767 if exists("s:netrwmarkfilelist_{curbufnr}") | |
4768 " get the command | |
4769 call inputsave() | |
4770 let cmd= input("Enter command: ","","file") | |
4771 call inputrestore() | |
4772 " call Decho("cmd<".cmd.">") | |
4773 | |
4774 " apply command to marked files. Substitute: filename -> % | |
4775 " If no %, then append a space and the filename to the command | |
4776 for fname in s:netrwmarkfilelist_{curbufnr} | |
4777 if a:islocal | |
4778 if g:netrw_keepdir | |
2034 | 4779 let fname= shellescape(netrw#WinPath(s:ComposePath(curdir,fname))) |
1621 | 4780 endif |
4781 else | |
2034 | 4782 let fname= shellescape(netrw#WinPath(b:netrw_curdir.fname)) |
1621 | 4783 endif |
4784 if cmd =~ '%' | |
4785 let xcmd= substitute(cmd,'%',fname,'g') | |
4786 else | |
4787 let xcmd= cmd.' '.fname | |
4788 endif | |
4789 if a:islocal | |
4790 " call Decho("local: xcmd<".xcmd.">") | |
4791 let ret= system(xcmd) | |
4792 else | |
4793 " call Decho("remote: xcmd<".xcmd.">") | |
4794 let ret= s:RemoteSystem(xcmd) | |
4795 endif | |
4796 if v:shell_error < 0 | |
2751 | 4797 keepj call netrw#ErrorMsg(s:ERROR,"command<".xcmd."> failed, aborting",54) |
1621 | 4798 break |
4799 else | |
4800 echo ret | |
4801 endif | |
4802 endfor | |
4803 | |
4804 " unmark marked file list | |
4805 call s:NetrwUnmarkList(curbufnr,curdir) | |
4806 | |
4807 " refresh the listing | |
2751 | 4808 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) |
4809 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 4810 else |
2751 | 4811 keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59) |
1621 | 4812 endif |
4813 | |
4814 " call Dret("s:NetrwMarkFileExe") | |
4815 endfun | |
4816 | |
4817 " --------------------------------------------------------------------- | |
4818 " s:NetrwMarkHideSfx: (invoked by mh) (un)hide files having same suffix | |
4819 " as the marked file(s) (toggles suffix presence) | |
4820 " Uses the local marked file list. | |
4821 fun! s:NetrwMarkHideSfx(islocal) | |
4822 " call Dfunc("s:NetrwMarkHideSfx(islocal=".a:islocal.")") | |
4823 let svpos = netrw#NetrwSavePosn() | |
4824 let curbufnr = bufnr("%") | |
4825 | |
4826 " s:netrwmarkfilelist_{curbufnr}: the List of marked files | |
4827 if exists("s:netrwmarkfilelist_{curbufnr}") | |
4828 | |
4829 for fname in s:netrwmarkfilelist_{curbufnr} | |
4830 " call Decho("s:NetrwMarkFileCopy: fname<".fname.">") | |
4831 " construct suffix pattern | |
4832 if fname =~ '\.' | |
4833 let sfxpat= "^.*".substitute(fname,'^.*\(\.[^. ]\+\)$','\1','') | |
4834 else | |
4835 let sfxpat= '^\%(\%(\.\)\@!.\)*$' | |
4836 endif | |
4837 " determine if its in the hiding list or not | |
4838 let inhidelist= 0 | |
4839 if g:netrw_list_hide != "" | |
4840 let itemnum = 0 | |
4841 let hidelist= split(g:netrw_list_hide,',') | |
4842 for hidepat in hidelist | |
4843 if sfxpat == hidepat | |
4844 let inhidelist= 1 | |
4845 break | |
4846 endif | |
4847 let itemnum= itemnum + 1 | |
4848 endfor | |
4849 endif | |
4850 " call Decho("fname<".fname."> inhidelist=".inhidelist." sfxpat<".sfxpat.">") | |
4851 if inhidelist | |
4852 " remove sfxpat from list | |
4853 call remove(hidelist,itemnum) | |
4854 let g:netrw_list_hide= join(hidelist,",") | |
4855 elseif g:netrw_list_hide != "" | |
4856 " append sfxpat to non-empty list | |
4857 let g:netrw_list_hide= g:netrw_list_hide.",".sfxpat | |
4858 else | |
4859 " set hiding list to sfxpat | |
4860 let g:netrw_list_hide= sfxpat | |
4861 endif | |
4862 endfor | |
4863 | |
4864 " refresh the listing | |
2751 | 4865 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) |
4866 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 4867 else |
2751 | 4868 keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59) |
1621 | 4869 endif |
4870 | |
4871 " call Dret("s:NetrwMarkHideSfx") | |
4872 endfun | |
4873 | |
4874 " --------------------------------------------------------------------- | |
4875 " s:NetrwMarkFileGrep: (invoked by mg) This function applies vimgrep to marked files {{{2 | |
4876 " Uses the global markfilelist | |
4877 fun! s:NetrwMarkFileGrep(islocal) | |
4878 " call Dfunc("s:NetrwMarkFileGrep(islocal=".a:islocal.")") | |
4879 let svpos = netrw#NetrwSavePosn() | |
4880 let curbufnr = bufnr("%") | |
4881 | |
4882 if exists("s:netrwmarkfilelist") | |
4883 " call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">") | |
1698 | 4884 let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)")) |
1621 | 4885 call s:NetrwUnmarkAll() |
4886 | |
4887 " ask user for pattern | |
4888 call inputsave() | |
4889 let pat= input("Enter pattern: ","") | |
4890 call inputrestore() | |
4891 if pat !~ '^\s' | |
4892 if pat !~ '^/' | |
4893 let pat= '/'.pat.'/' | |
4894 endif | |
4895 let pat= " ".pat | |
4896 endif | |
4897 | |
4898 " use vimgrep for both local and remote | |
4899 " call Decho("exe vimgrep".pat." ".netrwmarkfilelist) | |
2034 | 4900 try |
2152 | 4901 exe "keepj noautocmd vimgrep".pat." ".netrwmarkfilelist |
2034 | 4902 catch /^Vim\%((\a\+)\)\=:E480/ |
2751 | 4903 keepj call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76) |
2034 | 4904 " call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pattern.">") |
4905 return | |
4906 endtry | |
1621 | 4907 |
4908 2match none | |
2751 | 4909 keepj call netrw#NetrwRestorePosn(svpos) |
1621 | 4910 endif |
4911 | |
4912 " call Dret("s:NetrwMarkFileGrep") | |
4913 endfun | |
4914 | |
4915 " --------------------------------------------------------------------- | |
4916 " s:NetrwMarkFileMove: (invoked by mm) execute arbitrary command on marked files, one at a time {{{2 | |
4917 " uses the global marked file list | |
4918 " s:netrwmfloc= 0: target directory is remote | |
4919 " = 1: target directory is local | |
4920 fun! s:NetrwMarkFileMove(islocal) | |
4921 " call Dfunc("s:NetrwMarkFileMove(islocal=".a:islocal.")") | |
4922 let curdir = b:netrw_curdir | |
4923 let curbufnr = bufnr("%") | |
4924 | |
4925 " sanity check | |
4926 if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')}) | |
2751 | 4927 keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66) |
1621 | 4928 " call Dret("s:NetrwMarkFileMove") |
4929 return | |
4930 endif | |
4931 " call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')})) | |
4932 if !exists("s:netrwmftgt") | |
2751 | 4933 keepj call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67) |
1621 | 4934 " call Dret("s:NetrwMarkFileCopy 0") |
4935 return 0 | |
4936 endif | |
4937 " call Decho("sanity chk passed: s:netrwmftgt<".s:netrwmftgt.">") | |
4938 | |
4939 if a:islocal && s:netrwmftgt_islocal | |
4940 " move: local -> local | |
4941 " call Decho("move from local to local") | |
4942 " call Decho("(s:NetrwMarkFileMove) local to local move") | |
4943 if executable(g:netrw_localmovecmd) | |
4944 for fname in s:netrwmarkfilelist_{bufnr("%")} | |
4945 " call Decho("system(".g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt).")") | |
4946 let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt)) | |
4947 if v:shell_error < 0 | |
4948 call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> failed, aborting",54) | |
4949 break | |
4950 endif | |
4951 endfor | |
4952 else | |
2751 | 4953 keepj call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> is not executable!",57) |
1621 | 4954 endif |
4955 | |
4956 elseif a:islocal && !s:netrwmftgt_islocal | |
4957 " move: local -> remote | |
4958 " call Decho("move from local to remote") | |
4959 " call Decho("copy") | |
4960 let mflist= s:netrwmarkfilelist_{bufnr("%")} | |
2751 | 4961 keepj call s:NetrwMarkFileCopy(a:islocal) |
1621 | 4962 " call Decho("remove") |
4963 for fname in mflist | |
4964 let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','') | |
4965 let ok = s:NetrwLocalRmFile(b:netrw_curdir,barefname,1) | |
4966 endfor | |
4967 unlet mflist | |
4968 | |
4969 elseif !a:islocal && s:netrwmftgt_islocal | |
4970 " move: remote -> local | |
4971 " call Decho("move from remote to local") | |
4972 " call Decho("copy") | |
4973 let mflist= s:netrwmarkfilelist_{bufnr("%")} | |
2751 | 4974 keepj call s:NetrwMarkFileCopy(a:islocal) |
1621 | 4975 " call Decho("remove") |
4976 for fname in mflist | |
4977 let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','') | |
4978 let ok = s:NetrwRemoteRmFile(b:netrw_curdir,barefname,1) | |
4979 endfor | |
4980 unlet mflist | |
4981 | |
4982 elseif !a:islocal && !s:netrwmftgt_islocal | |
4983 " move: remote -> remote | |
4984 " call Decho("move from remote to remote") | |
4985 " call Decho("copy") | |
4986 let mflist= s:netrwmarkfilelist_{bufnr("%")} | |
2751 | 4987 keepj call s:NetrwMarkFileCopy(a:islocal) |
1621 | 4988 " call Decho("remove") |
4989 for fname in mflist | |
4990 let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','') | |
4991 let ok = s:NetrwRemoteRmFile(b:netrw_curdir,barefname,1) | |
4992 endfor | |
4993 unlet mflist | |
4994 endif | |
4995 | |
4996 " ------- | |
4997 " cleanup | |
4998 " ------- | |
4999 " call Decho("cleanup") | |
5000 | |
5001 " remove markings from local buffer | |
5002 call s:NetrwUnmarkList(curbufnr,curdir) " remove markings from local buffer | |
5003 | |
5004 " refresh buffers | |
5005 if !s:netrwmftgt_islocal | |
2751 | 5006 " call Decho("refresh netrwmftgt<".s:netrwmftgt.">") |
5007 keepj call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt) | |
1621 | 5008 endif |
5009 if a:islocal | |
2751 | 5010 " call Decho("refresh b:netrw_curdir<".b:netrw_curdir.">") |
5011 keepj call s:NetrwRefreshDir(a:islocal,b:netrw_curdir) | |
1621 | 5012 endif |
2034 | 5013 if g:netrw_fastbrowse <= 1 |
2751 | 5014 " call Decho("since g:netrw_fastbrowse=".g:netrw_fastbrowse.", perform shell cmd refresh") |
5015 keepj call s:LocalBrowseShellCmdRefresh() | |
2034 | 5016 endif |
1621 | 5017 |
5018 " call Dret("s:NetrwMarkFileMove") | |
5019 endfun | |
5020 | |
5021 " --------------------------------------------------------------------- | |
5022 " s:NetrwMarkFilePrint: (invoked by mp) This function prints marked files {{{2 | |
5023 " using the hardcopy command. Local marked-file list only. | |
5024 fun! s:NetrwMarkFilePrint(islocal) | |
5025 " call Dfunc("s:NetrwMarkFilePrint(islocal=".a:islocal.")") | |
5026 let curbufnr= bufnr("%") | |
5027 if exists("s:netrwmarkfilelist_{curbufnr}") | |
5028 let netrwmarkfilelist = s:netrwmarkfilelist_{curbufnr} | |
5029 let curdir = b:netrw_curdir | |
5030 call s:NetrwUnmarkList(curbufnr,curdir) | |
5031 for fname in netrwmarkfilelist | |
5032 if a:islocal | |
5033 if g:netrw_keepdir | |
5034 let fname= s:ComposePath(curdir,fname) | |
5035 endif | |
5036 else | |
5037 let fname= curdir.fname | |
5038 endif | |
5039 1split | |
5040 " the autocmds will handle both local and remote files | |
2751 | 5041 " call Decho("exe sil e ".escape(fname,' ')) |
5042 exe "sil e ".fnameescape(fname) | |
1621 | 5043 " call Decho("hardcopy") |
5044 hardcopy | |
5045 q | |
5046 endfor | |
5047 2match none | |
5048 endif | |
5049 " call Dret("s:NetrwMarkFilePrint") | |
5050 endfun | |
5051 | |
5052 " --------------------------------------------------------------------- | |
5053 " s:NetrwMarkFileRegexp: (invoked by mr) This function is used to mark {{{2 | |
5054 " files when given a regexp (for which a prompt is | |
5055 " issued). | |
5056 fun! s:NetrwMarkFileRegexp(islocal) | |
5057 " call Dfunc("s:NetrwMarkFileRegexp(islocal=".a:islocal.")") | |
5058 | |
5059 " get the regular expression | |
5060 call inputsave() | |
5061 let regexp= input("Enter regexp: ","","file") | |
5062 call inputrestore() | |
5063 | |
5064 if a:islocal | |
5065 " get the matching list of files using local glob() | |
5066 " call Decho("handle local regexp") | |
5067 let dirname = escape(b:netrw_curdir,g:netrw_glob_escape) | |
2034 | 5068 let files = glob(s:ComposePath(dirname,regexp)) |
5069 " call Decho("files<".files.">") | |
5070 let filelist= split(files,"\n") | |
1621 | 5071 |
5072 " mark the list of files | |
2034 | 5073 for fname in filelist |
5074 " call Decho("fname<".fname.">") | |
2751 | 5075 keepj call s:NetrwMarkFile(a:islocal,substitute(fname,'^.*/','','')) |
2034 | 5076 endfor |
1621 | 5077 |
5078 else | |
5079 " call Decho("handle remote regexp") | |
5080 | |
5081 " convert displayed listing into a filelist | |
5082 let eikeep = &ei | |
5083 let areg = @a | |
2152 | 5084 sil keepj %y a |
1621 | 5085 set ei=all ma |
5086 " call Decho("set ei=all ma") | |
5087 1split | |
2751 | 5088 keepj call s:NetrwEnew() |
5089 keepj call s:NetrwSafeOptions() | |
2152 | 5090 sil keepj norm! "ap |
5091 keepj 2 | |
1621 | 5092 let bannercnt= search('^" =====','W') |
2152 | 5093 exe "sil keepj 1,".bannercnt."d" |
1621 | 5094 set bt=nofile |
5095 if g:netrw_liststyle == s:LONGLIST | |
2152 | 5096 sil keepj %s/\s\{2,}\S.*$//e |
2034 | 5097 call histdel("/",-1) |
1621 | 5098 elseif g:netrw_liststyle == s:WIDELIST |
2152 | 5099 sil keepj %s/\s\{2,}/\r/ge |
2034 | 5100 call histdel("/",-1) |
1621 | 5101 elseif g:netrw_liststyle == s:TREELIST |
2152 | 5102 sil keepj %s/^| //e |
5103 sil! keepj g/^ .*$/d | |
2034 | 5104 call histdel("/",-1) |
5105 call histdel("/",-1) | |
1621 | 5106 endif |
5107 " convert regexp into the more usual glob-style format | |
5108 let regexp= substitute(regexp,'\*','.*','g') | |
5109 " call Decho("regexp<".regexp.">") | |
2152 | 5110 exe "sil! keepj v/".escape(regexp,'/')."/d" |
2034 | 5111 call histdel("/",-1) |
1621 | 5112 let filelist= getline(1,line("$")) |
5113 q! | |
5114 for filename in filelist | |
2751 | 5115 keepj call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','','')) |
1621 | 5116 endfor |
5117 unlet filelist | |
5118 let @a = areg | |
5119 let &ei = eikeep | |
5120 endif | |
5121 | |
5122 " call Dret("s:NetrwMarkFileRegexp") | |
5123 endfun | |
5124 | |
5125 " --------------------------------------------------------------------- | |
5126 " s:NetrwMarkFileSource: (invoked by ms) This function sources marked files {{{2 | |
5127 " Uses the local marked file list. | |
5128 fun! s:NetrwMarkFileSource(islocal) | |
5129 " call Dfunc("s:NetrwMarkFileSource(islocal=".a:islocal.")") | |
5130 let curbufnr= bufnr("%") | |
5131 if exists("s:netrwmarkfilelist_{curbufnr}") | |
5132 let netrwmarkfilelist = s:netrwmarkfilelist_{bufnr("%")} | |
5133 let curdir = b:netrw_curdir | |
5134 call s:NetrwUnmarkList(curbufnr,curdir) | |
5135 for fname in netrwmarkfilelist | |
5136 if a:islocal | |
5137 if g:netrw_keepdir | |
5138 let fname= s:ComposePath(curdir,fname) | |
5139 endif | |
5140 else | |
5141 let fname= curdir.fname | |
5142 endif | |
5143 " the autocmds will handle sourcing both local and remote files | |
1668 | 5144 " call Decho("exe so ".fnameescape(fname)) |
5145 exe "so ".fnameescape(fname) | |
1621 | 5146 endfor |
5147 2match none | |
5148 endif | |
5149 " call Dret("s:NetrwMarkFileSource") | |
5150 endfun | |
5151 | |
5152 " --------------------------------------------------------------------- | |
5153 " s:NetrwMarkFileTag: (invoked by mT) This function applies g:netrw_ctags to marked files {{{2 | |
5154 " Uses the global markfilelist | |
5155 fun! s:NetrwMarkFileTag(islocal) | |
5156 " call Dfunc("s:NetrwMarkFileTag(islocal=".a:islocal.")") | |
5157 let svpos = netrw#NetrwSavePosn() | |
5158 let curdir = b:netrw_curdir | |
5159 let curbufnr = bufnr("%") | |
5160 | |
5161 if exists("s:netrwmarkfilelist") | |
5162 " call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">") | |
1698 | 5163 let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "shellescape(v:val,".!a:islocal.")")) |
1621 | 5164 call s:NetrwUnmarkAll() |
5165 | |
5166 if a:islocal | |
5167 if executable(g:netrw_ctags) | |
5168 " call Decho("call system(".g:netrw_ctags." ".netrwmarkfilelist.")") | |
5169 call system(g:netrw_ctags." ".netrwmarkfilelist) | |
5170 else | |
5171 call netrw#ErrorMsg(s:ERROR,"g:netrw_ctags<".g:netrw_ctags."> is not executable!",51) | |
5172 endif | |
5173 else | |
1668 | 5174 let cmd = s:RemoteSystem(g:netrw_ctags." ".netrwmarkfilelist) |
1621 | 5175 call netrw#NetrwObtain(a:islocal,"tags") |
5176 let curdir= b:netrw_curdir | |
5177 1split | |
5178 e tags | |
5179 let path= substitute(curdir,'^\(.*\)/[^/]*$','\1/','') | |
5180 " call Decho("curdir<".curdir."> path<".path.">") | |
2152 | 5181 exe 'keepj %s/\t\(\S\+\)\t/\t'.escape(path,"/\n\r\\").'\1\t/e' |
2034 | 5182 call histdel("/",-1) |
1621 | 5183 wq! |
5184 endif | |
5185 2match none | |
5186 call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) | |
5187 call netrw#NetrwRestorePosn(svpos) | |
5188 endif | |
5189 | |
5190 " call Dret("s:NetrwMarkFileTag") | |
5191 endfun | |
5192 | |
5193 " --------------------------------------------------------------------- | |
5194 " s:NetrwMarkFileTgt: (invoked by mt) This function sets up a marked file target {{{2 | |
5195 " Sets up two variables, | |
5196 " s:netrwmftgt : holds the target directory | |
5197 " s:netrwmftgt_islocal : 0=target directory is remote | |
5198 " 1=target directory is local | |
5199 fun! s:NetrwMarkFileTgt(islocal) | |
5200 " call Dfunc("s:NetrwMarkFileTgt(islocal=".a:islocal.")") | |
5201 let svpos = netrw#NetrwSavePosn() | |
5202 let curdir = b:netrw_curdir | |
5203 let hadtgt = exists("s:netrwmftgt") | |
5204 if !exists("w:netrw_bannercnt") | |
5205 let w:netrw_bannercnt= b:netrw_bannercnt | |
5206 endif | |
5207 | |
5208 " set up target | |
5209 if line(".") < w:netrw_bannercnt | |
5210 " if cursor in banner region, use b:netrw_curdir for the target | |
5211 let s:netrwmftgt= b:netrw_curdir | |
5212 " call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">") | |
5213 | |
5214 else | |
5215 " get word under cursor. | |
5216 " * If directory, use it for the target. | |
5217 " * If file, use b:netrw_curdir for the target | |
5218 let curword= s:NetrwGetWord() | |
5219 let tgtdir = s:ComposePath(curdir,curword) | |
5220 if a:islocal && isdirectory(tgtdir) | |
5221 let s:netrwmftgt = tgtdir | |
5222 " call Decho("local isdir: s:netrwmftgt<".s:netrwmftgt.">") | |
5223 elseif !a:islocal && tgtdir =~ '/$' | |
5224 let s:netrwmftgt = tgtdir | |
5225 " call Decho("remote isdir: s:netrwmftgt<".s:netrwmftgt.">") | |
5226 else | |
5227 let s:netrwmftgt = curdir | |
5228 " call Decho("isfile: s:netrwmftgt<".s:netrwmftgt.">") | |
5229 endif | |
5230 endif | |
5231 if a:islocal | |
5232 " simplify the target (eg. /abc/def/../ghi -> /abc/ghi) | |
5233 let s:netrwmftgt= simplify(s:netrwmftgt) | |
5234 " call Decho("simplify: s:netrwmftgt<".s:netrwmftgt.">") | |
5235 endif | |
5236 if g:netrw_cygwin | |
5237 let s:netrwmftgt= substitute(system("cygpath ".shellescape(s:netrwmftgt)),'\n$','','') | |
5238 let s:netrwmftgt= substitute(s:netrwmftgt,'\n$','','') | |
5239 endif | |
5240 let s:netrwmftgt_islocal= a:islocal | |
5241 | |
2034 | 5242 if g:netrw_fastbrowse <= 1 |
1621 | 5243 call s:LocalBrowseShellCmdRefresh() |
5244 endif | |
5245 call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) | |
5246 call netrw#NetrwRestorePosn(svpos) | |
5247 if !hadtgt | |
2152 | 5248 sil! keepj norm! j |
1621 | 5249 endif |
5250 | |
5251 " call Dret("s:NetrwMarkFileTgt : netrwmftgt<".(exists("s:netrwmftgt")? s:netrwmftgt : "").">") | |
5252 endfun | |
5253 | |
5254 " --------------------------------------------------------------------- | |
1668 | 5255 " s:NetrwOpenFile: query user for a filename and open it {{{2 |
5256 fun! s:NetrwOpenFile(islocal) | |
5257 " call Dfunc("s:NetrwOpenFile(islocal=".a:islocal.")") | |
5258 call inputsave() | |
5259 let fname= input("Enter filename: ") | |
5260 call inputrestore() | |
5261 if fname !~ '[/\\]' | |
5262 if exists("b:netrw_curdir") | |
5263 if exists("g:netrw_quiet") | |
5264 let netrw_quiet_keep = g:netrw_quiet | |
5265 endif | |
5266 let g:netrw_quiet = 1 | |
5267 if b:netrw_curdir =~ '/$' | |
5268 exe "e ".fnameescape(b:netrw_curdir.fname) | |
5269 else | |
5270 exe "e ".fnameescape(b:netrw_curdir."/".fname) | |
5271 endif | |
5272 if exists("netrw_quiet_keep") | |
5273 let g:netrw_quiet= netrw_quiet_keep | |
5274 else | |
5275 unlet g:netrw_quiet | |
5276 endif | |
5277 endif | |
5278 else | |
5279 exe "e ".fnameescape(fname) | |
5280 endif | |
5281 " call Dret("s:NetrwOpenFile") | |
5282 endfun | |
5283 | |
5284 " --------------------------------------------------------------------- | |
1621 | 5285 " s:NetrwUnmarkList: delete local marked file lists and remove their contents from the global marked-file list {{{2 |
5286 fun! s:NetrwUnmarkList(curbufnr,curdir) | |
5287 " call Dfunc("s:NetrwUnmarkList(curbufnr=".a:curbufnr." curdir<".a:curdir.">)") | |
5288 | |
5289 " remove all files in local marked-file list from global list | |
5290 if exists("s:netrwmarkfilelist_{a:curbufnr}") | |
5291 for mfile in s:netrwmarkfilelist_{a:curbufnr} | |
5292 let dfile = s:ComposePath(a:curdir,mfile) " prepend directory to mfile | |
5293 let idx = index(s:netrwmarkfilelist,dfile) " get index in list of dfile | |
5294 call remove(s:netrwmarkfilelist,idx) " remove from global list | |
5295 endfor | |
5296 if s:netrwmarkfilelist == [] | |
5297 unlet s:netrwmarkfilelist | |
5298 endif | |
5299 | |
5300 " getting rid of the local marked-file lists is easy | |
5301 unlet s:netrwmarkfilelist_{a:curbufnr} | |
5302 endif | |
5303 if exists("s:netrwmarkfilemtch_{a:curbufnr}") | |
5304 unlet s:netrwmarkfilemtch_{a:curbufnr} | |
5305 endif | |
5306 2match none | |
5307 " call Dret("s:NetrwUnmarkList") | |
5308 endfun | |
5309 | |
5310 " --------------------------------------------------------------------- | |
5311 " s:NetrwUnmarkAll: remove the global marked file list and all local ones {{{2 | |
5312 fun! s:NetrwUnmarkAll() | |
5313 " call Dfunc("s:NetrwUnmarkAll()") | |
5314 if exists("s:netrwmarkfilelist") | |
5315 unlet s:netrwmarkfilelist | |
5316 endif | |
2751 | 5317 sil call s:NetrwUnmarkAll2() |
1621 | 5318 2match none |
5319 " call Dret("s:NetrwUnmarkAll") | |
5320 endfun | |
5321 | |
5322 " --------------------------------------------------------------------- | |
5323 " s:NetrwUnmarkAll2: {{{2 | |
5324 fun! s:NetrwUnmarkAll2() | |
5325 " call Dfunc("s:NetrwUnmarkAll2()") | |
5326 redir => netrwmarkfilelist_let | |
5327 let | |
5328 redir END | |
5329 let netrwmarkfilelist_list= split(netrwmarkfilelist_let,'\n') " convert let string into a let list | |
5330 call filter(netrwmarkfilelist_list,"v:val =~ '^s:netrwmarkfilelist_'") " retain only those vars that start as s:netrwmarkfilelist_ | |
5331 call map(netrwmarkfilelist_list,"substitute(v:val,'\\s.*$','','')") " remove what the entries are equal to | |
5332 for flist in netrwmarkfilelist_list | |
5333 let curbufnr= substitute(flist,'s:netrwmarkfilelist_','','') | |
5334 unlet s:netrwmarkfilelist_{curbufnr} | |
5335 unlet s:netrwmarkfilemtch_{curbufnr} | |
5336 endfor | |
5337 " call Dret("s:NetrwUnmarkAll2") | |
5338 endfun | |
5339 | |
5340 " --------------------------------------------------------------------- | |
5341 " s:NetrwUnMarkFile: {{{2 | |
5342 fun! s:NetrwUnMarkFile(islocal) | |
5343 " call Dfunc("s:NetrwUnMarkFile(islocal=".a:islocal.")") | |
5344 let svpos = netrw#NetrwSavePosn() | |
5345 let curbufnr = bufnr("%") | |
5346 | |
5347 " unmark marked file list (although I expect s:NetrwUpload() | |
5348 " to do it, I'm just making sure) | |
5349 if exists("s:netrwmarkfilelist_{bufnr('%')}") | |
5350 " call Decho("unlet'ing: s:netrwmarkfile[list|mtch]_".bufnr("%")) | |
5351 unlet s:netrwmarkfilelist | |
5352 unlet s:netrwmarkfilelist_{curbufnr} | |
5353 unlet s:netrwmarkfilemtch_{curbufnr} | |
5354 2match none | |
5355 endif | |
5356 | |
5357 " call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) | |
5358 call netrw#NetrwRestorePosn(svpos) | |
5359 " call Dret("s:NetrwUnMarkFile") | |
1121 | 5360 endfun |
5361 | |
5362 " --------------------------------------------------------------------- | |
1621 | 5363 " s:NetrwMenu: generates the menu for gvim and netrw {{{2 |
5364 fun! s:NetrwMenu(domenu) | |
5365 | |
5366 if !exists("g:NetrwMenuPriority") | |
5367 let g:NetrwMenuPriority= 80 | |
5368 endif | |
5369 | |
2751 | 5370 if has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu |
1621 | 5371 " call Dfunc("NetrwMenu(domenu=".a:domenu.")") |
5372 | |
5373 if !exists("s:netrw_menu_enabled") && a:domenu | |
5374 " call Decho("initialize menu") | |
5375 let s:netrw_menu_enabled= 1 | |
2152 | 5376 exe 'sil! menu '.g:NetrwMenuPriority.'.1 '.g:NetrwTopLvlMenu.'Help<tab><F1> <F1>' |
5377 exe 'sil! menu '.g:NetrwMenuPriority.'.5 '.g:NetrwTopLvlMenu.'-Sep1- :' | |
5378 exe 'sil! menu '.g:NetrwMenuPriority.'.6 '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>- -' | |
5379 exe 'sil! menu '.g:NetrwMenuPriority.'.7 '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x x' | |
5380 exe 'sil! menu '.g:NetrwMenuPriority.'.8.1 '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb mb' | |
5381 exe 'sil! menu '.g:NetrwMenuPriority.'.8.4 '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u u' | |
5382 exe 'sil! menu '.g:NetrwMenuPriority.'.8.5 '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U U' | |
5383 exe 'sil! menu '.g:NetrwMenuPriority.'.8.6 '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb qb' | |
5384 exe 'sil! menu '.g:NetrwMenuPriority.'.9.1 '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'." \<c-h>'" | |
5385 exe 'sil! menu '.g:NetrwMenuPriority.'.9.2 '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S S' | |
5386 exe 'sil! menu '.g:NetrwMenuPriority.'.9.3 '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh gh" | |
5387 exe 'sil! menu '.g:NetrwMenuPriority.'.9.4 '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l> \<c-l>" | |
5388 exe 'sil! menu '.g:NetrwMenuPriority.'.9.5 '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings '.":NetrwSettings\<cr>" | |
5389 exe 'sil! menu '.g:NetrwMenuPriority.'.10 '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D D' | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
5390 exe 'sil! menu '.g:NetrwMenuPriority.'.11.1 '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Create\ New\ File<tab>% %' |
2152 | 5391 exe 'sil! menu '.g:NetrwMenuPriority.'.11.1 '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr> '."\<cr>" |
5392 exe 'sil! menu '.g:NetrwMenuPriority.'.11.2 '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directory<tab>p p' | |
5393 exe 'sil! menu '.g:NetrwMenuPriority.'.11.3 '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ Window<tab>P P' | |
5394 exe 'sil! menu '.g:NetrwMenuPriority.'.11.4 '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Window<tab>o o' | |
5395 exe 'sil! menu '.g:NetrwMenuPriority.'.11.5 '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Window<tab>v v' | |
5396 exe 'sil! menu '.g:NetrwMenuPriority.'.12.1 '.g:NetrwTopLvlMenu.'Explore.Directory\ Name :Explore ' | |
5397 exe 'sil! menu '.g:NetrwMenuPriority.'.12.2 '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */ :Explore */' | |
5398 exe 'sil! menu '.g:NetrwMenuPriority.'.12.2 '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/ :Explore **/' | |
5399 exe 'sil! menu '.g:NetrwMenuPriority.'.12.3 '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (curdir\ only)<tab>:Explore\ *// :Explore *//' | |
5400 exe 'sil! menu '.g:NetrwMenuPriority.'.12.4 '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (+subdirs)<tab>:Explore\ **// :Explore **//' | |
5401 exe 'sil! menu '.g:NetrwMenuPriority.'.12.4 '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore :Nexplore<cr>' | |
5402 exe 'sil! menu '.g:NetrwMenuPriority.'.12.4 '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore :Pexplore<cr>' | |
5403 exe 'sil! menu '.g:NetrwMenuPriority.'.13 '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d d' | |
5404 exe 'sil! menu '.g:NetrwMenuPriority.'.14.1 '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ File<tab>mf mf' | |
5405 exe 'sil! menu '.g:NetrwMenuPriority.'.14.2 '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexp<tab>mr mr' | |
5406 exe 'sil! menu '.g:NetrwMenuPriority.'.14.3 '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Control<tab>a a' | |
5407 exe 'sil! menu '.g:NetrwMenuPriority.'.14.4 '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Target<tab>mc mc' | |
5408 exe 'sil! menu '.g:NetrwMenuPriority.'.14.5 '.g:NetrwTopLvlMenu.'Marked\ Files.Delete<tab>D D' | |
5409 exe 'sil! menu '.g:NetrwMenuPriority.'.14.6 '.g:NetrwTopLvlMenu.'Marked\ Files.Diff<tab>md md' | |
5410 exe 'sil! menu '.g:NetrwMenuPriority.'.14.7 '.g:NetrwTopLvlMenu.'Marked\ Files.Edit<tab>me me' | |
5411 exe 'sil! menu '.g:NetrwMenuPriority.'.14.8 '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmd<tab>mx mx' | |
5412 exe 'sil! menu '.g:NetrwMenuPriority.'.14.9 '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Target<tab>mm mm' | |
5413 exe 'sil! menu '.g:NetrwMenuPriority.'.14.10 '.g:NetrwTopLvlMenu.'Marked\ Files.Obtain<tab>O O' | |
5414 exe 'sil! menu '.g:NetrwMenuPriority.'.14.11 '.g:NetrwTopLvlMenu.'Marked\ Files.Print<tab>mp mp' | |
5415 exe 'sil! menu '.g:NetrwMenuPriority.'.14.12 '.g:NetrwTopLvlMenu.'Marked\ Files.Replace<tab>R R' | |
5416 exe 'sil! menu '.g:NetrwMenuPriority.'.14.13 '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Target<tab>mt mt' | |
5417 exe 'sil! menu '.g:NetrwMenuPriority.'.14.14 '.g:NetrwTopLvlMenu.'Marked\ Files.Tag<tab>mT mT' | |
5418 exe 'sil! menu '.g:NetrwMenuPriority.'.14.15 '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompress<tab>mz mz' | |
5419 exe 'sil! menu '.g:NetrwMenuPriority.'.15 '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O O' | |
5420 exe 'sil! menu '.g:NetrwMenuPriority.'.16.1 '.g:NetrwTopLvlMenu.'Style.Listing\ Style\ (thin-long-wide-tree)<tab>i i' | |
5421 exe 'sil! menu '.g:NetrwMenuPriority.'.16.2 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show<tab>a a' | |
5422 exe 'sil! menu '.g:NetrwMenuPriority.'.16.3 '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r r" | |
5423 exe 'sil! menu '.g:NetrwMenuPriority.'.16.4 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method\ (name-time-size)<tab>s s' | |
5424 exe 'sil! menu '.g:NetrwMenuPriority.'.17 '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R R' | |
5425 exe 'sil! menu '.g:NetrwMenuPriority.'.18 '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c c' | |
2034 | 5426 call s:NetrwBookmarkMenu() " provide some history! uses priorities 2,3, reserves 4, 8.2.x |
1621 | 5427 let s:netrw_menucnt= 28 |
5428 | |
5429 elseif !a:domenu | |
5430 let s:netrwcnt = 0 | |
5431 let curwin = winnr() | |
5432 windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif | |
5433 exe curwin."wincmd w" | |
5434 | |
5435 if s:netrwcnt <= 1 | |
5436 " call Decho("clear menus") | |
2152 | 5437 exe 'sil! unmenu '.g:NetrwTopLvlMenu |
2751 | 5438 " call Decho('exe sil! unmenu '.g:NetrwTopLvlMenu.'*') |
2152 | 5439 sil! unlet s:netrw_menu_enabled |
1621 | 5440 endif |
5441 endif | |
5442 " call Dret("NetrwMenu") | |
5443 endif | |
5444 | |
5445 endfun | |
5446 | |
5447 " --------------------------------------------------------------------- | |
5448 " s:NetrwObtain: obtain file under cursor or from markfile list {{{2 | |
5449 " Used by the O maps (as <SID>NetrwObtain()) | |
5450 fun! s:NetrwObtain(islocal) | |
5451 " call Dfunc("NetrwObtain(islocal=".a:islocal.")") | |
5452 | |
5453 if exists("s:netrwmarkfilelist_{bufnr('%')}") | |
2034 | 5454 let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://' |
5455 call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')}) | |
1621 | 5456 call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir) |
5457 else | |
5458 call netrw#NetrwObtain(a:islocal,expand("<cWORD>")) | |
5459 endif | |
5460 | |
5461 " call Dret("NetrwObtain") | |
5462 endfun | |
5463 | |
5464 " --------------------------------------------------------------------- | |
5465 " netrw#NetrwObtain: {{{2 | |
5466 " netrw#NetrwObtain(islocal,fname[,tgtdirectory]) | |
5467 " islocal=0 obtain from remote source | |
5468 " =1 obtain from local source | |
5469 " fname : a filename or a list of filenames | |
5470 " tgtdir : optional place where files are to go (not present, uses getcwd()) | |
5471 fun! netrw#NetrwObtain(islocal,fname,...) | |
5472 " call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0) | |
5473 " NetrwStatusLine support - for obtaining support | |
5474 | |
5475 if type(a:fname) == 1 | |
5476 let fnamelist= [ a:fname ] | |
5477 elseif type(a:fname) == 3 | |
5478 let fnamelist= a:fname | |
5479 else | |
5480 call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62) | |
5481 " call Dret("netrw#NetrwObtain") | |
5482 return | |
5483 endif | |
5484 " call Decho("fnamelist<".string(fnamelist).">") | |
5485 if a:0 > 0 | |
5486 let tgtdir= a:1 | |
5487 else | |
5488 let tgtdir= getcwd() | |
5489 endif | |
5490 " call Decho("tgtdir<".tgtdir.">") | |
5491 | |
2034 | 5492 if exists("b:netrw_islocal") && b:netrw_islocal |
1702 | 5493 " obtain a file from local b:netrw_curdir to (local) tgtdir |
5494 " call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir) | |
1621 | 5495 if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir |
5496 let topath= s:ComposePath(tgtdir,"") | |
5497 if (has("win32") || has("win95") || has("win64") || has("win16")) | |
5498 " transfer files one at time | |
1702 | 5499 " call Decho("transfer files one at a time") |
1621 | 5500 for fname in fnamelist |
1668 | 5501 " call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")") |
5502 call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath)) | |
1621 | 5503 endfor |
5504 else | |
5505 " transfer files with one command | |
1702 | 5506 " call Decho("transfer files with one command") |
5507 let filelist= join(map(deepcopy(fnamelist),"shellescape(v:val)")) | |
1621 | 5508 " call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")") |
5509 call system(g:netrw_localcopycmd." ".filelist." ".shellescape(topath)) | |
5510 endif | |
5511 elseif !exists("b:netrw_curdir") | |
5512 call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36) | |
5513 else | |
5514 call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37) | |
5515 endif | |
5516 | |
5517 else | |
1702 | 5518 " obtain files from remote b:netrw_curdir to local tgtdir |
5519 " call Decho("obtain a file from remote ".b:netrw_curdir." to ".tgtdir) | |
1621 | 5520 if type(a:fname) == 1 |
5521 call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname) | |
5522 endif | |
5523 call s:NetrwMethod(b:netrw_curdir) | |
5524 | |
5525 if b:netrw_method == 4 | |
5526 " obtain file using scp | |
5527 " call Decho("obtain via scp (method#4)") | |
5528 if exists("g:netrw_port") && g:netrw_port != "" | |
5529 let useport= " ".g:netrw_scpport." ".g:netrw_port | |
5530 else | |
5531 let useport= "" | |
5532 endif | |
5533 if b:netrw_fname =~ '/' | |
5534 let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','') | |
5535 else | |
5536 let path= "" | |
5537 endif | |
1698 | 5538 let filelist= join(map(deepcopy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1)')) |
1668 | 5539 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)) |
5540 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1) | |
1621 | 5541 |
5542 elseif b:netrw_method == 2 | |
5543 " obtain file using ftp + .netrc | |
5544 " call Decho("obtain via ftp+.netrc (method #2)") | |
2751 | 5545 call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars() |
1621 | 5546 let tmpbufnr= bufnr("%") |
5547 setlocal ff=unix | |
5548 if exists("g:netrw_ftpmode") && g:netrw_ftpmode != "" | |
2152 | 5549 keepj put =g:netrw_ftpmode |
1621 | 5550 " call Decho("filter input: ".getline('$')) |
5551 endif | |
5552 | |
5553 if exists("b:netrw_fname") && b:netrw_fname != "" | |
5554 call setline(line("$")+1,'cd "'.b:netrw_fname.'"') | |
5555 " call Decho("filter input: ".getline('$')) | |
5556 endif | |
5557 | |
5558 if exists("g:netrw_ftpextracmd") | |
2152 | 5559 keepj put =g:netrw_ftpextracmd |
1621 | 5560 " call Decho("filter input: ".getline('$')) |
5561 endif | |
5562 for fname in fnamelist | |
5563 call setline(line("$")+1,'get "'.fname.'"') | |
5564 " call Decho("filter input: ".getline('$')) | |
5565 endfor | |
5566 if exists("g:netrw_port") && g:netrw_port != "" | |
2751 | 5567 " call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) |
5568 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) | |
1621 | 5569 else |
2751 | 5570 " call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) |
5571 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) | |
1621 | 5572 endif |
5573 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) | |
5574 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' | |
5575 let debugkeep= &debug | |
5576 setlocal debug=msg | |
5577 call netrw#ErrorMsg(s:ERROR,getline(1),4) | |
5578 let &debug= debugkeep | |
5579 endif | |
5580 | |
5581 elseif b:netrw_method == 3 | |
5582 " obtain with ftp + machine, id, passwd, and fname (ie. no .netrc) | |
5583 " call Decho("obtain via ftp+mipf (method #3)") | |
2751 | 5584 call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars() |
1621 | 5585 let tmpbufnr= bufnr("%") |
5586 setlocal ff=unix | |
5587 | |
5588 if exists("g:netrw_port") && g:netrw_port != "" | |
2152 | 5589 keepj put ='open '.g:netrw_machine.' '.g:netrw_port |
1621 | 5590 " call Decho("filter input: ".getline('$')) |
5591 else | |
2152 | 5592 keepj put ='open '.g:netrw_machine |
1621 | 5593 " call Decho("filter input: ".getline('$')) |
5594 endif | |
5595 | |
5596 if exists("g:netrw_ftp") && g:netrw_ftp == 1 | |
2152 | 5597 keepj put =g:netrw_uid |
1621 | 5598 " call Decho("filter input: ".getline('$')) |
2152 | 5599 keepj put ='\"'.s:netrw_passwd.'\"' |
1621 | 5600 " call Decho("filter input: ".getline('$')) |
5601 else | |
2152 | 5602 keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' |
1621 | 5603 " call Decho("filter input: ".getline('$')) |
5604 endif | |
5605 | |
5606 if exists("g:netrw_ftpmode") && g:netrw_ftpmode != "" | |
2152 | 5607 keepj put =g:netrw_ftpmode |
1621 | 5608 " call Decho("filter input: ".getline('$')) |
5609 endif | |
5610 | |
5611 if exists("b:netrw_fname") && b:netrw_fname != "" | |
2152 | 5612 keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"') |
1621 | 5613 " call Decho("filter input: ".getline('$')) |
5614 endif | |
5615 | |
5616 if exists("g:netrw_ftpextracmd") | |
2152 | 5617 keepj put =g:netrw_ftpextracmd |
1621 | 5618 " call Decho("filter input: ".getline('$')) |
5619 endif | |
5620 | |
5621 if exists("g:netrw_ftpextracmd") | |
2152 | 5622 keepj put =g:netrw_ftpextracmd |
1621 | 5623 " call Decho("filter input: ".getline('$')) |
5624 endif | |
5625 for fname in fnamelist | |
2152 | 5626 keepj call setline(line("$")+1,'get "'.fname.'"') |
1621 | 5627 endfor |
5628 " call Decho("filter input: ".getline('$')) | |
5629 | |
5630 " perform ftp: | |
5631 " -i : turns off interactive prompting from ftp | |
5632 " -n unix : DON'T use <.netrc>, even though it exists | |
5633 " -n win32: quit being obnoxious about password | |
2152 | 5634 keepj norm! 1Gdd |
2751 | 5635 " call Decho("executing: %!".s:netrw_ftp_cmd." -i -n") |
5636 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i -n" | |
1621 | 5637 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) |
5638 if getline(1) !~ "^$" | |
5639 " call Decho("error<".getline(1).">") | |
5640 if !exists("g:netrw_quiet") | |
2751 | 5641 keepj call netrw#ErrorMsg(s:ERROR,getline(1),5) |
1621 | 5642 endif |
5643 endif | |
2034 | 5644 elseif !exists("b:netrw_method") || b:netrw_method < 0 |
5645 " call Dfunc("netrw#NetrwObtain : unsupported method") | |
5646 return | |
5647 endif | |
5648 | |
5649 " restore status line | |
5650 if type(a:fname) == 1 && exists("s:netrw_users_stl") | |
2751 | 5651 keepj call s:SetupNetrwStatusLine(s:netrw_users_stl) |
1621 | 5652 endif |
5653 | |
5654 endif | |
5655 | |
5656 " cleanup | |
5657 if exists("tmpbufnr") | |
5658 if bufnr("%") != tmpbufnr | |
5659 exe tmpbufnr."bw!" | |
5660 else | |
5661 q! | |
5662 endif | |
5663 endif | |
5664 | |
5665 " call Dret("netrw#NetrwObtain") | |
5666 endfun | |
5667 | |
5668 " --------------------------------------------------------------------- | |
5669 " s:NetrwPrevWinOpen: open file/directory in previous window. {{{2 | |
5670 " If there's only one window, then the window will first be split. | |
5671 " Returns: | |
5672 " choice = 0 : didn't have to choose | |
5673 " choice = 1 : saved modified file in window first | |
5674 " choice = 2 : didn't save modified file, opened window | |
5675 " choice = 3 : cancel open | |
5676 fun! s:NetrwPrevWinOpen(islocal) | |
5677 " call Dfunc("NetrwPrevWinOpen(islocal=".a:islocal.")") | |
5678 | |
5679 " grab a copy of the b:netrw_curdir to pass it along to newly split windows | |
5680 let curdir = b:netrw_curdir | |
5681 | |
5682 " get last window number and the word currently under the cursor | |
5683 let lastwinnr = winnr("$") | |
5684 let curword = s:NetrwGetWord() | |
5685 let choice = 0 | |
5686 " call Decho("lastwinnr=".lastwinnr." curword<".curword.">") | |
5687 | |
5688 let didsplit = 0 | |
5689 if lastwinnr == 1 | |
5690 " if only one window, open a new one first | |
5691 " call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")") | |
5692 if g:netrw_preview | |
5693 " call Decho("exe ".(g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s") | |
5694 exe (g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s" | |
5695 else | |
5696 " call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s") | |
5697 exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s" | |
5698 endif | |
5699 let didsplit = 1 | |
5700 | |
5701 else | |
2751 | 5702 keepj call s:SaveBufVars() |
1621 | 5703 " call Decho("wincmd p") |
5704 wincmd p | |
2751 | 5705 keepj call s:RestoreBufVars() |
1621 | 5706 " if the previous window's buffer has been changed (is modified), |
5707 " and it doesn't appear in any other extant window, then ask the | |
5708 " user if s/he wants to abandon modifications therein. | |
5709 let bnr = winbufnr(0) | |
5710 let bnrcnt = 0 | |
5711 if &mod | |
5712 " call Decho("detected: prev window's buffer has been modified: bnr=".bnr." winnr#".winnr()) | |
5713 let eikeep= &ei | |
5714 set ei=all | |
5715 windo if winbufnr(0) == bnr | let bnrcnt=bnrcnt+1 | endif | |
5716 exe bnr."wincmd p" | |
5717 let &ei= eikeep | |
5718 " call Decho("bnr=".bnr." bnrcnt=".bnrcnt." buftype=".&bt." winnr#".winnr()) | |
5719 if bnrcnt == 1 | |
2034 | 5720 let bufname = bufname(winbufnr(winnr())) |
5721 let choice = confirm("Save modified file<".bufname.">?","&Yes\n&No\n&Cancel") | |
1621 | 5722 " call Decho("bufname<".bufname."> choice=".choice." winnr#".winnr()) |
5723 | |
5724 if choice == 1 | |
5725 " Yes -- write file & then browse | |
5726 let v:errmsg= "" | |
2751 | 5727 sil w |
1621 | 5728 if v:errmsg != "" |
5729 call netrw#ErrorMsg(s:ERROR,"unable to write <".bufname.">!",30) | |
5730 if didsplit | |
5731 q | |
5732 else | |
5733 wincmd p | |
5734 endif | |
5735 " call Dret("NetrwPrevWinOpen ".choice." : unable to write <".bufname.">") | |
5736 return choice | |
5737 endif | |
5738 | |
5739 elseif choice == 2 | |
5740 " No -- don't worry about changed file, just browse anyway | |
5741 setlocal nomod | |
2751 | 5742 keepj call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31) |
1621 | 5743 wincmd p |
5744 | |
5745 else | |
5746 " Cancel -- don't do this | |
5747 if didsplit | |
5748 q | |
5749 else | |
5750 wincmd p | |
5751 endif | |
5752 " call Dret("NetrwPrevWinOpen ".choice." : cancelled") | |
5753 return choice | |
5754 endif | |
5755 endif | |
5756 endif | |
5757 endif | |
5758 | |
5759 " restore b:netrw_curdir (window split/enew may have lost it) | |
5760 let b:netrw_curdir= curdir | |
5761 if a:islocal < 2 | |
5762 if a:islocal | |
5763 call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(a:islocal,curword)) | |
5764 else | |
5765 call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,curword)) | |
5766 endif | |
5767 endif | |
5768 " call Dret("NetrwPrevWinOpen ".choice) | |
5769 return choice | |
5770 endfun | |
5771 | |
5772 " --------------------------------------------------------------------- | |
5773 " s:NetrwUpload: load fname to tgt (used by NetrwMarkFileCopy()) {{{2 | |
5774 " Always assumed to be local -> remote | |
5775 " call s:NetrwUpload(filename, target) | |
5776 " call s:NetrwUpload(filename, target, fromdirectory) | |
5777 fun! s:NetrwUpload(fname,tgt,...) | |
5778 " call Dfunc("s:NetrwUpload(fname<".((type(a:fname) == 1)? a:fname : string(a:fname))."> tgt<".a:tgt.">) a:0=".a:0) | |
5779 | |
5780 if a:tgt =~ '^\a\+://' | |
5781 let tgtdir= substitute(a:tgt,'^\a\+://[^/]\+/\(.\{-}\)$','\1','') | |
5782 else | |
5783 let tgtdir= substitute(a:tgt,'^\(.*\)/[^/]*$','\1','') | |
5784 endif | |
5785 " call Decho("tgtdir<".tgtdir.">") | |
5786 | |
5787 if a:0 > 0 | |
5788 let fromdir= a:1 | |
5789 else | |
5790 let fromdir= getcwd() | |
5791 endif | |
5792 " call Decho("fromdir<".fromdir.">") | |
5793 | |
5794 if type(a:fname) == 1 | |
5795 " handle uploading a single file using NetWrite | |
5796 " call Decho("handle uploading a single file via NetWrite") | |
5797 1split | |
1698 | 5798 " call Decho("exe e ".fnameescape(a:fname)) |
5799 exe "e ".fnameescape(a:fname) | |
1621 | 5800 " call Decho("now locally editing<".expand("%").">, has ".line("$")." lines") |
5801 if a:tgt =~ '/$' | |
5802 let wfname= substitute(a:fname,'^.*/','','') | |
1668 | 5803 " call Decho("exe w! ".fnameescape(wfname)) |
1698 | 5804 exe "w! ".fnameescape(a:tgt.wfname) |
1621 | 5805 else |
1668 | 5806 " call Decho("writing local->remote: exe w ".fnameescape(a:tgt)) |
5807 exe "w ".fnameescape(a:tgt) | |
1621 | 5808 " call Decho("done writing local->remote") |
5809 endif | |
5810 q! | |
5811 | |
5812 elseif type(a:fname) == 3 | |
5813 " handle uploading a list of files via scp | |
5814 " call Decho("handle uploading a list of files via scp") | |
5815 let curdir= getcwd() | |
5816 if a:tgt =~ '^scp:' | |
2751 | 5817 exe "keepjumps sil lcd ".fnameescape(fromdir) |
1698 | 5818 let filelist= deepcopy(s:netrwmarkfilelist_{bufnr('%')}) |
5819 let args = join(map(filelist,"shellescape(v:val, 1)")) | |
1621 | 5820 if exists("g:netrw_port") && g:netrw_port != "" |
5821 let useport= " ".g:netrw_scpport." ".g:netrw_port | |
5822 else | |
5823 let useport= "" | |
5824 endif | |
5825 let machine = substitute(a:tgt,'^scp://\([^/:]\+\).*$','\1','') | |
5826 let tgt = substitute(a:tgt,'^scp://[^/]\+/\(.*\)$','\1','') | |
1668 | 5827 " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1)) |
5828 exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1) | |
2751 | 5829 exe "keepjumps sil lcd ".fnameescape(curdir) |
1621 | 5830 |
5831 elseif a:tgt =~ '^ftp:' | |
5832 call s:NetrwMethod(a:tgt) | |
5833 | |
5834 if b:netrw_method == 2 | |
5835 " handle uploading a list of files via ftp+.netrc | |
5836 let netrw_fname = b:netrw_fname | |
2152 | 5837 sil keepj new |
1621 | 5838 " call Decho("filter input window#".winnr()) |
5839 | |
2152 | 5840 keepj put =g:netrw_ftpmode |
1621 | 5841 " call Decho("filter input: ".getline('$')) |
5842 | |
5843 if exists("g:netrw_ftpextracmd") | |
2152 | 5844 keepj put =g:netrw_ftpextracmd |
1621 | 5845 " call Decho("filter input: ".getline('$')) |
5846 endif | |
5847 | |
2152 | 5848 keepj call setline(line("$")+1,'lcd "'.fromdir.'"') |
1621 | 5849 " call Decho("filter input: ".getline('$')) |
5850 | |
2751 | 5851 if tgtdir == "" |
5852 let tgtdir= '/' | |
5853 endif | |
2152 | 5854 keepj call setline(line("$")+1,'cd "'.tgtdir.'"') |
1621 | 5855 " call Decho("filter input: ".getline('$')) |
5856 | |
5857 for fname in a:fname | |
2152 | 5858 keepj call setline(line("$")+1,'put "'.fname.'"') |
1621 | 5859 " call Decho("filter input: ".getline('$')) |
5860 endfor | |
5861 | |
5862 if exists("g:netrw_port") && g:netrw_port != "" | |
2751 | 5863 " call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) |
5864 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) | |
1621 | 5865 else |
5866 " call Decho("filter input window#".winnr()) | |
2751 | 5867 " call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) |
5868 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) | |
1621 | 5869 endif |
5870 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) | |
2152 | 5871 sil keepj g/Local directory now/d |
2034 | 5872 call histdel("/",-1) |
1621 | 5873 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' |
5874 call netrw#ErrorMsg(s:ERROR,getline(1),14) | |
5875 else | |
5876 bw!|q | |
5877 endif | |
5878 | |
5879 elseif b:netrw_method == 3 | |
5880 " upload with ftp + machine, id, passwd, and fname (ie. no .netrc) | |
5881 let netrw_fname= b:netrw_fname | |
2751 | 5882 keepj call s:SaveBufVars()|sil keepj new|keepj call s:RestoreBufVars() |
1621 | 5883 let tmpbufnr= bufnr("%") |
5884 setlocal ff=unix | |
5885 | |
5886 if exists("g:netrw_port") && g:netrw_port != "" | |
2152 | 5887 keepj put ='open '.g:netrw_machine.' '.g:netrw_port |
1621 | 5888 " call Decho("filter input: ".getline('$')) |
5889 else | |
2152 | 5890 keepj put ='open '.g:netrw_machine |
1621 | 5891 " call Decho("filter input: ".getline('$')) |
5892 endif | |
5893 | |
5894 if exists("g:netrw_ftp") && g:netrw_ftp == 1 | |
2152 | 5895 keepj put =g:netrw_uid |
1621 | 5896 " call Decho("filter input: ".getline('$')) |
2152 | 5897 keepj call setline(line("$")+1,'"'.s:netrw_passwd.'"') |
1621 | 5898 " call Decho("filter input: ".getline('$')) |
5899 else | |
2152 | 5900 keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' |
1621 | 5901 " call Decho("filter input: ".getline('$')) |
5902 endif | |
5903 | |
2152 | 5904 keepj call setline(line("$")+1,'lcd "'.fromdir.'"') |
1621 | 5905 " call Decho("filter input: ".getline('$')) |
5906 | |
5907 if exists("b:netrw_fname") && b:netrw_fname != "" | |
2152 | 5908 keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"') |
1621 | 5909 " call Decho("filter input: ".getline('$')) |
5910 endif | |
5911 | |
5912 if exists("g:netrw_ftpextracmd") | |
2152 | 5913 keepj put =g:netrw_ftpextracmd |
1621 | 5914 " call Decho("filter input: ".getline('$')) |
5915 endif | |
5916 | |
5917 for fname in a:fname | |
2152 | 5918 keepj call setline(line("$")+1,'put "'.fname.'"') |
1621 | 5919 " call Decho("filter input: ".getline('$')) |
5920 endfor | |
5921 | |
5922 " perform ftp: | |
5923 " -i : turns off interactive prompting from ftp | |
5924 " -n unix : DON'T use <.netrc>, even though it exists | |
5925 " -n win32: quit being obnoxious about password | |
2152 | 5926 keepj norm! 1Gdd |
2751 | 5927 " call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i -n") |
5928 exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i -n" | |
1621 | 5929 " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) |
2152 | 5930 sil keepj g/Local directory now/d |
2034 | 5931 call histdel("/",-1) |
1621 | 5932 if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' |
5933 let debugkeep= &debug | |
5934 setlocal debug=msg | |
5935 call netrw#ErrorMsg(s:ERROR,getline(1),15) | |
5936 let &debug = debugkeep | |
5937 let mod = 1 | |
5938 else | |
5939 bw!|q | |
5940 endif | |
2034 | 5941 elseif !exists("b:netrw_method") || b:netrw_method < 0 |
5942 " call Dfunc("netrw#NetrwUpload : unsupported method") | |
5943 return | |
1621 | 5944 endif |
5945 else | |
5946 call netrw#ErrorMsg(s:ERROR,"can't obtain files with protocol from<".a:tgt.">",63) | |
5947 endif | |
5948 endif | |
5949 | |
5950 " call Dret("s:NetrwUpload") | |
5951 endfun | |
5952 | |
5953 " --------------------------------------------------------------------- | |
5954 " s:NetrwPreview: {{{2 | |
5955 fun! s:NetrwPreview(path) range | |
5956 " call Dfunc("NetrwPreview(path<".a:path.">)") | |
2751 | 5957 keepj call s:NetrwOptionSave("s:") |
5958 keepj call s:NetrwSafeOptions() | |
1621 | 5959 if has("quickfix") |
5960 if !isdirectory(a:path) | |
2152 | 5961 if g:netrw_preview && !g:netrw_alto |
5962 let pvhkeep= &pvh | |
5963 let &pvh = winwidth(0) - g:netrw_winsize | |
5964 endif | |
5965 exe (g:netrw_alto? "top " : "bot ").(g:netrw_preview? "vert " : "")."pedit ".fnameescape(a:path) | |
5966 if exists("pvhkeep") | |
5967 let &pvh= pvhkeep | |
5968 endif | |
1621 | 5969 elseif !exists("g:netrw_quiet") |
2751 | 5970 keepj call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38) |
1621 | 5971 endif |
5972 elseif !exists("g:netrw_quiet") | |
2751 | 5973 keepj call netrw#ErrorMsg(s:WARNING,"sorry, to preview your vim needs the quickfix feature compiled in",39) |
5974 endif | |
5975 keepj call s:NetrwOptionRestore("s:") | |
1621 | 5976 " call Dret("NetrwPreview") |
5977 endfun | |
5978 | |
5979 " --------------------------------------------------------------------- | |
5980 " s:NetrwRefresh: {{{2 | |
5981 fun! s:NetrwRefresh(islocal,dirname) | |
5982 " call Dfunc("NetrwRefresh(islocal<".a:islocal.">,dirname=".a:dirname.") hide=".g:netrw_hide." sortdir=".g:netrw_sort_direction) | |
5983 " at the current time (Mar 19, 2007) all calls to NetrwRefresh() call NetrwBrowseChgDir() first. | |
5984 " NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here. | |
5985 " Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself. | |
5986 setlocal ma noro | |
5987 " call Decho("setlocal ma noro") | |
5988 " call Decho("clear buffer<".expand("%")."> with :%d") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
5989 sil! keepj %d |
1621 | 5990 if a:islocal |
2751 | 5991 keepj call netrw#LocalBrowseCheck(a:dirname) |
1621 | 5992 else |
2751 | 5993 keepj call s:NetrwBrowse(a:islocal,a:dirname) |
5994 endif | |
5995 keepj call netrw#NetrwRestorePosn() | |
1621 | 5996 |
5997 " restore file marks | |
5998 if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != "" | |
5999 " call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/") | |
6000 exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/" | |
6001 else | |
6002 " call Decho("2match none") | |
6003 2match none | |
6004 endif | |
6005 | |
6006 " redraw! | |
6007 " call Dret("NetrwRefresh") | |
6008 endfun | |
6009 | |
6010 " --------------------------------------------------------------------- | |
6011 " s:NetrwRefreshDir: refreshes a directory by name {{{2 | |
6012 " Called by NetrwMarkFileCopy() | |
6013 " Interfaces to s:NetrwRefresh() and s:LocalBrowseShellCmdRefresh() | |
6014 fun! s:NetrwRefreshDir(islocal,dirname) | |
6015 " call Dfunc("s:NetrwRefreshDir(islocal=".a:islocal." dirname<".a:dirname.">) fastbrowse=".g:netrw_fastbrowse) | |
6016 if g:netrw_fastbrowse == 0 | |
6017 " slowest mode (keep buffers refreshed, local or remote) | |
6018 " call Decho("slowest mode: keep buffers refreshed, local or remote") | |
6019 let tgtwin= bufwinnr(a:dirname) | |
6020 " call Decho("tgtwin= bufwinnr(".a:dirname.")=".tgtwin) | |
6021 | |
6022 if tgtwin > 0 | |
6023 " tgtwin is being displayed, so refresh it | |
6024 let curwin= winnr() | |
6025 " call Decho("refresh tgtwin#".tgtwin." (curwin#".curwin.")") | |
6026 exe tgtwin."wincmd w" | |
2751 | 6027 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) |
1621 | 6028 exe curwin."wincmd w" |
6029 | |
6030 elseif bufnr(a:dirname) > 0 | |
6031 let bn= bufnr(a:dirname) | |
6032 " call Decho("bd bufnr(".a:dirname.")=".bn) | |
2751 | 6033 exe "sil bd ".bn |
1621 | 6034 endif |
6035 | |
6036 elseif g:netrw_fastbrowse <= 1 | |
6037 " call Decho("medium-speed mode: refresh local buffers only") | |
2751 | 6038 keepj call s:LocalBrowseShellCmdRefresh() |
1621 | 6039 endif |
6040 " call Dret("s:NetrwRefreshDir") | |
6041 endfun | |
6042 | |
6043 " --------------------------------------------------------------------- | |
6044 " s:NetrwSetSort: sets up the sort based on the g:netrw_sort_sequence {{{2 | |
6045 " What this function does is to compute a priority for the patterns | |
6046 " in the g:netrw_sort_sequence. It applies a substitute to any | |
6047 " "files" that satisfy each pattern, putting the priority / in | |
6048 " front. An "*" pattern handles the default priority. | |
6049 fun! s:NetrwSetSort() | |
6050 " call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt) | |
6051 if w:netrw_liststyle == s:LONGLIST | |
6052 let seqlist = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge') | |
6053 else | |
6054 let seqlist = g:netrw_sort_sequence | |
6055 endif | |
6056 " sanity check -- insure that * appears somewhere | |
6057 if seqlist == "" | |
6058 let seqlist= '*' | |
6059 elseif seqlist !~ '\*' | |
6060 let seqlist= seqlist.',*' | |
6061 endif | |
6062 let priority = 1 | |
6063 while seqlist != "" | |
6064 if seqlist =~ ',' | |
6065 let seq = substitute(seqlist,',.*$','','e') | |
6066 let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e') | |
6067 else | |
6068 let seq = seqlist | |
6069 let seqlist = "" | |
6070 endif | |
6071 if priority < 10 | |
2034 | 6072 let spriority= "00".priority.g:netrw_sepchr |
1621 | 6073 elseif priority < 100 |
2034 | 6074 let spriority= "0".priority.g:netrw_sepchr |
1621 | 6075 else |
2034 | 6076 let spriority= priority.g:netrw_sepchr |
1621 | 6077 endif |
6078 " call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">") | |
6079 | |
6080 " sanity check | |
6081 if w:netrw_bannercnt > line("$") | |
6082 " apparently no files were left after a Hiding pattern was used | |
6083 " call Dret("SetSort : no files left after hiding") | |
6084 return | |
6085 endif | |
6086 if seq == '*' | |
6087 let starpriority= spriority | |
6088 else | |
2152 | 6089 exe 'sil keepj '.w:netrw_bannercnt.',$g/'.seq.'/s/^/'.spriority.'/' |
2034 | 6090 call histdel("/",-1) |
1621 | 6091 " sometimes multiple sorting patterns will match the same file or directory. |
6092 " The following substitute is intended to remove the excess matches. | |
2152 | 6093 exe 'sil keepj '.w:netrw_bannercnt.',$g/^\d\{3}'.g:netrw_sepchr.'\d\{3}\//s/^\d\{3}'.g:netrw_sepchr.'\(\d\{3}\/\).\@=/\1/e' |
2751 | 6094 keepj call histdel("/",-1) |
1621 | 6095 endif |
6096 let priority = priority + 1 | |
6097 endwhile | |
6098 if exists("starpriority") | |
2152 | 6099 exe 'sil keepj '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/' |
2751 | 6100 keepj call histdel("/",-1) |
1621 | 6101 endif |
6102 | |
6103 " Following line associated with priority -- items that satisfy a priority | |
6104 " pattern get prefixed by ###/ which permits easy sorting by priority. | |
6105 " Sometimes files can satisfy multiple priority patterns -- only the latest | |
6106 " priority pattern needs to be retained. So, at this point, these excess | |
6107 " priority prefixes need to be removed, but not directories that happen to | |
6108 " be just digits themselves. | |
2152 | 6109 exe 'sil keepj '.w:netrw_bannercnt.',$s/^\(\d\{3}'.g:netrw_sepchr.'\)\%(\d\{3}'.g:netrw_sepchr.'\)\+\ze./\1/e' |
2751 | 6110 keepj call histdel("/",-1) |
1621 | 6111 |
6112 " call Dret("SetSort") | |
6113 endfun | |
6114 | |
6115 " ===================================================================== | |
6116 " s:NetrwSortStyle: change sorting style (name - time - size) and refresh display {{{2 | |
6117 fun! s:NetrwSortStyle(islocal) | |
6118 " call Dfunc("s:NetrwSortStyle(islocal=".a:islocal.") netrw_sort_by<".g:netrw_sort_by.">") | |
2751 | 6119 keepj call s:NetrwSaveWordPosn() |
1621 | 6120 let svpos= netrw#NetrwSavePosn() |
6121 | |
6122 let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name' | |
2152 | 6123 keepj norm! 0 |
2751 | 6124 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) |
6125 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 6126 |
6127 " call Dret("s:NetrwSortStyle : netrw_sort_by<".g:netrw_sort_by.">") | |
6128 endfun | |
6129 | |
6130 " --------------------------------------------------------------------- | |
6131 " s:NetrwSplit: mode {{{2 | |
6132 " =0 : net and o | |
6133 " =1 : net and t | |
6134 " =2 : net and v | |
6135 " =3 : local and o | |
6136 " =4 : local and t | |
6137 " =5 : local and v | |
6138 fun! s:NetrwSplit(mode) | |
6139 " call Dfunc("s:NetrwSplit(mode=".a:mode.") alto=".g:netrw_alto." altv=".g:netrw_altv) | |
6140 | |
6141 call s:SaveWinVars() | |
6142 | |
6143 if a:mode == 0 | |
6144 " remote and o | |
6145 " call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s") | |
6146 exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s" | |
6147 let s:didsplit= 1 | |
2751 | 6148 keepj call s:RestoreWinVars() |
6149 keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord())) | |
1621 | 6150 unlet s:didsplit |
6151 | |
6152 elseif a:mode == 1 | |
6153 " remote and t | |
2034 | 6154 let newdir = s:NetrwBrowseChgDir(0,s:NetrwGetWord()) |
1621 | 6155 " call Decho("tabnew") |
6156 tabnew | |
6157 let s:didsplit= 1 | |
2751 | 6158 keepj call s:RestoreWinVars() |
6159 keepj call s:NetrwBrowse(0,newdir) | |
1621 | 6160 unlet s:didsplit |
6161 | |
6162 elseif a:mode == 2 | |
6163 " remote and v | |
6164 " call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v") | |
6165 exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v" | |
6166 let s:didsplit= 1 | |
2751 | 6167 keepj call s:RestoreWinVars() |
6168 keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord())) | |
1621 | 6169 unlet s:didsplit |
6170 | |
6171 elseif a:mode == 3 | |
6172 " local and o | |
6173 " call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s") | |
6174 exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s" | |
6175 let s:didsplit= 1 | |
2751 | 6176 keepj call s:RestoreWinVars() |
6177 keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord())) | |
1621 | 6178 unlet s:didsplit |
6179 | |
6180 elseif a:mode == 4 | |
6181 " local and t | |
6182 let cursorword = s:NetrwGetWord() | |
2034 | 6183 let netrw_curdir= s:NetrwTreeDir() |
1621 | 6184 " call Decho("tabnew") |
6185 tabnew | |
6186 let b:netrw_curdir= netrw_curdir | |
6187 let s:didsplit= 1 | |
2751 | 6188 keepj call s:RestoreWinVars() |
6189 keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword)) | |
1621 | 6190 unlet s:didsplit |
6191 | |
6192 elseif a:mode == 5 | |
6193 " local and v | |
6194 " call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v") | |
6195 exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v" | |
6196 let s:didsplit= 1 | |
2751 | 6197 keepj call s:RestoreWinVars() |
6198 keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord())) | |
1621 | 6199 unlet s:didsplit |
6200 | |
6201 else | |
2751 | 6202 keepj call netrw#ErrorMsg(s:ERROR,"(NetrwSplit) unsupported mode=".a:mode,45) |
1621 | 6203 endif |
6204 | |
6205 " call Dret("s:NetrwSplit") | |
6206 endfun | |
6207 | |
6208 " --------------------------------------------------------------------- | |
6209 " NetrwStatusLine: {{{2 | |
6210 fun! NetrwStatusLine() | |
6211 | |
6212 " vvv NetrwStatusLine() debugging vvv | |
6213 " let g:stlmsg="" | |
6214 " if !exists("w:netrw_explore_bufnr") | |
6215 " let g:stlmsg="!X<explore_bufnr>" | |
6216 " elseif w:netrw_explore_bufnr != bufnr("%") | |
6217 " let g:stlmsg="explore_bufnr!=".bufnr("%") | |
6218 " endif | |
6219 " if !exists("w:netrw_explore_line") | |
6220 " let g:stlmsg=" !X<explore_line>" | |
6221 " elseif w:netrw_explore_line != line(".") | |
6222 " let g:stlmsg=" explore_line!={line(.)<".line(".").">" | |
6223 " endif | |
6224 " if !exists("w:netrw_explore_list") | |
6225 " let g:stlmsg=" !X<explore_list>" | |
6226 " endif | |
6227 " ^^^ NetrwStatusLine() debugging ^^^ | |
6228 | |
6229 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") | |
6230 " restore user's status line | |
6231 let &stl = s:netrw_users_stl | |
6232 let &laststatus = s:netrw_users_ls | |
6233 if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif | |
6234 if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif | |
6235 return "" | |
6236 else | |
6237 return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen | |
6238 endif | |
6239 endfun | |
6240 | |
6241 " --------------------------------------------------------------------- | |
6242 " s:NetrwTreeDir: determine tree directory given current cursor position {{{2 | |
6243 " (full path directory with trailing slash returned) | |
6244 fun! s:NetrwTreeDir() | |
6245 " call Dfunc("NetrwTreeDir() curline#".line(".")."<".getline('.')."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%").">") | |
6246 | |
6247 let treedir= b:netrw_curdir | |
6248 " call Decho("set initial treedir<".treedir.">") | |
6249 let s:treecurpos= netrw#NetrwSavePosn() | |
6250 | |
6251 if w:netrw_liststyle == s:TREELIST | |
6252 " call Decho("w:netrrw_liststyle is TREELIST:") | |
6253 " call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">") | |
2034 | 6254 |
6255 " extract tree directory if on a line specifying a subdirectory (ie. ends with "/") | |
1621 | 6256 if getline('.') =~ '/$' |
6257 let treedir= substitute(getline('.'),'^\%(| \)*\([^|].\{-}\)$','\1','e') | |
6258 else | |
6259 let treedir= "" | |
6260 endif | |
6261 " call Decho("treedir<".treedir.">") | |
6262 | |
6263 " detect user attempting to close treeroot | |
6264 if getline('.') !~ '|' && getline('.') != '..' | |
6265 " call Decho("user attempted to close treeroot") | |
6266 " now force a refresh | |
6267 " call Decho("clear buffer<".expand("%")."> with :%d") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6268 sil! keepj %d |
1621 | 6269 " call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">") |
6270 return b:netrw_curdir | |
6271 endif | |
6272 | |
6273 " elide all non-depth information | |
6274 let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e') | |
2034 | 6275 " call Decho("depth<".depth."> 1st subst (non-depth info removed)") |
1621 | 6276 |
6277 " elide first depth | |
6278 let depth = substitute(depth,'^| ','','') | |
2034 | 6279 " call Decho("depth<".depth."> 2nd subst (first depth removed)") |
1621 | 6280 |
6281 " construct treedir by searching backwards at correct depth | |
6282 " call Decho("constructing treedir<".treedir."> depth<".depth.">") | |
6283 while depth != "" && search('^'.depth.'[^|].\{-}/$','bW') | |
6284 let dirname= substitute(getline('.'),'^\(| \)*','','e') | |
6285 let treedir= dirname.treedir | |
6286 let depth = substitute(depth,'^| ','','') | |
6287 " call Decho("constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">") | |
6288 endwhile | |
6289 if w:netrw_treetop =~ '/$' | |
6290 let treedir= w:netrw_treetop.treedir | |
6291 else | |
6292 let treedir= w:netrw_treetop.'/'.treedir | |
6293 endif | |
6294 " call Decho("bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line(".")) | |
6295 endif | |
6296 let treedir= substitute(treedir,'//$','/','') | |
6297 | |
6298 " call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">") | |
6299 return treedir | |
6300 endfun | |
6301 | |
6302 " --------------------------------------------------------------------- | |
6303 " s:NetrwTreeDisplay: recursive tree display {{{2 | |
6304 fun! s:NetrwTreeDisplay(dir,depth) | |
6305 " call Dfunc("NetrwTreeDisplay(dir<".a:dir."> depth<".a:depth.">)") | |
6306 | |
6307 " insure that there are no folds | |
6308 setlocal nofen | |
6309 | |
6310 " install ../ and shortdir | |
6311 if a:depth == "" | |
6312 call setline(line("$")+1,'../') | |
6313 " call Decho("setline#".line("$")." ../ (depth is zero)") | |
6314 endif | |
6315 if a:dir =~ '^\a\+://' | |
6316 if a:dir == w:netrw_treetop | |
6317 let shortdir= a:dir | |
6318 else | |
6319 let shortdir= substitute(a:dir,'^.*/\([^/]\+\)/$','\1/','e') | |
6320 endif | |
6321 call setline(line("$")+1,a:depth.shortdir) | |
6322 else | |
6323 let shortdir= substitute(a:dir,'^.*/','','e') | |
6324 call setline(line("$")+1,a:depth.shortdir.'/') | |
6325 endif | |
6326 " call Decho("setline#".line("$")." shortdir<".a:depth.shortdir.">") | |
6327 | |
6328 " append a / to dir if its missing one | |
6329 let dir= a:dir | |
6330 if dir !~ '/$' | |
6331 let dir= dir.'/' | |
6332 endif | |
6333 | |
6334 " display subtrees (if any) | |
6335 let depth= "| ".a:depth | |
6336 | |
6337 " call Decho("display subtrees with depth<".depth."> and current leaves") | |
6338 for entry in w:netrw_treedict[a:dir] | |
6339 let direntry= substitute(dir.entry,'/$','','e') | |
6340 " call Decho("dir<".dir."> entry<".entry."> direntry<".direntry.">") | |
6341 if entry =~ '/$' && has_key(w:netrw_treedict,direntry) | |
6342 " call Decho("<".direntry."> is a key in treedict - display subtree for it") | |
2751 | 6343 keepj call s:NetrwTreeDisplay(direntry,depth) |
1621 | 6344 elseif entry =~ '/$' && has_key(w:netrw_treedict,direntry.'/') |
6345 " call Decho("<".direntry."/> is a key in treedict - display subtree for it") | |
2751 | 6346 keepj call s:NetrwTreeDisplay(direntry.'/',depth) |
1621 | 6347 else |
6348 " call Decho("<".entry."> is not a key in treedict (no subtree)") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6349 sil! keepj call setline(line("$")+1,depth.entry) |
1621 | 6350 endif |
6351 endfor | |
6352 " call Dret("NetrwTreeDisplay") | |
6353 endfun | |
6354 | |
6355 " --------------------------------------------------------------------- | |
6356 " s:NetrwTreeListing: displays tree listing from treetop on down, using NetrwTreeDisplay() {{{2 | |
6357 fun! s:NetrwTreeListing(dirname) | |
6358 if w:netrw_liststyle == s:TREELIST | |
6359 " call Dfunc("NetrwTreeListing() bufname<".expand("%").">") | |
6360 " call Decho("curdir<".a:dirname.">") | |
6361 " call Decho("win#".winnr().": w:netrw_treetop ".(exists("w:netrw_treetop")? "exists" : "doesn't exit")." w:netrw_treedict ".(exists("w:netrw_treedict")? "exists" : "doesn't exit")) | |
6362 | |
6363 " update the treetop | |
6364 " call Decho("update the treetop") | |
6365 if !exists("w:netrw_treetop") | |
6366 let w:netrw_treetop= a:dirname | |
6367 " call Decho("w:netrw_treetop<".w:netrw_treetop."> (reusing)") | |
6368 elseif (w:netrw_treetop =~ ('^'.a:dirname) && s:Strlen(a:dirname) < s:Strlen(w:netrw_treetop)) || a:dirname !~ ('^'.w:netrw_treetop) | |
6369 let w:netrw_treetop= a:dirname | |
6370 " call Decho("w:netrw_treetop<".w:netrw_treetop."> (went up)") | |
6371 endif | |
6372 | |
6373 " insure that we have at least an empty treedict | |
6374 if !exists("w:netrw_treedict") | |
6375 let w:netrw_treedict= {} | |
6376 endif | |
6377 | |
6378 " update the directory listing for the current directory | |
6379 " call Decho("updating dictionary with ".a:dirname.":[..directory listing..]") | |
6380 " call Decho("bannercnt=".w:netrw_bannercnt." line($)=".line("$")) | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6381 exe "sil! keepj ".w:netrw_bannercnt.',$g@^\.\.\=/$@d' |
1621 | 6382 let w:netrw_treedict[a:dirname]= getline(w:netrw_bannercnt,line("$")) |
2152 | 6383 " call Decho("w:treedict[".a:dirname."]= ".string(w:netrw_treedict[a:dirname])) |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6384 exe "sil! keepj ".w:netrw_bannercnt.",$d" |
1621 | 6385 |
6386 " if past banner, record word | |
6387 if exists("w:netrw_bannercnt") && line(".") > w:netrw_bannercnt | |
6388 let fname= expand("<cword>") | |
6389 else | |
6390 let fname= "" | |
6391 endif | |
6392 " call Decho("fname<".fname.">") | |
6393 | |
6394 " display from treetop on down | |
2751 | 6395 keepj call s:NetrwTreeDisplay(w:netrw_treetop,"") |
1621 | 6396 |
6397 " call Dret("NetrwTreeListing : bufname<".expand("%").">") | |
6398 endif | |
6399 endfun | |
6400 | |
6401 " --------------------------------------------------------------------- | |
6402 " s:NetrwWideListing: {{{2 | |
6403 fun! s:NetrwWideListing() | |
6404 | |
6405 if w:netrw_liststyle == s:WIDELIST | |
6406 " call Dfunc("NetrwWideListing() w:netrw_liststyle=".w:netrw_liststyle.' fo='.&fo.' l:fo='.&l:fo) | |
6407 " look for longest filename (cpf=characters per filename) | |
2034 | 6408 " cpf: characters per filename |
6409 " fpl: filenames per line | |
6410 " fpc: filenames per column | |
1621 | 6411 setlocal ma noro |
6412 " call Decho("setlocal ma noro") | |
6413 let b:netrw_cpf= 0 | |
6414 if line("$") >= w:netrw_bannercnt | |
2152 | 6415 exe 'sil keepj '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif' |
2751 | 6416 keepj call histdel("/",-1) |
1621 | 6417 else |
6418 " call Dret("NetrwWideListing") | |
6419 return | |
6420 endif | |
2034 | 6421 let b:netrw_cpf= b:netrw_cpf + 2 |
6422 " call Decho("b:netrw_cpf=max_filename_length+2=".b:netrw_cpf) | |
1621 | 6423 |
6424 " determine qty files per line (fpl) | |
6425 let w:netrw_fpl= winwidth(0)/b:netrw_cpf | |
6426 if w:netrw_fpl <= 0 | |
6427 let w:netrw_fpl= 1 | |
6428 endif | |
2034 | 6429 " call Decho("fpl= [winwidth=".winwidth(0)."]/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl) |
1621 | 6430 |
6431 " make wide display | |
2152 | 6432 exe 'sil keepj '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/' |
2751 | 6433 keepj call histdel("/",-1) |
1621 | 6434 let fpc = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl |
6435 let newcolstart = w:netrw_bannercnt + fpc | |
6436 let newcolend = newcolstart + fpc - 1 | |
6437 " call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6438 sil! let keepregstar = @* |
1621 | 6439 while line("$") >= newcolstart |
6440 if newcolend > line("$") | let newcolend= line("$") | endif | |
6441 let newcolqty= newcolend - newcolstart | |
6442 exe newcolstart | |
6443 if newcolqty == 0 | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6444 exe "sil! keepj norm! 0\<c-v>$hx".w:netrw_bannercnt."G$p" |
1621 | 6445 else |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6446 exe "sil! keepj norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p' |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6447 endif |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6448 exe "sil! keepj ".newcolstart.','.newcolend.'d' |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6449 exe 'sil! keepj '.w:netrw_bannercnt |
1621 | 6450 endwhile |
2751 | 6451 sil! let @*= keepregstar |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6452 exe "sil! keepj ".w:netrw_bannercnt.',$s/\s\+$//e' |
2751 | 6453 keepj call histdel("/",-1) |
1621 | 6454 setlocal noma nomod ro |
6455 " call Dret("NetrwWideListing") | |
6456 endif | |
6457 | |
6458 endfun | |
6459 | |
6460 " --------------------------------------------------------------------- | |
6461 " s:PerformListing: {{{2 | |
6462 fun! s:PerformListing(islocal) | |
2152 | 6463 " call Dfunc("s:PerformListing(islocal=".a:islocal.") bufnr(%)=".bufnr("%")."<".bufname("%").">") |
1621 | 6464 |
2751 | 6465 keepj call s:NetrwSafeOptions() |
1621 | 6466 setlocal noro ma |
6467 " call Decho("setlocal noro ma") | |
6468 | |
6469 " if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1 " Decho | |
6470 " call Decho("(netrw) Processing your browsing request...") | |
6471 " endif " Decho | |
6472 | |
6473 " call Decho('w:netrw_liststyle='.(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a')) | |
6474 if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") | |
6475 " force a refresh for tree listings | |
6476 " call Decho("force refresh for treelisting: clear buffer<".expand("%")."> with :%d") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6477 sil! keepj %d |
1621 | 6478 endif |
6479 | |
6480 " save current directory on directory history list | |
2751 | 6481 keepj call s:NetrwBookHistHandler(3,b:netrw_curdir) |
1621 | 6482 |
6483 " Set up the banner {{{3 | |
2034 | 6484 if g:netrw_banner |
6485 " call Decho("set up banner") | |
2751 | 6486 keepj call setline(1,'" ============================================================================') |
6487 keepj call setline(2,'" Netrw Directory Listing (netrw '.g:loaded_netrw.')') | |
6488 keepj call setline(3,'" '.b:netrw_curdir) | |
2034 | 6489 let w:netrw_bannercnt= 3 |
2751 | 6490 keepj exe "sil! keepj ".w:netrw_bannercnt |
2034 | 6491 else |
2152 | 6492 keepj 1 |
2034 | 6493 let w:netrw_bannercnt= 1 |
6494 endif | |
1621 | 6495 |
6496 let sortby= g:netrw_sort_by | |
6497 if g:netrw_sort_direction =~ "^r" | |
6498 let sortby= sortby." reversed" | |
6499 endif | |
6500 | |
6501 " Sorted by... {{{3 | |
2034 | 6502 if g:netrw_banner |
6503 " call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">") | |
6504 if g:netrw_sort_by =~ "^n" | |
1621 | 6505 " call Decho("directories will be sorted by name") |
2034 | 6506 " sorted by name |
2152 | 6507 keepj put ='\" Sorted by '.sortby |
6508 keepj put ='\" Sort sequence: '.g:netrw_sort_sequence | |
2034 | 6509 let w:netrw_bannercnt= w:netrw_bannercnt + 2 |
6510 else | |
1621 | 6511 " call Decho("directories will be sorted by size or time") |
2034 | 6512 " sorted by size or date |
2152 | 6513 keepj put ='\" Sorted by '.sortby |
2034 | 6514 let w:netrw_bannercnt= w:netrw_bannercnt + 1 |
6515 endif | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6516 exe "sil! keepj ".w:netrw_bannercnt |
2034 | 6517 endif |
1621 | 6518 |
6519 " show copy/move target, if any | |
2034 | 6520 if g:netrw_banner |
6521 if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal") | |
6522 " call Decho("show copy/move target<".s:netrwmftgt.">") | |
2152 | 6523 keepj put ='' |
2034 | 6524 if s:netrwmftgt_islocal |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6525 sil! keepj call setline(line("."),'" Copy/Move Tgt: '.s:netrwmftgt.' (local)') |
2034 | 6526 else |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6527 sil! keepj call setline(line("."),'" Copy/Move Tgt: '.s:netrwmftgt.' (remote)') |
2034 | 6528 endif |
6529 let w:netrw_bannercnt= w:netrw_bannercnt + 1 | |
1621 | 6530 else |
2034 | 6531 " call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt") |
6532 endif | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6533 exe "sil! keepj ".w:netrw_bannercnt |
2034 | 6534 endif |
1621 | 6535 |
6536 " Hiding... -or- Showing... {{{3 | |
2034 | 6537 if g:netrw_banner |
6538 " call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)") | |
6539 if g:netrw_list_hide != "" && g:netrw_hide | |
6540 if g:netrw_hide == 1 | |
2152 | 6541 keepj put ='\" Hiding: '.g:netrw_list_hide |
2034 | 6542 else |
2152 | 6543 keepj put ='\" Showing: '.g:netrw_list_hide |
2034 | 6544 endif |
6545 let w:netrw_bannercnt= w:netrw_bannercnt + 1 | |
6546 endif | |
6547 exe "keepjumps ".w:netrw_bannercnt | |
2152 | 6548 keepj put ='\" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec' |
6549 keepj put ='\" ============================================================================' | |
2034 | 6550 let w:netrw_bannercnt= w:netrw_bannercnt + 2 |
6551 endif | |
1621 | 6552 |
6553 " bannercnt should index the line just after the banner | |
2034 | 6554 if g:netrw_banner |
6555 let w:netrw_bannercnt= w:netrw_bannercnt + 1 | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6556 exe "sil! keepj ".w:netrw_bannercnt |
2034 | 6557 " call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$")) |
6558 endif | |
1621 | 6559 |
6560 " set up syntax highlighting {{{3 | |
6561 " call Decho("set up syntax highlighting") | |
6562 if has("syntax") | |
6563 if !exists("g:syntax_on") || !g:syntax_on | |
2751 | 6564 " call Decho("but g:syntax_on".(exists("g:syntax_on")? "=".g:syntax_on : "<doesn't exist>")) |
1621 | 6565 setlocal ft= |
2751 | 6566 elseif &ft != "netrw" |
6567 setlocal ft=netrw | |
1621 | 6568 endif |
6569 endif | |
6570 | |
6571 " get list of files | |
6572 " call Decho("Get list of files - islocal=".a:islocal) | |
6573 if a:islocal | |
2751 | 6574 keepj call s:LocalListing() |
1621 | 6575 else " remote |
2751 | 6576 keepj call s:NetrwRemoteListing() |
1621 | 6577 endif |
2034 | 6578 " call Decho("g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)") |
1621 | 6579 |
6580 " manipulate the directory listing (hide, sort) {{{3 | |
2034 | 6581 if !g:netrw_banner || line("$") >= w:netrw_bannercnt |
1621 | 6582 " call Decho("manipulate directory listing (hide)") |
6583 " call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">") | |
6584 if g:netrw_hide && g:netrw_list_hide != "" | |
2751 | 6585 keepj call s:NetrwListHide() |
1621 | 6586 endif |
2034 | 6587 if !g:netrw_banner || line("$") >= w:netrw_bannercnt |
1621 | 6588 " call Decho("manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">") |
6589 | |
6590 if g:netrw_sort_by =~ "^n" | |
6591 " sort by name | |
2751 | 6592 keepj call s:NetrwSetSort() |
1621 | 6593 |
2034 | 6594 if !g:netrw_banner || w:netrw_bannercnt < line("$") |
1621 | 6595 " call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")") |
6596 if g:netrw_sort_direction =~ 'n' | |
6597 " normal direction sorting | |
2152 | 6598 exe 'sil keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options |
1621 | 6599 else |
6600 " reverse direction sorting | |
2152 | 6601 exe 'sil keepj '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options |
1621 | 6602 endif |
6603 endif | |
6604 " remove priority pattern prefix | |
6605 " call Decho("remove priority pattern prefix") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6606 exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{3}'.g:netrw_sepchr.'//e' |
2751 | 6607 keepj call histdel("/",-1) |
1621 | 6608 |
6609 elseif a:islocal | |
2034 | 6610 if !g:netrw_banner || w:netrw_bannercnt < line("$") |
1621 | 6611 " call Decho("g:netrw_sort_direction=".g:netrw_sort_direction) |
6612 if g:netrw_sort_direction =~ 'n' | |
2751 | 6613 " call Decho('exe sil keepjumps '.w:netrw_bannercnt.',$sort') |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6614 exe 'sil! keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options |
1621 | 6615 else |
2751 | 6616 " call Decho('exe sil keepjumps '.w:netrw_bannercnt.',$sort!') |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6617 exe 'sil! keepj '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options |
1621 | 6618 endif |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6619 exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{-}\///e' |
2751 | 6620 keepj call histdel("/",-1) |
1621 | 6621 endif |
6622 endif | |
6623 | |
6624 elseif g:netrw_sort_direction =~ 'r' | |
6625 " call Decho('reverse the sorted listing') | |
2034 | 6626 if !g:netrw_banner || w:netrw_bannercnt < line('$') |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6627 exe 'sil! keepj '.w:netrw_bannercnt.',$g/^/m '.w:netrw_bannercnt |
2034 | 6628 call histdel("/",-1) |
6629 endif | |
1621 | 6630 endif |
6631 endif | |
6632 | |
6633 " convert to wide/tree listing {{{3 | |
6634 " call Decho("modify display if wide/tree listing style") | |
2751 | 6635 keepj call s:NetrwWideListing() |
6636 keepj call s:NetrwTreeListing(b:netrw_curdir) | |
1621 | 6637 |
2034 | 6638 if exists("w:netrw_bannercnt") && (line("$") > w:netrw_bannercnt || !g:netrw_banner) |
1621 | 6639 " place cursor on the top-left corner of the file listing |
6640 " call Decho("place cursor on top-left corner of file listing") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6641 exe 'sil! keepj '.w:netrw_bannercnt |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6642 sil! keepj norm! 0 |
1621 | 6643 endif |
6644 | |
6645 " record previous current directory | |
6646 let w:netrw_prvdir= b:netrw_curdir | |
6647 " call Decho("record netrw_prvdir<".w:netrw_prvdir.">") | |
6648 | |
6649 " save certain window-oriented variables into buffer-oriented variables {{{3 | |
2751 | 6650 keepj call s:SetBufWinVars() |
6651 keepj call s:NetrwOptionRestore("w:") | |
1621 | 6652 |
6653 " set display to netrw display settings | |
6654 " call Decho("set display to netrw display settings (noma nomod etc)") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6655 exe "setl ".g:netrw_bufsettings |
1621 | 6656 if exists("s:treecurpos") |
6657 | |
2751 | 6658 keepj call netrw#NetrwRestorePosn(s:treecurpos) |
1621 | 6659 unlet s:treecurpos |
6660 endif | |
6661 | |
6662 " call Dret("s:PerformListing : curpos<".string(getpos(".")).">") | |
6663 endfun | |
6664 | |
6665 " --------------------------------------------------------------------- | |
6666 " s:SetupNetrwStatusLine: {{{2 | |
1121 | 6667 fun! s:SetupNetrwStatusLine(statline) |
6668 " call Dfunc("SetupNetrwStatusLine(statline<".a:statline.">)") | |
6669 | |
6670 if !exists("s:netrw_setup_statline") | |
6671 let s:netrw_setup_statline= 1 | |
6672 " call Decho("do first-time status line setup") | |
6673 | |
6674 if !exists("s:netrw_users_stl") | |
6675 let s:netrw_users_stl= &stl | |
6676 endif | |
6677 if !exists("s:netrw_users_ls") | |
6678 let s:netrw_users_ls= &laststatus | |
6679 endif | |
6680 | |
6681 " set up User9 highlighting as needed | |
6682 let keepa= @a | |
6683 redir @a | |
6684 try | |
6685 hi User9 | |
6686 catch /^Vim\%((\a\+)\)\=:E411/ | |
6687 if &bg == "dark" | |
6688 hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue | |
6689 else | |
6690 hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue | |
6691 endif | |
6692 endtry | |
6693 redir END | |
6694 let @a= keepa | |
6695 endif | |
6696 | |
6697 " set up status line (may use User9 highlighting) | |
6698 " insure that windows have a statusline | |
6699 " make sure statusline is displayed | |
6700 let &stl=a:statline | |
6701 setlocal laststatus=2 | |
6702 " call Decho("stl=".&stl) | |
1621 | 6703 redraw |
1121 | 6704 |
6705 " call Dret("SetupNetrwStatusLine : stl=".&stl) | |
6706 endfun | |
6707 | |
6708 " --------------------------------------------------------------------- | |
1621 | 6709 " Remote Directory Browsing Support: {{{1 |
6710 " =========================================== | |
6711 | |
6712 " --------------------------------------------------------------------- | |
6713 " s:NetrwRemoteListing: {{{2 | |
6714 fun! s:NetrwRemoteListing() | |
6715 " call Dfunc("s:NetrwRemoteListing() b:netrw_curdir<".b:netrw_curdir.">)") | |
6716 | |
6717 call s:RemotePathAnalysis(b:netrw_curdir) | |
6718 | |
6719 " sanity check: | |
6720 if exists("b:netrw_method") && b:netrw_method =~ '[235]' | |
6721 " call Decho("b:netrw_method=".b:netrw_method) | |
6722 if !executable("ftp") | |
6723 if !exists("g:netrw_quiet") | |
6724 call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ftp",18) | |
6725 endif | |
6726 call s:NetrwOptionRestore("w:") | |
6727 " call Dret("s:NetrwRemoteListing") | |
6728 return | |
6729 endif | |
6730 | |
6731 elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == '' | |
6732 if !exists("g:netrw_quiet") | |
6733 if g:netrw_list_cmd == "" | |
2751 | 6734 keepj call netrw#ErrorMsg(s:ERROR,g:netrw_ssh_cmd." is not executable on your system",47) |
1621 | 6735 else |
2751 | 6736 keepj call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19) |
6737 endif | |
6738 endif | |
6739 | |
6740 keepj call s:NetrwOptionRestore("w:") | |
1621 | 6741 " call Dret("s:NetrwRemoteListing") |
6742 return | |
6743 endif " (remote handling sanity check) | |
6744 | |
6745 if exists("b:netrw_method") | |
6746 " call Decho("setting w:netrw_method<".b:netrw_method.">") | |
6747 let w:netrw_method= b:netrw_method | |
6748 endif | |
6749 | |
6750 if s:method == "ftp" | |
2751 | 6751 " use ftp to get remote file listing {{{3 |
1621 | 6752 " call Decho("use ftp to get remote file listing") |
6753 let s:method = "ftp" | |
6754 let listcmd = g:netrw_ftp_list_cmd | |
6755 if g:netrw_sort_by =~ '^t' | |
6756 let listcmd= g:netrw_ftp_timelist_cmd | |
6757 elseif g:netrw_sort_by =~ '^s' | |
6758 let listcmd= g:netrw_ftp_sizelist_cmd | |
6759 endif | |
6760 " call Decho("listcmd<".listcmd."> (using g:netrw_ftp_list_cmd)") | |
6761 call s:NetrwRemoteFtpCmd(s:path,listcmd) | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6762 " exe "sil! keepalt keepj ".w:netrw_bannercnt.',$g/^./call Decho("raw listing: ".getline("."))' |
1621 | 6763 |
6764 if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST | |
6765 " shorten the listing | |
6766 " call Decho("generate short listing") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6767 exe "sil! keepalt keepj ".w:netrw_bannercnt |
1621 | 6768 |
6769 " cleanup | |
6770 if g:netrw_ftp_browse_reject != "" | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6771 exe "sil! keepalt keepj g/".g:netrw_ftp_browse_reject."/keepj d" |
2751 | 6772 keepj call histdel("/",-1) |
1621 | 6773 endif |
2152 | 6774 sil! keepj %s/\r$//e |
2751 | 6775 keepj call histdel("/",-1) |
1621 | 6776 |
6777 " if there's no ../ listed, then put ./ and ../ in | |
6778 let line1= line(".") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6779 exe "sil! keepj ".w:netrw_bannercnt |
1621 | 6780 let line2= search('^\.\.\/\%(\s\|$\)','cnW') |
6781 if line2 == 0 | |
6782 " call Decho("netrw is putting ./ and ../ into listing") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6783 sil! keepj put='../' |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6784 sil! keepj put='./' |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6785 endif |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6786 exe "sil! keepj ".line1 |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6787 sil! keepj norm! 0 |
1621 | 6788 |
6789 " call Decho("line1=".line1." line2=".line2." line(.)=".line(".")) | |
6790 if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup | |
6791 " call Decho("M$ ftp cleanup") | |
2152 | 6792 exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+//' |
2751 | 6793 keepj call histdel("/",-1) |
1621 | 6794 else " normal ftp cleanup |
6795 " call Decho("normal ftp cleanup") | |
2152 | 6796 exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e' |
6797 exe "sil! keepj ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e' | |
6798 exe "sil! keepj ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e' | |
2751 | 6799 keepj call histdel("/",-1) |
6800 keepj call histdel("/",-1) | |
6801 keepj call histdel("/",-1) | |
1621 | 6802 endif |
6803 endif | |
6804 | |
1121 | 6805 else |
1621 | 6806 " use ssh to get remote file listing {{{3 |
6807 " call Decho("use ssh to get remote file listing: s:path<".s:path.">") | |
6808 let listcmd= s:MakeSshCmd(g:netrw_list_cmd) | |
6809 " call Decho("listcmd<".listcmd."> (using g:netrw_list_cmd)") | |
6810 if g:netrw_scp_cmd =~ '^pscp' | |
2751 | 6811 " call Decho("1: exe sil r! ".shellescape(listcmd.s:path, 1)) |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6812 exe "sil! keepj r! ".listcmd.shellescape(s:path, 1) |
1621 | 6813 " remove rubbish and adjust listing format of 'pscp' to 'ssh ls -FLa' like |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6814 sil! keepj g/^Listing directory/keepj d |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6815 sil! keepj g/^d[-rwx][-rwx][-rwx]/keepj s+$+/+e |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6816 sil! keepj g/^l[-rwx][-rwx][-rwx]/keepj s+$+@+e |
2751 | 6817 keepj call histdel("/",-1) |
6818 keepj call histdel("/",-1) | |
6819 keepj call histdel("/",-1) | |
1621 | 6820 if g:netrw_liststyle != s:LONGLIST |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6821 sil! keepj g/^[dlsp-][-rwx][-rwx][-rwx]/keepj s/^.*\s\(\S\+\)$/\1/e |
2751 | 6822 keepj call histdel("/",-1) |
1621 | 6823 endif |
6824 else | |
6825 if s:path == "" | |
2751 | 6826 " call Decho("2: exe sil r! ".listcmd) |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6827 exe "sil! keepalt r! ".listcmd |
1621 | 6828 else |
2751 | 6829 " call Decho("3: exe sil r! ".listcmd.' '.shellescape(s:path,1)) |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6830 exe "sil! keepalt r! ".listcmd.' '.shellescape(s:path,1) |
1621 | 6831 " call Decho("listcmd<".listcmd."> path<".s:path.">") |
6832 endif | |
6833 endif | |
6834 | |
6835 " cleanup | |
6836 if g:netrw_ftp_browse_reject != "" | |
2751 | 6837 " call Decho("(cleanup) exe sil! g/".g:netrw_ssh_browse_reject."/keepjumps d") |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6838 exe "sil! g/".g:netrw_ssh_browse_reject."/keepj d" |
2751 | 6839 keepj call histdel("/",-1) |
1621 | 6840 endif |
6841 endif | |
6842 | |
6843 if w:netrw_liststyle == s:LONGLIST | |
6844 " do a long listing; these substitutions need to be done prior to sorting {{{3 | |
6845 " call Decho("fix long listing:") | |
6846 | |
6847 if s:method == "ftp" | |
6848 " cleanup | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6849 exe "sil! keepj ".w:netrw_bannercnt |
1621 | 6850 while getline('.') =~ g:netrw_ftp_browse_reject |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6851 sil! keepj d |
1621 | 6852 endwhile |
6853 " if there's no ../ listed, then put ./ and ../ in | |
6854 let line1= line(".") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6855 sil! keepj 1 |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6856 sil! keepj call search('^\.\.\/\%(\s\|$\)','W') |
1621 | 6857 let line2= line(".") |
6858 if line2 == 0 | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6859 exe 'sil! keepj '.w:netrw_bannercnt."put='./'" |
1621 | 6860 if b:netrw_curdir != '/' |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6861 exe 'sil! keepj '.w:netrw_bannercnt."put='../'" |
1621 | 6862 endif |
6863 endif | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6864 exe "sil! keepj ".line1 |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6865 sil! keepj norm! 0 |
1621 | 6866 endif |
6867 | |
6868 if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup | |
6869 " call Decho("M$ ftp site listing cleanup") | |
2152 | 6870 exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\(\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+\)\(\w.*\)$/\2\t\1/' |
1621 | 6871 elseif exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$") |
6872 " call Decho("normal ftp site listing cleanup: bannercnt=".w:netrw_bannercnt." line($)=".line("$")) | |
2152 | 6873 exe 'sil keepj '.w:netrw_bannercnt.',$s/ -> .*$//e' |
6874 exe 'sil keepj '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e' | |
6875 exe 'sil keepj '.w:netrw_bannercnt | |
2751 | 6876 keepj call histdel("/",-1) |
6877 keepj call histdel("/",-1) | |
6878 keepj call histdel("/",-1) | |
1621 | 6879 endif |
6880 endif | |
6881 | |
6882 " if exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$") " Decho | |
2152 | 6883 " exe "keepj ".w:netrw_bannercnt.',$g/^./call Decho("listing: ".getline("."))' |
1621 | 6884 " endif " Decho |
6885 " call Dret("s:NetrwRemoteListing") | |
6886 endfun | |
6887 | |
6888 " --------------------------------------------------------------------- | |
6889 " s:NetrwRemoteRm: remove/delete a remote file or directory {{{2 | |
6890 fun! s:NetrwRemoteRm(usrhost,path) range | |
6891 " call Dfunc("s:NetrwRemoteRm(usrhost<".a:usrhost."> path<".a:path.">) virtcol=".virtcol(".")) | |
6892 " call Decho("firstline=".a:firstline." lastline=".a:lastline) | |
6893 let svpos= netrw#NetrwSavePosn() | |
6894 | |
6895 let all= 0 | |
6896 if exists("s:netrwmarkfilelist_{bufnr('%')}") | |
6897 " remove all marked files | |
2034 | 6898 " call Decho("remove all marked files with bufnr#".bufnr("%")) |
1621 | 6899 for fname in s:netrwmarkfilelist_{bufnr("%")} |
6900 let ok= s:NetrwRemoteRmFile(a:path,fname,all) | |
6901 if ok =~ 'q\%[uit]' | |
6902 break | |
6903 elseif ok =~ 'a\%[ll]' | |
6904 let all= 1 | |
6905 endif | |
6906 endfor | |
2034 | 6907 call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir) |
1621 | 6908 |
6909 else | |
6910 " remove files specified by range | |
2034 | 6911 " call Decho("remove files specified by range") |
1621 | 6912 |
6913 " preparation for removing multiple files/directories | |
6914 let ctr= a:firstline | |
6915 | |
6916 " remove multiple files and directories | |
6917 while ctr <= a:lastline | |
6918 exe ctr | |
6919 let ok= s:NetrwRemoteRmFile(a:path,s:NetrwGetWord(),all) | |
6920 if ok =~ 'q\%[uit]' | |
6921 break | |
6922 elseif ok =~ 'a\%[ll]' | |
6923 let all= 1 | |
6924 endif | |
6925 let ctr= ctr + 1 | |
6926 endwhile | |
6927 endif | |
6928 | |
6929 " refresh the (remote) directory listing | |
6930 " call Decho("refresh remote directory listing") | |
2751 | 6931 keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) |
6932 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 6933 |
6934 " call Dret("s:NetrwRemoteRm") | |
1121 | 6935 endfun |
6936 | |
6937 " --------------------------------------------------------------------- | |
1621 | 6938 " s:NetrwRemoteRmFile: {{{2 |
6939 fun! s:NetrwRemoteRmFile(path,rmfile,all) | |
6940 " call Dfunc("s:NetrwRemoteRmFile(path<".a:path."> rmfile<".a:rmfile.">) all=".a:all) | |
6941 | |
6942 let all= a:all | |
6943 let ok = "" | |
6944 | |
6945 if a:rmfile !~ '^"' && (a:rmfile =~ '@$' || a:rmfile !~ '[\/]$') | |
6946 " attempt to remove file | |
6947 " call Decho("attempt to remove file (all=".all.")") | |
6948 if !all | |
6949 echohl Statement | |
6950 " call Decho("case all=0:") | |
6951 call inputsave() | |
6952 let ok= input("Confirm deletion of file<".a:rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") | |
6953 call inputrestore() | |
6954 echohl NONE | |
6955 if ok == "" | |
6956 let ok="no" | |
6957 endif | |
6958 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') | |
6959 if ok =~ 'a\%[ll]' | |
6960 let all= 1 | |
6961 endif | |
6962 endif | |
6963 | |
6964 if all || ok =~ 'y\%[es]' || ok == "" | |
6965 " call Decho("case all=".all." or ok<".ok.">".(exists("w:netrw_method")? ': netrw_method='.w:netrw_method : "")) | |
6966 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) | |
6967 " call Decho("case ftp:") | |
6968 let path= a:path | |
6969 if path =~ '^\a\+://' | |
6970 let path= substitute(path,'^\a\+://[^/]\+/','','') | |
6971 endif | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
6972 sil! keepj .,$d |
1621 | 6973 call s:NetrwRemoteFtpCmd(path,"delete ".'"'.a:rmfile.'"') |
6974 else | |
6975 " call Decho("case ssh: g:netrw_rm_cmd<".g:netrw_rm_cmd.">") | |
6976 let netrw_rm_cmd= s:MakeSshCmd(g:netrw_rm_cmd) | |
6977 " call Decho("netrw_rm_cmd<".netrw_rm_cmd.">") | |
6978 if !exists("b:netrw_curdir") | |
2751 | 6979 keepj call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53) |
1621 | 6980 let ok="q" |
6981 else | |
6982 let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','') | |
6983 " call Decho("netrw_rm_cmd<".netrw_rm_cmd.">") | |
6984 " call Decho("remotedir<".remotedir.">") | |
6985 " call Decho("rmfile<".a:rmfile.">") | |
6986 if remotedir != "" | |
6987 let netrw_rm_cmd= netrw_rm_cmd." ".shellescape(fnameescape(remotedir.a:rmfile)) | |
6988 else | |
6989 let netrw_rm_cmd= netrw_rm_cmd." ".shellescape(fnameescape(a:rmfile)) | |
6990 endif | |
6991 " call Decho("call system(".netrw_rm_cmd.")") | |
6992 let ret= system(netrw_rm_cmd) | |
6993 if ret != 0 | |
2751 | 6994 keepj call netrw#ErrorMsg(s:WARNING,"cmd<".netrw_rm_cmd."> failed",60) |
1621 | 6995 endif |
6996 " call Decho("returned=".ret." errcode=".v:shell_error) | |
6997 endif | |
6998 endif | |
6999 elseif ok =~ 'q\%[uit]' | |
7000 " call Decho("ok==".ok) | |
7001 break | |
7002 endif | |
7003 | |
7004 else | |
7005 " attempt to remove directory | |
7006 " call Decho("attempt to remove directory") | |
7007 if !all | |
7008 call inputsave() | |
7009 let ok= input("Confirm deletion of directory<".a:rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") | |
7010 call inputrestore() | |
7011 if ok == "" | |
7012 let ok="no" | |
7013 endif | |
7014 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') | |
7015 if ok =~ 'a\%[ll]' | |
7016 let all= 1 | |
7017 endif | |
7018 endif | |
7019 | |
7020 if all || ok =~ 'y\%[es]' || ok == "" | |
7021 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) | |
2751 | 7022 keepj call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile) |
1621 | 7023 else |
7024 let rmfile = substitute(a:path.a:rmfile,'/$','','') | |
2034 | 7025 let netrw_rmdir_cmd = s:MakeSshCmd(netrw#WinPath(g:netrw_rmdir_cmd)).' '.shellescape(netrw#WinPath(rmfile)) |
1621 | 7026 " call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")") |
1668 | 7027 let ret= system(netrw_rmdir_cmd) |
1621 | 7028 " call Decho("returned=".ret." errcode=".v:shell_error) |
7029 | |
7030 if v:shell_error != 0 | |
1668 | 7031 " call Decho("v:shell_error not 0") |
2034 | 7032 let netrw_rmf_cmd= s:MakeSshCmd(netrw#WinPath(g:netrw_rmf_cmd)).' '.shellescape(netrw#WinPath(substitute(rmfile,'[\/]$','','e'))) |
1668 | 7033 " call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")") |
7034 let ret= system(netrw_rmf_cmd) | |
7035 " call Decho("returned=".ret." errcode=".v:shell_error) | |
1621 | 7036 |
7037 if v:shell_error != 0 && !exists("g:netrw_quiet") | |
2751 | 7038 keepj call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22) |
1621 | 7039 endif |
7040 endif | |
7041 endif | |
7042 | |
7043 elseif ok =~ 'q\%[uit]' | |
7044 break | |
7045 endif | |
7046 endif | |
7047 | |
7048 " call Dret("s:NetrwRemoteRmFile ".ok) | |
7049 return ok | |
7050 endfun | |
7051 | |
7052 " --------------------------------------------------------------------- | |
7053 " s:NetrwRemoteFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2 | |
7054 " This function assumes that a long listing will be received. Size, time, | |
7055 " and reverse sorts will be requested of the server but not otherwise | |
7056 " enforced here. | |
7057 fun! s:NetrwRemoteFtpCmd(path,listcmd) | |
7058 " call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) netrw_method=".w:netrw_method) | |
7059 " call Decho("line($)=".line("$")." bannercnt=".w:netrw_bannercnt) | |
7060 | |
7061 " because WinXX ftp uses unix style input | |
7062 let ffkeep= &ff | |
7063 setlocal ma ff=unix noro | |
7064 " call Decho("setlocal ma ff=unix noro") | |
7065 | |
7066 " clear off any older non-banner lines | |
7067 " note that w:netrw_bannercnt indexes the line after the banner | |
2751 | 7068 " call Decho('exe sil! keepjumps '.w:netrw_bannercnt.",$d (clear off old non-banner lines)") |
7069 exe "sil! keepjumps ".w:netrw_bannercnt.",$d" | |
1621 | 7070 |
7071 "......................................... | |
7072 if w:netrw_method == 2 || w:netrw_method == 5 | |
7073 " ftp + <.netrc>: Method #2 | |
7074 if a:path != "" | |
2152 | 7075 keepj put ='cd \"'.a:path.'\"' |
1621 | 7076 endif |
7077 if exists("g:netrw_ftpextracmd") | |
2152 | 7078 keepj put =g:netrw_ftpextracmd |
1621 | 7079 " call Decho("filter input: ".getline('.')) |
7080 endif | |
2751 | 7081 keepj call setline(line("$")+1,a:listcmd) |
1621 | 7082 " exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' |
7083 if exists("g:netrw_port") && g:netrw_port != "" | |
2751 | 7084 " call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) |
7085 exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) | |
1621 | 7086 else |
2751 | 7087 " call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) |
7088 exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) | |
1621 | 7089 endif |
7090 | |
7091 "......................................... | |
7092 elseif w:netrw_method == 3 | |
7093 " ftp + machine,id,passwd,filename: Method #3 | |
7094 setlocal ff=unix | |
7095 if exists("g:netrw_port") && g:netrw_port != "" | |
2152 | 7096 keepj put ='open '.g:netrw_machine.' '.g:netrw_port |
1621 | 7097 else |
2152 | 7098 keepj put ='open '.g:netrw_machine |
1621 | 7099 endif |
7100 | |
7101 if exists("g:netrw_ftp") && g:netrw_ftp == 1 | |
2152 | 7102 keepj put =g:netrw_uid |
7103 keepj put ='\"'.s:netrw_passwd.'\"' | |
1621 | 7104 else |
2152 | 7105 keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' |
1621 | 7106 endif |
7107 | |
7108 if a:path != "" | |
2152 | 7109 keepj put ='cd \"'.a:path.'\"' |
1621 | 7110 endif |
7111 if exists("g:netrw_ftpextracmd") | |
2152 | 7112 keepj put =g:netrw_ftpextracmd |
1621 | 7113 " call Decho("filter input: ".getline('.')) |
7114 endif | |
2152 | 7115 keepj call setline(line("$")+1,a:listcmd) |
1621 | 7116 |
7117 " perform ftp: | |
7118 " -i : turns off interactive prompting from ftp | |
7119 " -n unix : DON'T use <.netrc>, even though it exists | |
7120 " -n win32: quit being obnoxious about password | |
7121 " exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' | |
2751 | 7122 " call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i -n") |
7123 exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i -n" | |
1621 | 7124 |
7125 "......................................... | |
7126 else | |
2751 | 7127 keepj call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23) |
1621 | 7128 endif |
7129 | |
7130 " cleanup for Windows | |
7131 if has("win32") || has("win95") || has("win64") || has("win16") | |
2152 | 7132 sil! keepj %s/\r$//e |
2751 | 7133 keepj call histdel("/",-1) |
1621 | 7134 endif |
7135 if a:listcmd == "dir" | |
7136 " infer directory/link based on the file permission string | |
2152 | 7137 sil! keepj g/d\%([-r][-w][-x]\)\{3}/keepj s@$@/@ |
7138 sil! keepj g/l\%([-r][-w][-x]\)\{3}/keepj s/$/@/ | |
2751 | 7139 keepj call histdel("/",-1) |
7140 keepj call histdel("/",-1) | |
1621 | 7141 if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST |
2152 | 7142 exe "sil! keepj ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e' |
2751 | 7143 keepj call histdel("/",-1) |
1621 | 7144 endif |
7145 endif | |
7146 | |
7147 " ftp's listing doesn't seem to include ./ or ../ | |
7148 if !search('^\.\/$\|\s\.\/$','wn') | |
2152 | 7149 exe 'keepj '.w:netrw_bannercnt |
7150 keepj put ='./' | |
1621 | 7151 endif |
7152 if !search('^\.\.\/$\|\s\.\.\/$','wn') | |
2152 | 7153 exe 'keepj '.w:netrw_bannercnt |
7154 keepj put ='../' | |
1621 | 7155 endif |
7156 | |
7157 " restore settings | |
7158 let &ff= ffkeep | |
7159 " call Dret("NetrwRemoteFtpCmd") | |
7160 endfun | |
7161 | |
7162 " --------------------------------------------------------------------- | |
7163 " s:NetrwRemoteRename: rename a remote file or directory {{{2 | |
7164 fun! s:NetrwRemoteRename(usrhost,path) range | |
7165 " call Dfunc("NetrwRemoteRename(usrhost<".a:usrhost."> path<".a:path.">)") | |
7166 | |
7167 " preparation for removing multiple files/directories | |
7168 let svpos = netrw#NetrwSavePosn() | |
7169 let ctr = a:firstline | |
7170 let rename_cmd = s:MakeSshCmd(g:netrw_rename_cmd) | |
7171 | |
7172 " rename files given by the markfilelist | |
7173 if exists("s:netrwmarkfilelist_{bufnr('%')}") | |
7174 for oldname in s:netrwmarkfilelist_{bufnr("%")} | |
7175 " call Decho("oldname<".oldname.">") | |
7176 if exists("subfrom") | |
7177 let newname= substitute(oldname,subfrom,subto,'') | |
7178 " call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">") | |
7179 else | |
7180 call inputsave() | |
7181 let newname= input("Moving ".oldname." to : ",oldname) | |
7182 call inputrestore() | |
7183 if newname =~ '^s/' | |
7184 let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','') | |
7185 let subto = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','') | |
7186 let newname = substitute(oldname,subfrom,subto,'') | |
7187 " call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">") | |
7188 endif | |
7189 endif | |
7190 | |
7191 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) | |
2751 | 7192 keepj call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname) |
1621 | 7193 else |
1668 | 7194 let oldname= shellescape(a:path.oldname) |
7195 let newname= shellescape(a:path.newname) | |
2034 | 7196 " call Decho("system(netrw#WinPath(".rename_cmd.") ".oldname.' '.newname.")") |
7197 let ret = system(netrw#WinPath(rename_cmd).' '.oldname.' '.newname) | |
1621 | 7198 endif |
7199 | |
7200 endfor | |
7201 call s:NetrwUnMarkFile(1) | |
7202 | |
7203 else | |
7204 | |
7205 " attempt to rename files/directories | |
7206 while ctr <= a:lastline | |
2152 | 7207 exe "keepj ".ctr |
1621 | 7208 |
7209 let oldname= s:NetrwGetWord() | |
7210 " call Decho("oldname<".oldname.">") | |
7211 | |
7212 call inputsave() | |
7213 let newname= input("Moving ".oldname." to : ",oldname) | |
7214 call inputrestore() | |
7215 | |
7216 if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) | |
7217 call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname) | |
7218 else | |
1668 | 7219 let oldname= shellescape(a:path.oldname) |
7220 let newname= shellescape(a:path.newname) | |
2034 | 7221 " call Decho("system(netrw#WinPath(".rename_cmd.") ".oldname.' '.newname.")") |
7222 let ret = system(netrw#WinPath(rename_cmd).' '.oldname.' '.newname) | |
1621 | 7223 endif |
7224 | |
7225 let ctr= ctr + 1 | |
7226 endwhile | |
7227 endif | |
7228 | |
7229 " refresh the directory | |
2751 | 7230 keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) |
7231 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 7232 |
7233 " call Dret("NetrwRemoteRename") | |
7234 endfun | |
7235 | |
7236 " --------------------------------------------------------------------- | |
7237 " Local Directory Browsing Support: {{{1 | |
7238 " ========================================== | |
7239 | |
7240 " --------------------------------------------------------------------- | |
7241 " netrw#LocalBrowseCheck: {{{2 | |
7242 fun! netrw#LocalBrowseCheck(dirname) | |
7243 " unfortunate interaction -- split window debugging can't be | |
7244 " used here, must use D-echoRemOn or D-echoTabOn -- the BufEnter | |
7245 " event triggers another call to LocalBrowseCheck() when attempts | |
7246 " to write to the DBG buffer are made. | |
7247 " The &ft == "netrw" test was installed because the BufEnter event | |
7248 " would hit when re-entering netrw windows, creating unexpected | |
7249 " refreshes (and would do so in the middle of NetrwSaveOptions(), too) | |
2034 | 7250 " call Decho("netrw#LocalBrowseCheck: isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : ""))) |
2751 | 7251 " call Dredir("LocalBrowseCheck","ls!")|redraw!|sleep 3 |
1621 | 7252 if isdirectory(a:dirname) |
7253 " call Decho(" ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$")) | |
7254 if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname) | |
2751 | 7255 sil! keepj call s:NetrwBrowse(1,a:dirname) |
1621 | 7256 elseif &ft == "netrw" && line("$") == 1 |
2751 | 7257 sil! keepj call s:NetrwBrowse(1,a:dirname) |
2034 | 7258 elseif exists("s:treeforceredraw") |
7259 unlet s:treeforceredraw | |
2751 | 7260 sil! keepj call s:NetrwBrowse(1,a:dirname) |
1621 | 7261 endif |
7262 endif | |
7263 " not a directory, ignore it | |
1121 | 7264 endfun |
482 | 7265 |
7266 " --------------------------------------------------------------------- | |
1621 | 7267 " s:LocalListing: does the job of "ls" for local directories {{{2 |
7268 fun! s:LocalListing() | |
7269 " call Dfunc("s:LocalListing()") | |
7270 " call Decho("&ma=".&ma) | |
7271 " call Decho("&mod=".&mod) | |
7272 " call Decho("&ro=".&ro) | |
7273 " call Decho("bufname(%)<".bufname("%").">") | |
7274 | |
7275 " if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">") |else|call Decho("b:netrw_curdir doesn't exist") |endif | |
7276 " if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif | |
7277 | |
7278 " get the list of files contained in the current directory | |
2751 | 7279 let dirname = b:netrw_curdir |
2034 | 7280 let dirnamelen = s:Strlen(b:netrw_curdir) |
1621 | 7281 let filelist = glob(s:ComposePath(dirname,"*")) |
7282 " call Decho("glob(dirname<".dirname."/*>)=".filelist) | |
7283 if filelist != "" | |
7284 let filelist= filelist."\n" | |
7285 endif | |
7286 let filelist= filelist.glob(s:ComposePath(dirname,".*")) | |
7287 " call Decho("glob(dirname<".dirname."/.*>)=".filelist) | |
7288 | |
7289 " Coding choice: either elide ./ if present | |
7290 " or include ./ if not present | |
7291 if filelist =~ '[\\/]\.[\\/]\=\(\n\|$\)' | |
7292 " elide /path/. from glob() entries if present | |
7293 " call Decho("elide /path/. from glob entries if present") | |
7294 let filelist = substitute(filelist,'\n','\t','g') | |
7295 let filelist = substitute(filelist,'^[^\t]\+[/\\]\.\t','','') | |
7296 let filelist = substitute(filelist,'[^\t]\+[/\\]\.$','','') | |
7297 let filelist = substitute(filelist,'\t\zs[^\t]\+[/\\]\.\t','','') | |
7298 let filelist = substitute(filelist,'\t','\n','g') | |
7299 endif | |
7300 " call Decho("filelist<".filelist.">") | |
7301 if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)' | |
7302 " include ../ in the glob() entry if its missing | |
7303 " call Decho("forcibly tacking on ..") | |
7304 let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"../") | |
7305 " call Decho("filelist<".filelist.">") | |
7306 endif | |
7307 if b:netrw_curdir == '/' | |
7308 " remove .. from filelist when current directory is root directory | |
7309 " call Decho("remove .. from filelist") | |
7310 let filelist= substitute(filelist,'/\.\.\n','','') | |
7311 endif | |
7312 " remove multiple contiguous newlines | |
7313 let filelist= substitute(filelist,'\n\{2,}','\n','ge') | |
7314 if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16")) | |
7315 " change all \s to /s | |
7316 " call Decho('change all \s to /s') | |
7317 let filelist= substitute(filelist,'\','/','g') | |
482 | 7318 else |
1621 | 7319 " escape all \s to \\ |
7320 " call Decho('escape all \s to \\') | |
7321 let filelist= substitute(filelist,'\','\\','g') | |
7322 endif | |
7323 | |
7324 " call Decho("(before while) dirname<".dirname.">") | |
7325 " call Decho("(before while) dirnamelen<".dirnamelen.">") | |
7326 " call Decho("(before while) filelist<".filelist.">") | |
7327 | |
7328 while filelist != "" | |
7329 if filelist =~ '\n' | |
7330 let filename = substitute(filelist,'\n.*$','','e') | |
7331 let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e') | |
7332 else | |
7333 let filename = filelist | |
7334 let filelist = "" | |
7335 endif | |
7336 " call Decho(" ") | |
7337 " call Decho("(while) filelist<".filelist.">") | |
7338 " call Decho("(while) filename<".filename.">") | |
7339 | |
7340 if getftype(filename) == "link" | |
7341 " indicate a symbolic link | |
7342 " call Decho("indicate <".filename."> is a symbolic link with trailing @") | |
7343 let pfile= filename."@" | |
7344 | |
7345 elseif getftype(filename) == "socket" | |
7346 " indicate a socket | |
7347 " call Decho("indicate <".filename."> is a socket with trailing =") | |
7348 let pfile= filename."=" | |
7349 | |
7350 elseif getftype(filename) == "fifo" | |
7351 " indicate a fifo | |
7352 " call Decho("indicate <".filename."> is a fifo with trailing |") | |
7353 let pfile= filename."|" | |
7354 | |
7355 elseif isdirectory(filename) | |
7356 " indicate a directory | |
7357 " call Decho("indicate <".filename."> is a directory with trailing /") | |
7358 let pfile= filename."/" | |
7359 | |
7360 elseif exists("b:netrw_curdir") && b:netrw_curdir !~ '^.*://' && !isdirectory(filename) | |
7361 if (has("win32") || has("win95") || has("win64") || has("win16")) | |
7362 if filename =~ '\.[eE][xX][eE]$' || filename =~ '\.[cC][oO][mM]$' || filename =~ '\.[bB][aA][tT]$' | |
7363 " indicate an executable | |
7364 " call Decho("indicate <".filename."> is executable with trailing *") | |
7365 let pfile= filename."*" | |
7366 else | |
7367 " normal file | |
7368 let pfile= filename | |
7369 endif | |
7370 elseif executable(filename) | |
7371 " indicate an executable | |
7372 " call Decho("indicate <".filename."> is executable with trailing *") | |
7373 let pfile= filename."*" | |
7374 else | |
7375 " normal file | |
7376 let pfile= filename | |
7377 endif | |
7378 | |
7379 else | |
7380 " normal file | |
7381 let pfile= filename | |
7382 endif | |
7383 " call Decho("pfile<".pfile."> (after *@/ appending)") | |
7384 | |
7385 if pfile =~ '//$' | |
7386 let pfile= substitute(pfile,'//$','/','e') | |
7387 " call Decho("change // to /: pfile<".pfile.">") | |
7388 endif | |
7389 let pfile= strpart(pfile,dirnamelen) | |
7390 let pfile= substitute(pfile,'^[/\\]','','e') | |
7391 " call Decho("filename<".filename.">") | |
7392 " call Decho("pfile <".pfile.">") | |
7393 | |
7394 if w:netrw_liststyle == s:LONGLIST | |
7395 let sz = getfsize(filename) | |
2034 | 7396 let fsz = strpart(" ",1,15-strlen(sz)).sz |
1621 | 7397 let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename)) |
7398 " call Decho("sz=".sz." fsz=".fsz) | |
7399 endif | |
7400 | |
7401 if g:netrw_sort_by =~ "^t" | |
7402 " sort by time (handles time up to 1 quintillion seconds, US) | |
7403 " call Decho("getftime(".filename.")=".getftime(filename)) | |
7404 let t = getftime(filename) | |
2034 | 7405 let ft = strpart("000000000000000000",1,18-strlen(t)).t |
1621 | 7406 " call Decho("exe keepjumps put ='".ft.'/'.filename."'") |
7407 let ftpfile= ft.'/'.pfile | |
2152 | 7408 sil! keepj put=ftpfile |
1621 | 7409 |
7410 elseif g:netrw_sort_by =~ "^s" | |
7411 " sort by size (handles file sizes up to 1 quintillion bytes, US) | |
7412 " call Decho("getfsize(".filename.")=".getfsize(filename)) | |
7413 let sz = getfsize(filename) | |
2034 | 7414 let fsz = strpart("000000000000000000",1,18-strlen(sz)).sz |
1621 | 7415 " call Decho("exe keepjumps put ='".fsz.'/'.filename."'") |
7416 let fszpfile= fsz.'/'.pfile | |
2152 | 7417 sil! keepj put =fszpfile |
1621 | 7418 |
482 | 7419 else |
1621 | 7420 " sort by name |
7421 " call Decho("exe keepjumps put ='".pfile."'") | |
2152 | 7422 sil! keepj put=pfile |
1621 | 7423 endif |
7424 endwhile | |
7425 | |
7426 " cleanup any windows mess at end-of-line | |
2152 | 7427 sil! keepj g/^$/d |
7428 sil! keepj %s/\r$//e | |
2034 | 7429 call histdel("/",-1) |
1621 | 7430 exe "setlocal ts=".g:netrw_maxfilenamelen |
7431 " call Decho("setlocal ts=".g:netrw_maxfilenamelen) | |
7432 | |
7433 " call Dret("s:LocalListing") | |
7434 endfun | |
7435 | |
7436 " --------------------------------------------------------------------- | |
7437 " s:LocalBrowseShellCmdRefresh: this function is called after a user has {{{2 | |
7438 " performed any shell command. The idea is to cause all local-browsing | |
7439 " buffers to be refreshed after a user has executed some shell command, | |
7440 " on the chance that s/he removed/created a file/directory with it. | |
7441 fun! s:LocalBrowseShellCmdRefresh() | |
7442 " call Dfunc("LocalBrowseShellCmdRefresh() browselist=".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "empty")." ".tabpagenr("$")." tabs") | |
7443 " determine which buffers currently reside in a tab | |
7444 if !exists("s:netrw_browselist") | |
7445 " call Dret("LocalBrowseShellCmdRefresh : browselist is empty") | |
7446 return | |
7447 endif | |
7448 if !exists("w:netrw_bannercnt") | |
2034 | 7449 " call Dret("LocalBrowseShellCmdRefresh : don't refresh when focus not on netrw window") |
1621 | 7450 return |
7451 endif | |
2034 | 7452 if exists("s:locbrowseshellcmd") |
7453 if s:locbrowseshellcmd | |
7454 let s:locbrowseshellcmd= 0 | |
7455 " call Dret("LocalBrowseShellCmdRefresh : NetrwBrowse itself caused the refresh") | |
7456 return | |
7457 endif | |
7458 let s:locbrowseshellcmd= 0 | |
7459 endif | |
1621 | 7460 let itab = 1 |
7461 let buftablist = [] | |
7462 while itab <= tabpagenr("$") | |
7463 let buftablist = buftablist + tabpagebuflist() | |
7464 let itab = itab + 1 | |
7465 tabn | |
482 | 7466 endwhile |
1621 | 7467 " call Decho("buftablist".string(buftablist)) |
7468 " call Decho("s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">") | |
7469 " GO through all buffers on netrw_browselist (ie. just local-netrw buffers): | |
7470 " | refresh any netrw window | |
7471 " | wipe out any non-displaying netrw buffer | |
7472 let curwin = winnr() | |
7473 let ibl = 0 | |
7474 for ibuf in s:netrw_browselist | |
7475 " call Decho("bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf)) | |
7476 if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1 | |
7477 " wipe out any non-displaying netrw buffer | |
7478 " call Decho("wiping buf#".ibuf,"<".bufname(ibuf).">") | |
2152 | 7479 exe "sil! bd ".fnameescape(ibuf) |
1621 | 7480 call remove(s:netrw_browselist,ibl) |
7481 " call Decho("browselist=".string(s:netrw_browselist)) | |
7482 continue | |
7483 elseif index(tabpagebuflist(),ibuf) != -1 | |
7484 " refresh any netrw buffer | |
7485 " call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf)) | |
7486 exe bufwinnr(ibuf)."wincmd w" | |
2751 | 7487 keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) |
1621 | 7488 endif |
7489 let ibl= ibl + 1 | |
7490 endfor | |
7491 exe curwin."wincmd w" | |
7492 | |
7493 " call Dret("LocalBrowseShellCmdRefresh") | |
7494 endfun | |
7495 | |
7496 " --------------------------------------------------------------------- | |
7497 " s:NetrwLocalRm: {{{2 | |
7498 fun! s:NetrwLocalRm(path) range | |
7499 " call Dfunc("s:NetrwLocalRm(path<".a:path.">)") | |
7500 " call Decho("firstline=".a:firstline." lastline=".a:lastline) | |
7501 | |
7502 " preparation for removing multiple files/directories | |
7503 let ret = 0 | |
7504 let all = 0 | |
7505 let svpos = netrw#NetrwSavePosn() | |
7506 | |
7507 if exists("s:netrwmarkfilelist_{bufnr('%')}") | |
7508 " remove all marked files | |
7509 " call Decho("remove all marked files") | |
7510 for fname in s:netrwmarkfilelist_{bufnr("%")} | |
7511 let ok= s:NetrwLocalRmFile(a:path,fname,all) | |
7512 if ok =~ 'q\%[uit]' || ok == "no" | |
7513 break | |
7514 elseif ok =~ 'a\%[ll]' | |
7515 let all= 1 | |
7516 endif | |
7517 endfor | |
7518 call s:NetrwUnMarkFile(1) | |
7519 | |
7520 else | |
7521 " remove (multiple) files and directories | |
7522 " call Decho("remove files in range [".a:firstline.",".a:lastline."]") | |
7523 | |
7524 let ctr = a:firstline | |
7525 while ctr <= a:lastline | |
2152 | 7526 exe "keepj ".ctr |
1621 | 7527 |
7528 " sanity checks | |
7529 if line(".") < w:netrw_bannercnt | |
7530 let ctr= ctr + 1 | |
7531 continue | |
7532 endif | |
7533 let curword= s:NetrwGetWord() | |
7534 if curword == "./" || curword == "../" | |
7535 let ctr= ctr + 1 | |
7536 continue | |
7537 endif | |
7538 let ok= s:NetrwLocalRmFile(a:path,curword,all) | |
7539 if ok =~ 'q\%[uit]' || ok == "no" | |
7540 break | |
7541 elseif ok =~ 'a\%[ll]' | |
7542 let all= 1 | |
7543 endif | |
7544 let ctr= ctr + 1 | |
7545 endwhile | |
7546 endif | |
7547 | |
7548 " refresh the directory | |
7549 " call Decho("bufname<".bufname("%").">") | |
7550 if bufname("%") != "NetrwMessage" | |
2751 | 7551 keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) |
7552 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 7553 endif |
7554 | |
7555 " call Dret("s:NetrwLocalRm") | |
482 | 7556 endfun |
7557 | |
1621 | 7558 " --------------------------------------------------------------------- |
7559 " s:NetrwLocalRmFile: remove file fname given the path {{{2 | |
7560 " Give confirmation prompt unless all==1 | |
7561 fun! s:NetrwLocalRmFile(path,fname,all) | |
7562 " call Dfunc("s:NetrwLocalRmFile(path<".a:path."> fname<".a:fname."> all=".a:all) | |
7563 | |
7564 let all= a:all | |
7565 let ok = "" | |
2152 | 7566 keepj norm! 0 |
1621 | 7567 let rmfile= s:ComposePath(a:path,a:fname) |
7568 " call Decho("rmfile<".rmfile.">") | |
7569 | |
7570 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$') | |
7571 " attempt to remove file | |
7572 " call Decho("attempt to remove file<".rmfile.">") | |
7573 if !all | |
7574 echohl Statement | |
7575 call inputsave() | |
7576 let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") | |
7577 call inputrestore() | |
7578 echohl NONE | |
7579 if ok == "" | |
7580 let ok="no" | |
7581 endif | |
7582 " call Decho("response: ok<".ok.">") | |
7583 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') | |
7584 " call Decho("response: ok<".ok."> (after sub)") | |
7585 if ok =~ 'a\%[ll]' | |
7586 let all= 1 | |
7587 endif | |
7588 endif | |
7589 | |
7590 if all || ok =~ 'y\%[es]' || ok == "" | |
1668 | 7591 let ret= s:NetrwDelete(rmfile) |
1621 | 7592 " call Decho("errcode=".v:shell_error." ret=".ret) |
7593 endif | |
7594 | |
7595 else | |
7596 " attempt to remove directory | |
7597 if !all | |
7598 echohl Statement | |
7599 call inputsave() | |
7600 let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") | |
7601 call inputrestore() | |
7602 let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') | |
7603 if ok == "" | |
7604 let ok="no" | |
7605 endif | |
7606 if ok =~ 'a\%[ll]' | |
7607 let all= 1 | |
7608 endif | |
7609 endif | |
7610 let rmfile= substitute(rmfile,'[\/]$','','e') | |
7611 | |
7612 if all || ok =~ 'y\%[es]' || ok == "" | |
2034 | 7613 " call Decho("1st attempt: system(netrw#WinPath(".g:netrw_local_rmdir.') '.shellescape(rmfile).')') |
7614 call system(netrw#WinPath(g:netrw_local_rmdir).' '.shellescape(rmfile)) | |
1621 | 7615 " call Decho("v:shell_error=".v:shell_error) |
7616 | |
7617 if v:shell_error != 0 | |
7618 " call Decho("2nd attempt to remove directory<".rmfile.">") | |
1668 | 7619 let errcode= s:NetrwDelete(rmfile) |
1621 | 7620 " call Decho("errcode=".errcode) |
7621 | |
7622 if errcode != 0 | |
7623 if has("unix") | |
7624 " call Decho("3rd attempt to remove directory<".rmfile.">") | |
1668 | 7625 call system("rm ".shellescape(rmfile)) |
1621 | 7626 if v:shell_error != 0 && !exists("g:netrw_quiet") |
7627 call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34) | |
7628 let ok="no" | |
7629 endif | |
7630 elseif !exists("g:netrw_quiet") | |
7631 call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",35) | |
7632 let ok="no" | |
7633 endif | |
7634 endif | |
7635 endif | |
7636 endif | |
7637 endif | |
7638 | |
7639 " call Dret("s:NetrwLocalRmFile ".ok) | |
7640 return ok | |
7641 endfun | |
7642 | |
7643 " --------------------------------------------------------------------- | |
7644 " s:NetrwLocalRename: rename a remote file or directory {{{2 | |
7645 fun! s:NetrwLocalRename(path) range | |
7646 " call Dfunc("NetrwLocalRename(path<".a:path.">)") | |
7647 | |
7648 " preparation for removing multiple files/directories | |
7649 let ctr = a:firstline | |
7650 let svpos= netrw#NetrwSavePosn() | |
7651 | |
7652 " rename files given by the markfilelist | |
7653 if exists("s:netrwmarkfilelist_{bufnr('%')}") | |
7654 for oldname in s:netrwmarkfilelist_{bufnr("%")} | |
7655 " call Decho("oldname<".oldname.">") | |
7656 if exists("subfrom") | |
7657 let newname= substitute(oldname,subfrom,subto,'') | |
7658 " call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">") | |
7659 else | |
7660 call inputsave() | |
7661 let newname= input("Moving ".oldname." to : ",oldname) | |
7662 call inputrestore() | |
7663 if newname =~ '^s/' | |
7664 let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','') | |
7665 let subto = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','') | |
7666 " call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">") | |
7667 let newname = substitute(oldname,subfrom,subto,'') | |
7668 endif | |
7669 endif | |
1698 | 7670 call rename(oldname,newname) |
1621 | 7671 endfor |
2034 | 7672 call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir) |
1621 | 7673 |
7674 else | |
7675 | |
7676 " attempt to rename files/directories | |
7677 while ctr <= a:lastline | |
2152 | 7678 exe "keepj ".ctr |
1621 | 7679 |
7680 " sanity checks | |
7681 if line(".") < w:netrw_bannercnt | |
7682 let ctr= ctr + 1 | |
7683 continue | |
7684 endif | |
7685 let curword= s:NetrwGetWord() | |
7686 if curword == "./" || curword == "../" | |
7687 let ctr= ctr + 1 | |
7688 continue | |
7689 endif | |
7690 | |
2152 | 7691 keepj norm! 0 |
1621 | 7692 let oldname= s:ComposePath(a:path,curword) |
7693 " call Decho("oldname<".oldname.">") | |
7694 | |
7695 call inputsave() | |
7696 let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e')) | |
7697 call inputrestore() | |
7698 | |
1698 | 7699 call rename(oldname,newname) |
1621 | 7700 " call Decho("renaming <".oldname."> to <".newname.">") |
7701 | |
7702 let ctr= ctr + 1 | |
7703 endwhile | |
7704 endif | |
7705 | |
7706 " refresh the directory | |
7707 " call Decho("refresh the directory listing") | |
2751 | 7708 keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) |
7709 keepj call netrw#NetrwRestorePosn(svpos) | |
1621 | 7710 |
7711 " call Dret("NetrwLocalRename") | |
7712 endfun | |
7713 | |
7714 " --------------------------------------------------------------------- | |
7715 " s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2 | |
7716 " | |
7717 " g:netrw_ Directory Is | |
7718 " fastbrowse Local Remote | |
7719 " slow 0 D D D=Deleting a buffer implies it will not be re-used (slow) | |
7720 " med 1 D H H=Hiding a buffer implies it may be re-used (fast) | |
7721 " fast 2 H H | |
7722 " | |
7723 " Deleting a buffer means that it will be re-loaded when examined, hence "slow". | |
7724 " Hiding a buffer means that it will be re-used when examined, hence "fast". | |
7725 " (re-using a buffer may not be as accurate) | |
7726 fun! s:LocalFastBrowser() | |
7727 " call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse) | |
7728 | |
7729 " initialize browselist, a list of buffer numbers that the local browser has used | |
7730 if !exists("s:netrw_browselist") | |
7731 " call Decho("initialize s:netrw_browselist") | |
7732 let s:netrw_browselist= [] | |
7733 endif | |
7734 | |
7735 " append current buffer to fastbrowse list | |
7736 if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1] | |
7737 " call Decho("appendng current buffer to browselist") | |
7738 call add(s:netrw_browselist,bufnr("%")) | |
7739 " call Decho("browselist=".string(s:netrw_browselist)) | |
7740 endif | |
7741 | |
7742 " enable autocmd events to handle refreshing/removing local browser buffers | |
7743 " If local browse buffer is currently showing: refresh it | |
7744 " If local browse buffer is currently hidden : wipe it | |
7745 if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1 | |
7746 " call Decho("setting up local-browser shell command refresh") | |
7747 let s:netrw_browser_shellcmd= 1 | |
7748 augroup AuNetrwShellCmd | |
7749 au! | |
7750 if (has("win32") || has("win95") || has("win64") || has("win16")) | |
2034 | 7751 " call Decho("autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()") |
1621 | 7752 au ShellCmdPost * call s:LocalBrowseShellCmdRefresh() |
7753 else | |
7754 au ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh() | |
2034 | 7755 " call Decho("autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()") |
1621 | 7756 endif |
7757 augroup END | |
7758 endif | |
7759 | |
7760 " user must have changed fastbrowse to its fast setting, so remove | |
7761 " the associated autocmd events | |
7762 if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd") | |
7763 " call Decho("remove AuNetrwShellCmd autcmd group") | |
7764 unlet s:netrw_browser_shellcmd | |
7765 augroup AuNetrwShellCmd | |
7766 au! | |
7767 augroup END | |
7768 augroup! AuNetrwShellCmd | |
7769 endif | |
7770 | |
7771 " call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">") | |
7772 endfun | |
7773 | |
7774 " --------------------------------------------------------------------- | |
2751 | 7775 " netrw#FileUrlRead: handles reading file:///* files {{{2 |
7776 fun! netrw#FileUrlRead(fname) | |
7777 " call Dfunc("netrw#FileUrlRead()") | |
7778 let fname2396 = netrw#RFC2396(a:fname) | |
7779 let fname2396e= fnameescape(fname2396) | |
7780 let plainfname= substitute(fname2396,'file://\(.*\)','\1',"") | |
7781 " call Decho("fname2396<".fname2396.">") | |
7782 " call Decho("plainfname<".plainfname.">") | |
7783 exe "sil doau BufReadPre ".fname2396e | |
7784 exe 'r '.plainfname | |
7785 exe 'file! '.plainfname | |
7786 1d | |
7787 setlocal nomod | |
7788 " call Dret("netrw#FileUrlRead") | |
7789 exe "sil doau BufReadPost ".fname2396e | |
7790 endfun | |
7791 | |
7792 " --------------------------------------------------------------------- | |
1121 | 7793 " Support Functions: {{{1 |
7794 | |
482 | 7795 " --------------------------------------------------------------------- |
1121 | 7796 " netrw#ErrorMsg: {{{2 |
7797 " 0=note = s:NOTE | |
7798 " 1=warning = s:WARNING | |
7799 " 2=error = s:ERROR | |
2751 | 7800 " Dec 03, 2009 : max errnum currently is 77 |
1121 | 7801 fun! netrw#ErrorMsg(level,msg,errnum) |
1209 | 7802 " call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow) |
7803 | |
7804 if a:level == 1 | |
7805 let level= "**warning** (netrw) " | |
7806 elseif a:level == 2 | |
7807 let level= "**error** (netrw) " | |
7808 else | |
7809 let level= "**note** (netrw) " | |
7810 endif | |
1621 | 7811 " call Decho("level=".level) |
1209 | 7812 |
7813 if g:netrw_use_errorwindow | |
7814 " (default) netrw creates a one-line window to show error/warning | |
7815 " messages (reliably displayed) | |
7816 | |
1621 | 7817 " record current window number for NetrwRestorePosn()'s benefit |
1209 | 7818 let s:winBeforeErr= winnr() |
1621 | 7819 " call Decho("s:winBeforeErr=".s:winBeforeErr) |
7820 | |
1209 | 7821 " getting messages out reliably is just plain difficult! |
7822 " This attempt splits the current window, creating a one line window. | |
7823 if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0 | |
1621 | 7824 " call Decho("write to NetrwMessage buffer") |
1209 | 7825 exe bufwinnr("NetrwMessage")."wincmd w" |
1621 | 7826 " call Decho("setlocal ma noro") |
7827 setlocal ma noro | |
2751 | 7828 keepj call setline(line("$")+1,level.a:msg) |
2152 | 7829 keepj $ |
1209 | 7830 else |
1621 | 7831 " call Decho("create a NetrwMessage buffer window") |
1209 | 7832 bo 1split |
2034 | 7833 call s:NetrwEnew() |
2751 | 7834 keepj call s:NetrwSafeOptions() |
1209 | 7835 setlocal bt=nofile |
2751 | 7836 keepj file NetrwMessage |
1621 | 7837 " call Decho("setlocal ma noro") |
7838 setlocal ma noro | |
1209 | 7839 call setline(line("$"),level.a:msg) |
7840 endif | |
1621 | 7841 " call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr()) |
1209 | 7842 if &fo !~ '[ta]' |
7843 syn clear | |
7844 syn match netrwMesgNote "^\*\*note\*\*" | |
7845 syn match netrwMesgWarning "^\*\*warning\*\*" | |
7846 syn match netrwMesgError "^\*\*error\*\*" | |
7847 hi link netrwMesgWarning WarningMsg | |
7848 hi link netrwMesgError Error | |
7849 endif | |
7850 setlocal noma ro bh=wipe | |
7851 | |
7852 else | |
7853 " (optional) netrw will show messages using echomsg. Even if the | |
7854 " message doesn't appear, at least it'll be recallable via :messages | |
1621 | 7855 " redraw! |
1121 | 7856 if a:level == s:WARNING |
1209 | 7857 echohl WarningMsg |
1121 | 7858 elseif a:level == s:ERROR |
1209 | 7859 echohl Error |
1121 | 7860 endif |
1209 | 7861 echomsg level.a:msg |
7862 " call Decho("echomsg ***netrw*** ".a:msg) | |
7863 echohl None | |
1121 | 7864 endif |
7865 | |
7866 " call Dret("netrw#ErrorMsg") | |
7867 endfun | |
7868 | |
7869 " --------------------------------------------------------------------- | |
1668 | 7870 " netrw#NetrwRestorePosn: restores the cursor and file position as saved by NetrwSavePosn() {{{2 |
7871 fun! netrw#NetrwRestorePosn(...) | |
7872 " call Dfunc("netrw#NetrwRestorePosn() a:0=".a:0." winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1)) | |
7873 let eikeep= &ei | |
7874 set ei=all | |
7875 if expand("%") == "NetrwMessage" | |
7876 exe s:winBeforeErr."wincmd w" | |
7877 endif | |
7878 | |
7879 if a:0 > 0 | |
7880 exe a:1 | |
7881 endif | |
7882 | |
7883 " restore window | |
7884 if exists("w:netrw_winnr") | |
2751 | 7885 " call Decho("restore window: exe sil! ".w:netrw_winnr."wincmd w") |
2152 | 7886 exe "sil! ".w:netrw_winnr."wincmd w" |
1668 | 7887 endif |
7888 if v:shell_error == 0 | |
7889 " as suggested by Bram M: redraw on no error | |
7890 " allows protocol error messages to remain visible | |
7891 " redraw! | |
7892 endif | |
7893 | |
7894 " restore top-of-screen line | |
7895 if exists("w:netrw_hline") | |
7896 " call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z") | |
2152 | 7897 exe "keepj norm! ".w:netrw_hline."G0z\<CR>" |
1668 | 7898 endif |
7899 | |
7900 " restore position | |
7901 if exists("w:netrw_line") && exists("w:netrw_col") | |
7902 " call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|") | |
2152 | 7903 exe "keepj norm! ".w:netrw_line."G0".w:netrw_col."\<bar>" |
1668 | 7904 endif |
7905 | |
7906 let &ei= eikeep | |
7907 " call Dret("netrw#NetrwRestorePosn") | |
7908 endfun | |
7909 | |
7910 " --------------------------------------------------------------------- | |
7911 " netrw#NetrwSavePosn: saves position of cursor on screen {{{2 | |
7912 fun! netrw#NetrwSavePosn() | |
7913 " call Dfunc("netrw#NetrwSavePosn()") | |
7914 " Save current line and column | |
7915 let w:netrw_winnr= winnr() | |
7916 let w:netrw_line = line(".") | |
7917 let w:netrw_col = virtcol(".") | |
2034 | 7918 " call Decho("currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col) |
1668 | 7919 |
7920 " Save top-of-screen line | |
2152 | 7921 keepj norm! H0 |
1668 | 7922 let w:netrw_hline= line(".") |
7923 | |
7924 " set up string holding position parameters | |
7925 let ret = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline | |
7926 | |
2751 | 7927 keepj call netrw#NetrwRestorePosn() |
1668 | 7928 " call Dret("netrw#NetrwSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline) |
7929 return ret | |
7930 endfun | |
7931 | |
7932 " ------------------------------------------------------------------------ | |
1121 | 7933 " netrw#RFC2396: converts %xx into characters {{{2 |
7934 fun! netrw#RFC2396(fname) | |
7935 " call Dfunc("netrw#RFC2396(fname<".a:fname.">)") | |
7936 let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t") | |
7937 " call Dret("netrw#RFC2396 ".fname) | |
7938 return fname | |
7939 endfun | |
7940 | |
7941 " --------------------------------------------------------------------- | |
1668 | 7942 " s:ComposePath: Appends a new part to a path taking different systems into consideration {{{2 |
7943 fun! s:ComposePath(base,subdir) | |
7944 " call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)") | |
7945 | |
7946 if(has("amiga")) | |
7947 " call Decho("amiga") | |
2034 | 7948 let ec = a:base[s:Strlen(a:base)-1] |
1668 | 7949 if ec != '/' && ec != ':' |
7950 let ret = a:base . "/" . a:subdir | |
7951 else | |
7952 let ret = a:base . a:subdir | |
7953 endif | |
7954 | |
7955 elseif a:subdir =~ '^\a:[/\\][^/\\]' && (has("win32") || has("win95") || has("win64") || has("win16")) | |
7956 " call Decho("windows") | |
7957 let ret= a:subdir | |
7958 | |
2034 | 7959 elseif a:base =~ '^\a:[/\\][^/\\]' && (has("win32") || has("win95") || has("win64") || has("win16")) |
7960 " call Decho("windows") | |
7961 if a:base =~ '[/\\]$' | |
7962 let ret= a:base.a:subdir | |
7963 else | |
7964 let ret= a:base."/".a:subdir | |
7965 endif | |
7966 | |
1668 | 7967 elseif a:base =~ '^\a\+://' |
7968 " call Decho("remote linux/macos") | |
7969 let urlbase = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\1','') | |
7970 let curpath = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\2','') | |
7971 if a:subdir == '../' | |
7972 if curpath =~ '[^/]/[^/]\+/$' | |
7973 let curpath= substitute(curpath,'[^/]\+/$','','') | |
7974 else | |
7975 let curpath="" | |
7976 endif | |
7977 let ret= urlbase.curpath | |
7978 else | |
7979 let ret= urlbase.curpath.a:subdir | |
7980 endif | |
7981 " call Decho("urlbase<".urlbase.">") | |
7982 " call Decho("curpath<".curpath.">") | |
7983 " call Decho("ret<".ret.">") | |
7984 | |
7985 else | |
7986 " call Decho("local linux/macos") | |
7987 let ret = substitute(a:base."/".a:subdir,"//","/","g") | |
7988 if a:base =~ '^//' | |
7989 " keeping initial '//' for the benefit of network share listing support | |
7990 let ret= '/'.ret | |
7991 endif | |
7992 let ret= simplify(ret) | |
7993 endif | |
7994 | |
7995 " call Dret("s:ComposePath ".ret) | |
7996 return ret | |
7997 endfun | |
7998 | |
7999 " --------------------------------------------------------------------- | |
1121 | 8000 " s:FileReadable: o/s independent filereadable {{{2 |
8001 fun! s:FileReadable(fname) | |
8002 " call Dfunc("s:FileReadable(fname<".a:fname.">)") | |
8003 | |
8004 if g:netrw_cygwin | |
8005 let ret= filereadable(substitute(a:fname,'/cygdrive/\(.\)','\1:/','')) | |
8006 else | |
8007 let ret= filereadable(a:fname) | |
8008 endif | |
8009 | |
8010 " call Dret("s:FileReadable ".ret) | |
8011 return ret | |
482 | 8012 endfun |
8013 | |
8014 " --------------------------------------------------------------------- | |
1121 | 8015 " s:GetTempfile: gets a tempname that'll work for various o/s's {{{2 |
8016 " Places correct suffix on end of temporary filename, | |
8017 " using the suffix provided with fname | |
8018 fun! s:GetTempfile(fname) | |
8019 " call Dfunc("s:GetTempfile(fname<".a:fname.">)") | |
8020 | |
8021 if !exists("b:netrw_tmpfile") | |
8022 " get a brand new temporary filename | |
8023 let tmpfile= tempname() | |
8024 " call Decho("tmpfile<".tmpfile."> : from tempname()") | |
1621 | 8025 |
1668 | 8026 let tmpfile= substitute(tmpfile,'\','/','ge') |
1121 | 8027 " call Decho("tmpfile<".tmpfile."> : chgd any \\ -> /") |
1621 | 8028 |
1121 | 8029 " sanity check -- does the temporary file's directory exist? |
8030 if !isdirectory(substitute(tmpfile,'[^/]\+$','','e')) | |
1668 | 8031 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
2751 | 8032 keepj call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2) |
1121 | 8033 " call Dret("s:GetTempfile getcwd<".getcwd().">") |
8034 return "" | |
8035 endif | |
1621 | 8036 |
1121 | 8037 " let netrw#NetSource() know about the tmpfile |
2034 | 8038 let s:netrw_tmpfile= tmpfile " used by netrw#NetSource() and netrw#NetrwBrowseX() |
1121 | 8039 " call Decho("tmpfile<".tmpfile."> s:netrw_tmpfile<".s:netrw_tmpfile.">") |
1621 | 8040 |
1121 | 8041 " o/s dependencies |
1621 | 8042 if g:netrw_cygwin != 0 |
1121 | 8043 let tmpfile = substitute(tmpfile,'^\(\a\):','/cygdrive/\1','e') |
8044 elseif has("win32") || has("win95") || has("win64") || has("win16") | |
1621 | 8045 if !exists("+shellslash") || !&ssl |
8046 let tmpfile = substitute(tmpfile,'/','\','g') | |
8047 endif | |
1121 | 8048 else |
1621 | 8049 let tmpfile = tmpfile |
1121 | 8050 endif |
8051 let b:netrw_tmpfile= tmpfile | |
8052 " call Decho("o/s dependent fixed tempname<".tmpfile.">") | |
8053 else | |
8054 " re-use temporary filename | |
8055 let tmpfile= b:netrw_tmpfile | |
8056 " call Decho("tmpfile<".tmpfile."> re-using") | |
8057 endif | |
8058 | |
8059 " use fname's suffix for the temporary file | |
8060 if a:fname != "" | |
8061 if a:fname =~ '\.[^./]\+$' | |
8062 " call Decho("using fname<".a:fname.">'s suffix") | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
8063 if a:fname =~ '\.tar\.gz$' || a:fname =~ '\.tar\.bz2$' || a:fname =~ '\.tar\.xz$' |
1121 | 8064 let suffix = ".tar".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e') |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
8065 elseif a:fname =~ '.txz$' |
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
8066 let suffix = ".txz".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e') |
1121 | 8067 else |
8068 let suffix = substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e') | |
8069 endif | |
8070 " call Decho("suffix<".suffix.">") | |
8071 let tmpfile= substitute(tmpfile,'\.tmp$','','e') | |
8072 " call Decho("chgd tmpfile<".tmpfile."> (removed any .tmp suffix)") | |
8073 let tmpfile .= suffix | |
8074 " call Decho("chgd tmpfile<".tmpfile."> (added ".suffix." suffix) netrw_fname<".b:netrw_fname.">") | |
8075 let s:netrw_tmpfile= tmpfile " supports netrw#NetSource() | |
8076 endif | |
8077 endif | |
8078 | |
1668 | 8079 " call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) |
1121 | 8080 " call Dret("s:GetTempfile <".tmpfile.">") |
8081 return tmpfile | |
1621 | 8082 endfun |
1121 | 8083 |
8084 " --------------------------------------------------------------------- | |
8085 " s:MakeSshCmd: transforms input command using USEPORT HOSTNAME into {{{2 | |
1668 | 8086 " a correct command for use with a system() call |
1121 | 8087 fun! s:MakeSshCmd(sshcmd) |
1621 | 8088 " call Dfunc("s:MakeSshCmd(sshcmd<".a:sshcmd.">) user<".s:user."> machine<".s:machine.">") |
1121 | 8089 let sshcmd = substitute(a:sshcmd,'\<HOSTNAME\>',s:user.s:machine,'') |
8090 if exists("g:netrw_port") && g:netrw_port != "" | |
1209 | 8091 let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.g:netrw_port,'') |
1121 | 8092 elseif exists("s:port") && s:port != "" |
1209 | 8093 let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.s:port,'') |
1121 | 8094 else |
8095 let sshcmd= substitute(sshcmd,"USEPORT ",'','') | |
8096 endif | |
8097 " call Dret("s:MakeSshCmd <".sshcmd.">") | |
8098 return sshcmd | |
482 | 8099 endfun |
8100 | |
8101 " --------------------------------------------------------------------- | |
1668 | 8102 " s:NetrwBMShow: {{{2 |
8103 fun! s:NetrwBMShow() | |
8104 " call Dfunc("s:NetrwBMShow()") | |
8105 redir => bmshowraw | |
8106 menu | |
8107 redir END | |
8108 let bmshowlist = split(bmshowraw,'\n') | |
8109 if bmshowlist != [] | |
8110 let bmshowfuncs= filter(bmshowlist,'v:val =~ "<SNR>\\d\\+_BMShow()"') | |
8111 if bmshowfuncs != [] | |
8112 let bmshowfunc = substitute(bmshowfuncs[0],'^.*:\(call.*BMShow()\).*$','\1','') | |
8113 if bmshowfunc =~ '^call.*BMShow()' | |
2751 | 8114 exe "sil! keepj ".bmshowfunc |
1668 | 8115 endif |
8116 endif | |
8117 endif | |
8118 " call Dret("s:NetrwBMShow : bmshowfunc<".(exists("bmshowfunc")? bmshowfunc : 'n/a').">") | |
8119 endfun | |
8120 | |
8121 " --------------------------------------------------------------------- | |
2751 | 8122 " s:NetrwCursor: responsible for setting cursorline/cursorcolumn based upon g:netrw_cursor {{{2 |
8123 fun! s:NetrwCursor() | |
2152 | 8124 if !exists("w:netrw_liststyle") |
8125 let w:netrw_liststyle= g:netrw_liststyle | |
8126 endif | |
2751 | 8127 " call Dfunc("s:NetrwCursor() liststyle=".w:netrw_liststyle." g:netrw_cursor=".g:netrw_cursor." s:netrw_usercuc=".s:netrw_usercuc." s:netrw_usercul=".s:netrw_usercul) |
8128 | |
8129 if &ft != "netrw" | |
8130 " if the current window isn't a netrw directory listing window, then use user cursorline/column | |
8131 " settings. Affects when netrw is used to read/write a file using scp/ftp/etc. | |
8132 let &l:cursorline = s:netrw_usercul | |
8133 let &l:cursorcolumn = s:netrw_usercuc | |
8134 | |
8135 elseif g:netrw_cursor == 4 | |
8136 " all styles: cursorline, cursorcolumn | |
8137 setlocal cursorline | |
8138 setlocal cursorcolumn | |
8139 | |
8140 elseif g:netrw_cursor == 3 | |
8141 " thin-long-tree: cursorline, user's cursorcolumn | |
8142 " wide : cursorline, cursorcolumn | |
8143 if w:netrw_liststyle == s:WIDELIST | |
2152 | 8144 setlocal cursorline |
2751 | 8145 setlocal cursorcolumn |
8146 else | |
2152 | 8147 setlocal cursorline |
2751 | 8148 let &l:cursorcolumn = s:netrw_usercuc |
8149 endif | |
8150 | |
8151 elseif g:netrw_cursor == 2 | |
8152 " thin-long-tree: cursorline, user's cursorcolumn | |
8153 " wide : cursorline, user's cursorcolumn | |
8154 let &l:cursorcolumn = s:netrw_usercuc | |
8155 setlocal cursorline | |
8156 | |
8157 elseif g:netrw_cursor == 1 | |
8158 " thin-long-tree: user's cursorline, user's cursorcolumn | |
8159 " wide : cursorline, user's cursorcolumn | |
8160 let &l:cursorcolumn = s:netrw_usercuc | |
8161 if w:netrw_liststyle == s:WIDELIST | |
8162 setlocal cursorline | |
8163 else | |
8164 let &l:cursorline = s:netrw_usercul | |
2152 | 8165 endif |
8166 | |
8167 else | |
2751 | 8168 " all styles: user's cursorline, user's cursorcolumn |
8169 let &l:cursorline = s:netrw_usercul | |
8170 let &l:cursorcolumn = s:netrw_usercuc | |
8171 endif | |
8172 | |
8173 " call Dret("s:NetrwCursor : l:cursorline=".&l:cursorline." l:cursorcolumn=".&l:cursorcolumn) | |
2152 | 8174 endfun |
8175 | |
8176 " --------------------------------------------------------------------- | |
8177 " s:RestoreCursorline: restores cursorline/cursorcolumn to original user settings {{{2 | |
8178 fun! s:RestoreCursorline() | |
8179 " call Dfunc("s:RestoreCursorline() currently, cul=".&l:cursorline." cuc=".&l:cursorcolumn." win#".winnr()." buf#".bufnr("%")) | |
2751 | 8180 if exists("s:netrw_usercul") |
8181 let &l:cursorline = s:netrw_usercul | |
8182 endif | |
8183 if exists("s:netrw_usercuc") | |
8184 let &l:cursorcolumn = s:netrw_usercuc | |
8185 endif | |
2152 | 8186 " call Dret("s:RestoreCursorline : restored cul=".&l:cursorline." cuc=".&l:cursorcolumn) |
8187 endfun | |
8188 | |
8189 " --------------------------------------------------------------------- | |
1668 | 8190 " s:NetrwDelete: Deletes a file. {{{2 |
8191 " Uses Steve Hall's idea to insure that Windows paths stay | |
8192 " acceptable. No effect on Unix paths. | |
8193 " Examples of use: let result= s:NetrwDelete(path) | |
8194 fun! s:NetrwDelete(path) | |
8195 " call Dfunc("s:NetrwDelete(path<".a:path.">)") | |
8196 | |
2034 | 8197 let path = netrw#WinPath(a:path) |
1668 | 8198 if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16")) |
8199 if exists("+shellslash") | |
8200 let sskeep= &shellslash | |
8201 setlocal noshellslash | |
8202 let result = delete(path) | |
8203 let &shellslash = sskeep | |
8204 else | |
8205 " call Decho("exe let result= ".a:cmd."('".path."')") | |
8206 let result= delete(path) | |
8207 endif | |
1621 | 8208 else |
1668 | 8209 " call Decho("let result= delete(".path.")") |
8210 let result= delete(path) | |
8211 endif | |
8212 if result < 0 | |
2751 | 8213 keepj call netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71) |
1668 | 8214 endif |
8215 | |
8216 " call Dret("s:NetrwDelete ".result) | |
8217 return result | |
1621 | 8218 endfun |
8219 | |
8220 " --------------------------------------------------------------------- | |
1121 | 8221 " s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2 |
2034 | 8222 fun! s:NetrwEnew(...) |
2152 | 8223 " call Dfunc("s:NetrwEnew() a:0=".a:0." bufnr($)=".bufnr("$")) |
2034 | 8224 " call Decho("curdir<".((a:0>0)? a:1 : "")."> buf#".bufnr("%")."<".bufname("%").">") |
1121 | 8225 |
1621 | 8226 " grab a function-local-variable copy of buffer variables |
2152 | 8227 " call Decho("make function-local copy of netrw variables") |
1121 | 8228 if exists("b:netrw_bannercnt") |let netrw_bannercnt = b:netrw_bannercnt |endif |
8229 if exists("b:netrw_browser_active") |let netrw_browser_active = b:netrw_browser_active |endif | |
8230 if exists("b:netrw_cpf") |let netrw_cpf = b:netrw_cpf |endif | |
8231 if exists("b:netrw_curdir") |let netrw_curdir = b:netrw_curdir |endif | |
8232 if exists("b:netrw_explore_bufnr") |let netrw_explore_bufnr = b:netrw_explore_bufnr |endif | |
8233 if exists("b:netrw_explore_indx") |let netrw_explore_indx = b:netrw_explore_indx |endif | |
8234 if exists("b:netrw_explore_line") |let netrw_explore_line = b:netrw_explore_line |endif | |
8235 if exists("b:netrw_explore_list") |let netrw_explore_list = b:netrw_explore_list |endif | |
8236 if exists("b:netrw_explore_listlen")|let netrw_explore_listlen = b:netrw_explore_listlen|endif | |
8237 if exists("b:netrw_explore_mtchcnt")|let netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif | |
8238 if exists("b:netrw_fname") |let netrw_fname = b:netrw_fname |endif | |
8239 if exists("b:netrw_lastfile") |let netrw_lastfile = b:netrw_lastfile |endif | |
8240 if exists("b:netrw_liststyle") |let netrw_liststyle = b:netrw_liststyle |endif | |
8241 if exists("b:netrw_method") |let netrw_method = b:netrw_method |endif | |
8242 if exists("b:netrw_option") |let netrw_option = b:netrw_option |endif | |
8243 if exists("b:netrw_prvdir") |let netrw_prvdir = b:netrw_prvdir |endif | |
8244 | |
2751 | 8245 keepj call s:NetrwOptionRestore("w:") |
1621 | 8246 " call Decho("generate a buffer with keepjumps keepalt enew!") |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
8247 let netrw_keepdiff= &l:diff |
2751 | 8248 " COMBAK: Benzinger: using tree mode, vim -o Foo/ file shows Foo/ Foo/ instead. Place return here, problem goes away (beeps result, but who knows) |
8249 " call Dredir("Benzinger 1:","ls!") | |
2152 | 8250 keepj keepalt enew! |
2751 | 8251 " call Dredir("Benzinger 2:","ls!") |
8252 " COMBAK: Benzinger: using tree mode, vim -o Foo/ file shows Foo/ Foo/ instead. Place return here, problem remains. | |
2420
6de9efd58dc0
Updated runtime files. New netrw plugin version.
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
8253 let &l:diff= netrw_keepdiff |
2152 | 8254 " call Decho("bufnr($)=".bufnr("$")) |
2751 | 8255 keepj call s:NetrwOptionSave("w:") |
1621 | 8256 |
8257 " copy function-local-variables to buffer variable equivalents | |
2152 | 8258 " call Decho("copy function-local variables back to buffer netrw variables") |
1121 | 8259 if exists("netrw_bannercnt") |let b:netrw_bannercnt = netrw_bannercnt |endif |
8260 if exists("netrw_browser_active") |let b:netrw_browser_active = netrw_browser_active |endif | |
8261 if exists("netrw_cpf") |let b:netrw_cpf = netrw_cpf |endif | |
8262 if exists("netrw_curdir") |let b:netrw_curdir = netrw_curdir |endif | |
8263 if exists("netrw_explore_bufnr") |let b:netrw_explore_bufnr = netrw_explore_bufnr |endif | |
8264 if exists("netrw_explore_indx") |let b:netrw_explore_indx = netrw_explore_indx |endif | |
8265 if exists("netrw_explore_line") |let b:netrw_explore_line = netrw_explore_line |endif | |
8266 if exists("netrw_explore_list") |let b:netrw_explore_list = netrw_explore_list |endif | |
8267 if exists("netrw_explore_listlen")|let b:netrw_explore_listlen = netrw_explore_listlen|endif | |
8268 if exists("netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt = netrw_explore_mtchcnt|endif | |
8269 if exists("netrw_fname") |let b:netrw_fname = netrw_fname |endif | |
8270 if exists("netrw_lastfile") |let b:netrw_lastfile = netrw_lastfile |endif | |
8271 if exists("netrw_liststyle") |let b:netrw_liststyle = netrw_liststyle |endif | |
8272 if exists("netrw_method") |let b:netrw_method = netrw_method |endif | |
8273 if exists("netrw_option") |let b:netrw_option = netrw_option |endif | |
8274 if exists("netrw_prvdir") |let b:netrw_prvdir = netrw_prvdir |endif | |
8275 | |
2034 | 8276 if a:0 > 0 |
8277 let b:netrw_curdir= a:1 | |
8278 if b:netrw_curdir =~ '/$' | |
8279 if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST | |
8280 file NetrwTreeListing | |
2152 | 8281 set bt=nowrite noswf |
2751 | 8282 nno <silent> <buffer> [ :sil call <SID>TreeListMove('[')<cr> |
8283 nno <silent> <buffer> ] :sil call <SID>TreeListMove(']')<cr> | |
2034 | 8284 else |
2152 | 8285 exe "sil! keepalt file ".fnameescape(b:netrw_curdir) |
2034 | 8286 endif |
1621 | 8287 endif |
8288 endif | |
8289 | |
8290 " call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#").">") | |
8291 endfun | |
8292 | |
8293 " ------------------------------------------------------------------------ | |
8294 " s:NetrwSaveWordPosn: used to keep cursor on same word after refresh, {{{2 | |
8295 " changed sorting, etc. Also see s:NetrwRestoreWordPosn(). | |
8296 fun! s:NetrwSaveWordPosn() | |
8297 " call Dfunc("NetrwSaveWordPosn()") | |
8298 let s:netrw_saveword= '^'.fnameescape(getline('.')).'$' | |
8299 " call Dret("NetrwSaveWordPosn : saveword<".s:netrw_saveword.">") | |
8300 endfun | |
8301 | |
8302 " --------------------------------------------------------------------- | |
8303 " s:NetrwRestoreWordPosn: used to keep cursor on same word after refresh, {{{2 | |
8304 " changed sorting, etc. Also see s:NetrwSaveWordPosn(). | |
8305 fun! s:NetrwRestoreWordPosn() | |
8306 " call Dfunc("NetrwRestoreWordPosn()") | |
2751 | 8307 sil! call search(s:netrw_saveword,'w') |
1621 | 8308 " call Dret("NetrwRestoreWordPosn") |
8309 endfun | |
8310 | |
8311 " --------------------------------------------------------------------- | |
1668 | 8312 " s:RestoreBufVars: {{{2 |
8313 fun! s:RestoreBufVars() | |
8314 " call Dfunc("s:RestoreBufVars()") | |
8315 | |
8316 if exists("s:netrw_curdir") |let b:netrw_curdir = s:netrw_curdir |endif | |
8317 if exists("s:netrw_lastfile") |let b:netrw_lastfile = s:netrw_lastfile |endif | |
8318 if exists("s:netrw_method") |let b:netrw_method = s:netrw_method |endif | |
8319 if exists("s:netrw_fname") |let b:netrw_fname = s:netrw_fname |endif | |
8320 if exists("s:netrw_machine") |let b:netrw_machine = s:netrw_machine |endif | |
8321 if exists("s:netrw_browser_active")|let b:netrw_browser_active = s:netrw_browser_active|endif | |
8322 | |
8323 " call Dret("s:RestoreBufVars") | |
8324 endfun | |
8325 | |
8326 " --------------------------------------------------------------------- | |
1121 | 8327 " s:RemotePathAnalysis: {{{2 |
8328 fun! s:RemotePathAnalysis(dirname) | |
8329 " call Dfunc("s:RemotePathAnalysis()") | |
8330 | |
8331 let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/:#]\+\)\%([:#]\(\d\+\)\)\=/\(.*\)$' | |
8332 let s:method = substitute(a:dirname,dirpat,'\1','') | |
8333 let s:user = substitute(a:dirname,dirpat,'\2','') | |
8334 let s:machine = substitute(a:dirname,dirpat,'\3','') | |
8335 let s:port = substitute(a:dirname,dirpat,'\4','') | |
8336 let s:path = substitute(a:dirname,dirpat,'\5','') | |
8337 let s:fname = substitute(a:dirname,'^.*/\ze.','','') | |
8338 | |
8339 " call Decho("set up s:method <".s:method .">") | |
8340 " call Decho("set up s:user <".s:user .">") | |
8341 " call Decho("set up s:machine<".s:machine.">") | |
8342 " call Decho("set up s:port <".s:port.">") | |
8343 " call Decho("set up s:path <".s:path .">") | |
8344 " call Decho("set up s:fname <".s:fname .">") | |
8345 | |
8346 " call Dret("s:RemotePathAnalysis") | |
8347 endfun | |
8348 | |
8349 " --------------------------------------------------------------------- | |
1668 | 8350 " s:RemoteSystem: runs a command on a remote host using ssh {{{2 |
8351 " Returns status | |
8352 " Runs system() on | |
8353 " [cd REMOTEDIRPATH;] a:cmd | |
8354 " Note that it doesn't do shellescape(a:cmd)! | |
8355 fun! s:RemoteSystem(cmd) | |
8356 " call Dfunc("s:RemoteSystem(cmd<".a:cmd.">)") | |
8357 if !executable(g:netrw_ssh_cmd) | |
2751 | 8358 keepj call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52) |
1668 | 8359 elseif !exists("b:netrw_curdir") |
2751 | 8360 keepj call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53) |
1668 | 8361 else |
8362 let cmd = s:MakeSshCmd(g:netrw_ssh_cmd." USEPORT HOSTNAME") | |
8363 let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','') | |
8364 if remotedir != "" | |
8365 let cmd= cmd.' cd '.shellescape(remotedir).";" | |
8366 else | |
8367 let cmd= cmd.' ' | |
8368 endif | |
8369 let cmd= cmd.a:cmd | |
8370 " call Decho("call system(".cmd.")") | |
8371 let ret= system(cmd) | |
8372 endif | |
8373 " call Dret("s:RemoteSystem ".ret) | |
8374 return ret | |
1121 | 8375 endfun |
8376 | |
8377 " --------------------------------------------------------------------- | |
1621 | 8378 " s:RestoreWinVars: (used by Explore() and NetrwSplit()) {{{2 |
1121 | 8379 fun! s:RestoreWinVars() |
8380 " call Dfunc("s:RestoreWinVars()") | |
8381 if exists("s:bannercnt") |let w:netrw_bannercnt = s:bannercnt |unlet s:bannercnt |endif | |
8382 if exists("s:col") |let w:netrw_col = s:col |unlet s:col |endif | |
8383 if exists("s:curdir") |let w:netrw_curdir = s:curdir |unlet s:curdir |endif | |
8384 if exists("s:explore_bufnr") |let w:netrw_explore_bufnr = s:explore_bufnr |unlet s:explore_bufnr |endif | |
8385 if exists("s:explore_indx") |let w:netrw_explore_indx = s:explore_indx |unlet s:explore_indx |endif | |
8386 if exists("s:explore_line") |let w:netrw_explore_line = s:explore_line |unlet s:explore_line |endif | |
8387 if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif | |
8388 if exists("s:explore_list") |let w:netrw_explore_list = s:explore_list |unlet s:explore_list |endif | |
8389 if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif | |
8390 if exists("s:fpl") |let w:netrw_fpl = s:fpl |unlet s:fpl |endif | |
8391 if exists("s:hline") |let w:netrw_hline = s:hline |unlet s:hline |endif | |
8392 if exists("s:line") |let w:netrw_line = s:line |unlet s:line |endif | |
8393 if exists("s:liststyle") |let w:netrw_liststyle = s:liststyle |unlet s:liststyle |endif | |
8394 if exists("s:method") |let w:netrw_method = s:method |unlet s:method |endif | |
8395 if exists("s:prvdir") |let w:netrw_prvdir = s:prvdir |unlet s:prvdir |endif | |
8396 if exists("s:treedict") |let w:netrw_treedict = s:treedict |unlet s:treedict |endif | |
8397 if exists("s:treetop") |let w:netrw_treetop = s:treetop |unlet s:treetop |endif | |
8398 if exists("s:winnr") |let w:netrw_winnr = s:winnr |unlet s:winnr |endif | |
8399 " call Dret("s:RestoreWinVars") | |
8400 endfun | |
8401 | |
8402 " --------------------------------------------------------------------- | |
1621 | 8403 " s:Rexplore: implements returning from a buffer to a netrw directory {{{2 |
8404 " | |
8405 " s:SetRexDir() sets up <2-leftmouse> maps (if g:netrw_retmap | |
8406 " is true) and a command, :Rexplore, which call this function. | |
8407 " | |
8408 " s:nbcd_curpos_{bufnr('%')} is set up by s:NetrwBrowseChgDir() | |
8409 fun! s:NetrwRexplore(islocal,dirname) | |
2751 | 8410 " call Dfunc("s:NetrwRexplore() w:netrw_rexlocal=".w:netrw_rexlocal." w:netrw_rexdir<".w:netrw_rexdir.">") |
8411 if w:netrw_rexlocal | |
8412 keepj call netrw#LocalBrowseCheck(w:netrw_rexdir) | |
1621 | 8413 else |
2751 | 8414 keepj call s:NetrwBrowse(0,w:netrw_rexdir) |
1621 | 8415 endif |
8416 if exists("s:nbcd_curpos_{bufnr('%')}") | |
2751 | 8417 keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')}) |
1621 | 8418 unlet s:nbcd_curpos_{bufnr('%')} |
8419 endif | |
2034 | 8420 if exists("s:explore_match") |
8421 exe "2match netrwMarkFile /".s:explore_match."/" | |
8422 endif | |
1621 | 8423 " call Dret("s:NetrwRexplore") |
8424 endfun | |
8425 | |
8426 " --------------------------------------------------------------------- | |
1121 | 8427 " s:SaveBufVars: {{{2 |
8428 fun! s:SaveBufVars() | |
2034 | 8429 " call Dfunc("s:SaveBufVars() buf#".bufnr("%")) |
1121 | 8430 |
8431 if exists("b:netrw_curdir") |let s:netrw_curdir = b:netrw_curdir |endif | |
8432 if exists("b:netrw_lastfile") |let s:netrw_lastfile = b:netrw_lastfile |endif | |
8433 if exists("b:netrw_method") |let s:netrw_method = b:netrw_method |endif | |
8434 if exists("b:netrw_fname") |let s:netrw_fname = b:netrw_fname |endif | |
8435 if exists("b:netrw_machine") |let s:netrw_machine = b:netrw_machine |endif | |
8436 if exists("b:netrw_browser_active")|let s:netrw_browser_active = b:netrw_browser_active|endif | |
8437 | |
8438 " call Dret("s:SaveBufVars") | |
8439 endfun | |
8440 | |
8441 " --------------------------------------------------------------------- | |
1621 | 8442 " s:SaveWinVars: (used by Explore() and NetrwSplit()) {{{2 |
1121 | 8443 fun! s:SaveWinVars() |
2034 | 8444 " call Dfunc("s:SaveWinVars() win#".winnr()) |
1121 | 8445 if exists("w:netrw_bannercnt") |let s:bannercnt = w:netrw_bannercnt |endif |
8446 if exists("w:netrw_col") |let s:col = w:netrw_col |endif | |
8447 if exists("w:netrw_curdir") |let s:curdir = w:netrw_curdir |endif | |
8448 if exists("w:netrw_explore_bufnr") |let s:explore_bufnr = w:netrw_explore_bufnr |endif | |
8449 if exists("w:netrw_explore_indx") |let s:explore_indx = w:netrw_explore_indx |endif | |
8450 if exists("w:netrw_explore_line") |let s:explore_line = w:netrw_explore_line |endif | |
8451 if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif | |
8452 if exists("w:netrw_explore_list") |let s:explore_list = w:netrw_explore_list |endif | |
8453 if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif | |
8454 if exists("w:netrw_fpl") |let s:fpl = w:netrw_fpl |endif | |
8455 if exists("w:netrw_hline") |let s:hline = w:netrw_hline |endif | |
8456 if exists("w:netrw_line") |let s:line = w:netrw_line |endif | |
8457 if exists("w:netrw_liststyle") |let s:liststyle = w:netrw_liststyle |endif | |
8458 if exists("w:netrw_method") |let s:method = w:netrw_method |endif | |
8459 if exists("w:netrw_prvdir") |let s:prvdir = w:netrw_prvdir |endif | |
8460 if exists("w:netrw_treedict") |let s:treedict = w:netrw_treedict |endif | |
8461 if exists("w:netrw_treetop") |let s:treetop = w:netrw_treetop |endif | |
8462 if exists("w:netrw_winnr") |let s:winnr = w:netrw_winnr |endif | |
8463 " call Dret("s:SaveWinVars") | |
8464 endfun | |
8465 | |
8466 " --------------------------------------------------------------------- | |
1621 | 8467 " s:SetBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck()) {{{2 |
482 | 8468 " To allow separate windows to have their own activities, such as |
8469 " Explore **/pattern, several variables have been made window-oriented. | |
8470 " However, when the user splits a browser window (ex: ctrl-w s), these | |
559 | 8471 " variables are not inherited by the new window. SetBufWinVars() and |
482 | 8472 " UseBufWinVars() get around that. |
559 | 8473 fun! s:SetBufWinVars() |
2034 | 8474 " call Dfunc("s:SetBufWinVars() win#".winnr()) |
1121 | 8475 if exists("w:netrw_liststyle") |let b:netrw_liststyle = w:netrw_liststyle |endif |
8476 if exists("w:netrw_bannercnt") |let b:netrw_bannercnt = w:netrw_bannercnt |endif | |
8477 if exists("w:netrw_method") |let b:netrw_method = w:netrw_method |endif | |
8478 if exists("w:netrw_prvdir") |let b:netrw_prvdir = w:netrw_prvdir |endif | |
8479 if exists("w:netrw_explore_indx") |let b:netrw_explore_indx = w:netrw_explore_indx |endif | |
8480 if exists("w:netrw_explore_listlen")|let b:netrw_explore_listlen= w:netrw_explore_listlen|endif | |
8481 if exists("w:netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt= w:netrw_explore_mtchcnt|endif | |
8482 if exists("w:netrw_explore_bufnr") |let b:netrw_explore_bufnr = w:netrw_explore_bufnr |endif | |
8483 if exists("w:netrw_explore_line") |let b:netrw_explore_line = w:netrw_explore_line |endif | |
8484 if exists("w:netrw_explore_list") |let b:netrw_explore_list = w:netrw_explore_list |endif | |
8485 " call Dret("s:SetBufWinVars") | |
482 | 8486 endfun |
8487 | |
8488 " --------------------------------------------------------------------- | |
1621 | 8489 " s:SetRexDir: set directory for :Rexplore {{{2 |
8490 fun! s:SetRexDir(islocal,dirname) | |
8491 " call Dfunc("s:SetRexDir(islocal=".a:islocal." dirname<".a:dirname.">)") | |
2751 | 8492 let w:netrw_rexdir = a:dirname |
8493 let w:netrw_rexlocal = a:islocal | |
1621 | 8494 " call Dret("s:SetRexDir") |
8495 endfun | |
8496 | |
8497 " --------------------------------------------------------------------- | |
8498 " s:Strlen: this function returns the length of a string, even if its {{{2 | |
8499 " using two-byte etc characters. | |
2034 | 8500 " Solution from Nicolai Weibull, vim docs (:help strlen()), Tony Mechelynck, |
8501 " and a bit from me. | |
8502 " if g:netrw_xstrlen is zero (default), then the builtin strlen() function is used. | |
1621 | 8503 fun! s:Strlen(x) |
8504 " call Dfunc("s:Strlen(x<".a:x.">") | |
8505 if g:netrw_xstrlen == 1 | |
8506 " number of codepoints (Latin a + combining circumflex is two codepoints) | |
8507 " (comment from TM, solution from NW) | |
8508 let ret= strlen(substitute(a:x,'.','c','g')) | |
8509 | |
8510 elseif g:netrw_xstrlen == 2 | |
8511 " number of spacing codepoints (Latin a + combining circumflex is one spacing | |
8512 " codepoint; a hard tab is one; wide and narrow CJK are one each; etc.) | |
8513 " (comment from TM, solution from TM) | |
8514 let ret=strlen(substitute(a:x, '.\Z', 'x', 'g')) | |
8515 | |
8516 elseif g:netrw_xstrlen == 3 | |
8517 " virtual length (counting, for instance, tabs as anything between 1 and | |
8518 " 'tabstop', wide CJK as 2 rather than 1, Arabic alif as zero when immediately | |
8519 " preceded by lam, one otherwise, etc.) | |
8520 " (comment from TM, solution from me) | |
8521 let modkeep= &mod | |
2152 | 8522 exe "keepj norm! o\<esc>" |
1621 | 8523 call setline(line("."),a:x) |
8524 let ret= virtcol("$") - 1 | |
2152 | 8525 keepj d |
1621 | 8526 let &mod= modkeep |
8527 | |
8528 else | |
8529 " at least give a decent default | |
2034 | 8530 let ret= strlen(a:x) |
1621 | 8531 endif |
8532 " call Dret("s:Strlen ".ret) | |
8533 return ret | |
8534 endfun | |
8535 | |
8536 " --------------------------------------------------------------------- | |
8537 " s:TreeListMove: {{{2 | |
8538 fun! s:TreeListMove(dir) | |
8539 " call Dfunc("s:TreeListMove(dir<".a:dir.">)") | |
8540 let curline = getline('.') | |
8541 let prvline = (line(".") > 1)? getline(line(".")-1) : '' | |
8542 let nxtline = (line(".") < line("$"))? getline(line(".")+1) : '' | |
8543 let curindent= substitute(curline,'^\([| ]*\).\{-}$','\1','') | |
8544 let indentm1 = substitute(curindent,'^| ','','') | |
8545 " call Decho("prvline <".prvline."> #".line(".")-1) | |
8546 " call Decho("curline <".curline."> #".line(".")) | |
8547 " call Decho("nxtline <".nxtline."> #".line(".")+1) | |
8548 " call Decho("curindent<".curindent.">") | |
8549 " call Decho("indentm1 <".indentm1.">") | |
8550 | |
8551 if curline !~ '/$' | |
8552 " call Decho('regfile') | |
8553 if a:dir == '[' && prvline != '' | |
2152 | 8554 keepj norm! 0 |
1621 | 8555 let nl = search('^'.indentm1.'[^|]','bWe') " search backwards from regular file |
8556 " call Decho("regfile srch back: ".nl) | |
8557 elseif a:dir == ']' && nxtline != '' | |
2152 | 8558 keepj norm! $ |
1621 | 8559 let nl = search('^'.indentm1.'[^|]','We') " search forwards from regular file |
8560 " call Decho("regfile srch fwd: ".nl) | |
8561 endif | |
8562 | |
8563 elseif a:dir == '[' && prvline != '' | |
2152 | 8564 keepj norm! 0 |
1621 | 8565 let curline= line(".") |
8566 let nl = search('^'.curindent.'[^|]','bWe') " search backwards From directory, same indentation | |
8567 " call Decho("dir srch back ind: ".nl) | |
8568 if nl != 0 | |
8569 if line(".") == curline-1 | |
8570 let nl= search('^'.indentm1.'[^|]','bWe') " search backwards from directory, indentation - 1 | |
8571 " call Decho("dir srch back ind-1: ".nl) | |
8572 endif | |
8573 endif | |
8574 | |
8575 elseif a:dir == ']' && nxtline != '' | |
2152 | 8576 keepj norm! $ |
1621 | 8577 let curline = line(".") |
8578 let nl = search('^'.curindent.'[^|]','We') " search forwards from directory, same indentation | |
8579 " call Decho("dir srch fwd ind: ".nl) | |
8580 if nl != 0 | |
8581 if line(".") == curline+1 | |
8582 let nl= search('^'.indentm1.'[^|]','We') " search forwards from directory, indentation - 1 | |
8583 " call Decho("dir srch fwd ind-1: ".nl) | |
8584 endif | |
8585 endif | |
8586 | |
8587 endif | |
8588 | |
8589 " call Dret("s:TreeListMove") | |
8590 endfun | |
8591 | |
8592 " --------------------------------------------------------------------- | |
1668 | 8593 " s:UpdateBuffersMenu: does emenu Buffers.Refresh (but due to locale, the menu item may not be called that) {{{2 |
8594 " The Buffers.Refresh menu calls s:BMShow(); unfortunately, that means that that function | |
8595 " can't be called except via emenu. But due to locale, that menu line may not be called | |
8596 " Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway. | |
8597 fun! s:UpdateBuffersMenu() | |
8598 " call Dfunc("s:UpdateBuffersMenu()") | |
2751 | 8599 if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu |
1668 | 8600 try |
2751 | 8601 sil emenu Buffers.Refresh\ menu |
1668 | 8602 catch /^Vim\%((\a\+)\)\=:E/ |
8603 let v:errmsg= "" | |
2751 | 8604 sil keepj call s:NetrwBMShow() |
1668 | 8605 endtry |
8606 endif | |
8607 " call Dret("s:UpdateBuffersMenu") | |
8608 endfun | |
8609 | |
8610 " --------------------------------------------------------------------- | |
1621 | 8611 " s:UseBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck() {{{2 |
2751 | 8612 " Matching function to s:SetBufWinVars() |
482 | 8613 fun! s:UseBufWinVars() |
1121 | 8614 " call Dfunc("s:UseBufWinVars()") |
8615 if exists("b:netrw_liststyle") && !exists("w:netrw_liststyle") |let w:netrw_liststyle = b:netrw_liststyle |endif | |
482 | 8616 if exists("b:netrw_bannercnt") && !exists("w:netrw_bannercnt") |let w:netrw_bannercnt = b:netrw_bannercnt |endif |
8617 if exists("b:netrw_method") && !exists("w:netrw_method") |let w:netrw_method = b:netrw_method |endif | |
8618 if exists("b:netrw_prvdir") && !exists("w:netrw_prvdir") |let w:netrw_prvdir = b:netrw_prvdir |endif | |
8619 if exists("b:netrw_explore_indx") && !exists("w:netrw_explore_indx") |let w:netrw_explore_indx = b:netrw_explore_indx |endif | |
8620 if exists("b:netrw_explore_listlen") && !exists("w:netrw_explore_listlen")|let w:netrw_explore_listlen = b:netrw_explore_listlen|endif | |
8621 if exists("b:netrw_explore_mtchcnt") && !exists("w:netrw_explore_mtchcnt")|let w:netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif | |
8622 if exists("b:netrw_explore_bufnr") && !exists("w:netrw_explore_bufnr") |let w:netrw_explore_bufnr = b:netrw_explore_bufnr |endif | |
8623 if exists("b:netrw_explore_line") && !exists("w:netrw_explore_line") |let w:netrw_explore_line = b:netrw_explore_line |endif | |
8624 if exists("b:netrw_explore_list") && !exists("w:netrw_explore_list") |let w:netrw_explore_list = b:netrw_explore_list |endif | |
1121 | 8625 " call Dret("s:UseBufWinVars") |
482 | 8626 endfun |
8627 | |
559 | 8628 " --------------------------------------------------------------------- |
2034 | 8629 " netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2 |
8630 fun! netrw#WinPath(path) | |
8631 " call Dfunc("netrw#WinPath(path<".a:path.">)") | |
8632 if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16")) | |
8633 " remove cygdrive prefix, if present | |
8634 let path = substitute(a:path,'/cygdrive/\(.\)','\1:','') | |
1668 | 8635 " remove trailing slash (Win95) |
2034 | 8636 let path = substitute(path, '\(\\\|/\)$', '', 'g') |
1668 | 8637 " remove escaped spaces |
8638 let path = substitute(path, '\ ', ' ', 'g') | |
8639 " convert slashes to backslashes | |
8640 let path = substitute(path, '/', '\', 'g') | |
8641 else | |
8642 let path= a:path | |
8643 endif | |
2034 | 8644 " call Dret("netrw#WinPath <".path.">") |
1668 | 8645 return path |
8646 endfun | |
8647 | |
8648 " --------------------------------------------------------------------- | |
650 | 8649 " Settings Restoration: {{{2 |
482 | 8650 let &cpo= s:keepcpo |
8651 unlet s:keepcpo | |
8652 | |
8653 " ------------------------------------------------------------------------ | |
8654 " Modelines: {{{1 | |
8655 " vim:ts=8 fdm=marker |