~ubuntu-branches/ubuntu/maverick/vim/maverick

« back to all changes in this revision

Viewing changes to runtime/autoload/netrw.vim

  • Committer: Bazaar Package Importer
  • Author(s): Steve Langasek
  • Date: 2009-05-04 11:13:42 UTC
  • mfrom: (1.1.8 upstream) (0.1.2 squeeze)
  • Revision ID: james.westby@ubuntu.com-20090504111342-60miqybsixdpc345
Tags: 2:7.2.148-2ubuntu1
* Merge from Debian unstable, remaining changes:
  - debian/runtime/vimrc: "syntax on" is a sane default for non-tiny vim.
  - runtime/syntax/debcontrol.vim:
    + Add "metapackages" to the list of valid sections.
  - runtime/syntax/grub.vim:
    + Add Ubuntu-specific 'quiet' keyword.
  - Drop vim-lesstif package and lesstif2-dev build-dependency.
  - Enable Python interpreter on basic builds.
  - Disable autoindent, line-wrapping, and backup files by default.
* Dropped changes, merged in Debian:
  - Add jaunty, karmic to the list of valid suites.
  - runtime/syntax/debsources.vim:
    + Add "jaunty" to debsourcesDistrKeyword
  - Create a .pot file for translations.
* Drop gutsy from the list of valid distro series, it's been EOLed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
" netrw.vim: Handles file transfer and remote directory listing across
2
2
"            AUTOLOAD SECTION
3
 
" Date:         Aug 08, 2008
4
 
" Version:      132
 
3
" Date:         Jan 14, 2009
 
4
" Version:      135
5
5
" Maintainer:   Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
6
6
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
7
7
" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
22
22
if &cp || exists("g:loaded_netrw")
23
23
  finish
24
24
endif
 
25
let g:loaded_netrw = "v135"
 
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
25
32
if !exists("s:NOTE")
26
33
 let s:NOTE    = 0
27
34
 let s:WARNING = 1
28
35
 let s:ERROR   = 2
29
36
endif
30
 
let g:loaded_netrw = "v132"
31
37
 
32
38
" sanity checks
33
39
if v:version < 700
45
51
" ======================
46
52
 
47
53
" ---------------------------------------------------------------------
 
54
" NetrwInit: function to initialize variables {{{2
 
55
fun s:NetrwInit(varname,value)
 
56
  if !exists(a:varname)
 
57
   if type(a:value) == 0
 
58
    exe "let ".a:varname."=".a:value
 
59
   elseif type(a:value) == 1
 
60
    exe "let ".a:varname."="."'".a:value."'"
 
61
   else
 
62
    exe "let ".a:varname."=".a:value
 
63
  endif
 
64
 endif
 
65
endfun
 
66
 
 
67
" ---------------------------------------------------------------------
48
68
"  Netrw Constants: {{{2
49
 
if !exists("g:NETRW_BOOKMARKMAX")
50
 
 let g:NETRW_BOOKMARKMAX= 0
51
 
endif
52
 
if !exists("g:NETRW_DIRHIST_CNT")
53
 
 let g:NETRW_DIRHIST_CNT= 0
54
 
endif
 
69
call s:NetrwInit("g:netrw_dirhist_cnt",0)
55
70
if !exists("s:LONGLIST")
56
 
 let s:THINLIST = 0
57
 
 let s:LONGLIST = 1
58
 
 let s:WIDELIST = 2
59
 
 let s:TREELIST = 3
60
 
 let s:MAXLIST  = 4
 
71
 call s:NetrwInit("s:THINLIST",0)
 
72
 call s:NetrwInit("s:LONGLIST",1)
 
73
 call s:NetrwInit("s:WIDELIST",2)
 
74
 call s:NetrwInit("s:TREELIST",3)
 
75
 call s:NetrwInit("s:MAXLIST" ,4)
61
76
endif
62
77
 
63
78
" ---------------------------------------------------------------------
64
79
" Default values for netrw's global protocol variables {{{2
65
80
if !exists("g:netrw_dav_cmd")
 
81
 if executable("cadaver")
66
82
  let g:netrw_dav_cmd   = "cadaver"
 
83
 elseif executable("curl")
 
84
  let g:netrw_dav_cmd   = "curl"
 
85
 else
 
86
  let g:netrw_dav_cmd   = ""
 
87
 endif
67
88
endif
68
89
if !exists("g:netrw_fetch_cmd")
69
90
 if executable("fetch")
78
99
if !exists("g:netrw_http_cmd")
79
100
 if executable("elinks")
80
101
  let g:netrw_http_cmd = "elinks"
81
 
  let g:netrw_http_xcmd= "-dump >"
 
102
  if !exists("g:netrw_http_xcmd")
 
103
   let g:netrw_http_xcmd= "-dump >"
 
104
  endif
82
105
 elseif executable("links")
83
106
  let g:netrw_http_cmd = "links"
84
 
  let g:netrw_http_xcmd= "-dump >"
 
107
  if !exists("g:netrw_http_xcmd")
 
108
   let g:netrw_http_xcmd= "-dump >"
 
109
  endif
85
110
 elseif executable("curl")
86
 
  let g:netrw_http_cmd  = "curl -o"
 
111
  let g:netrw_http_cmd  = "curl"
 
112
  if !exists("g:netrw_http_xcmd")
 
113
   let g:netrw_http_xcmd= "-o"
 
114
  endif
87
115
 elseif executable("wget")
88
 
  let g:netrw_http_cmd  = "wget -q -O"
 
116
  let g:netrw_http_cmd  = "wget"
 
117
  call s:NetrwInit("g:netrw_http_xcmd","-q -O")
89
118
 elseif executable("fetch")
90
 
  let g:netrw_http_cmd  = "fetch -o"
 
119
  let g:netrw_http_cmd  = "fetch"
 
120
  call s:NetrwInit("g:netrw_http_xcmd","-o")
91
121
 else
92
122
  let g:netrw_http_cmd  = ""
93
123
 endif
94
124
endif
95
 
if !exists("g:netrw_rcp_cmd")
96
 
  let g:netrw_rcp_cmd   = "rcp"
97
 
endif
98
 
if !exists("g:netrw_rsync_cmd")
99
 
  let g:netrw_rsync_cmd = "rsync"
100
 
endif
101
 
if !exists("g:netrw_scp_cmd")
102
 
  let g:netrw_scp_cmd   = "scp -q"
103
 
endif
104
 
if !exists("g:netrw_sftp_cmd")
105
 
  let g:netrw_sftp_cmd  = "sftp"
106
 
endif
107
 
if !exists("g:netrw_ssh_cmd")
108
 
 let g:netrw_ssh_cmd= "ssh"
109
 
endif
 
125
call s:NetrwInit("g:netrw_rcp_cmd"  , "rcp")
 
126
call s:NetrwInit("g:netrw_rsync_cmd", "rsync")
 
127
call s:NetrwInit("g:netrw_scp_cmd"  , "scp -q")
 
128
call s:NetrwInit("g:netrw_sftp_cmd" , "sftp")
 
129
call s:NetrwInit("g:netrw_ssh_cmd"  , "ssh")
110
130
 
111
131
if (has("win32") || has("win95") || has("win64") || has("win16"))
112
132
  \ && exists("g:netrw_use_nt_rcp")
134
154
 endif
135
155
endif
136
156
" Default values - a-c ---------- {{{3
137
 
if !exists("g:netrw_alto")
138
 
 let g:netrw_alto= &sb
139
 
endif
140
 
if !exists("g:netrw_altv")
141
 
 let g:netrw_altv= &spr
142
 
endif
143
 
if !exists("g:netrw_browse_split")
144
 
 let g:netrw_browse_split= 0
145
 
endif
146
 
if !exists("g:netrw_chgwin")
147
 
 let g:netrw_chgwin    = -1
148
 
endif
149
 
if !exists("g:netrw_compress")
150
 
 let g:netrw_compress= "gzip"
151
 
endif
152
 
if !exists("g:netrw_ctags")
153
 
 let g:netrw_ctags= "ctags"
 
157
call s:NetrwInit("g:netrw_alto"        , &sb)
 
158
call s:NetrwInit("g:netrw_altv"        , &spr)
 
159
call s:NetrwInit("g:netrw_browse_split", 0)
 
160
call s:NetrwInit("g:netrw_chgwin"      , -1)
 
161
call s:NetrwInit("g:netrw_compress"    , "gzip")
 
162
call s:NetrwInit("g:netrw_ctags"       , "ctags")
 
163
if !exists("g:netrw_cursorline")
 
164
 let g:netrw_cursorline= 1
 
165
 let s:netrw_usercul   = &cursorline
 
166
 let s:netrw_usercuc   = &cursorcolumn
154
167
endif
155
168
" Default values - d-g ---------- {{{3
156
 
if !exists("g:NETRW_DIRHIST_CNT")
157
 
 let g:NETRW_DIRHIST_CNT= 0
158
 
endif
159
 
if !exists("g:netrw_decompress")
160
 
 let g:netrw_decompress= { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"}
161
 
endif
162
 
if !exists("g:netrw_dirhistmax")
163
 
 let g:netrw_dirhistmax= 10
164
 
endif
165
 
if !exists("g:netrw_fastbrowse")
166
 
 let g:netrw_fastbrowse= 1
167
 
endif
168
 
if !exists("g:netrw_ftp_browse_reject")
169
 
 let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$'
170
 
endif
 
169
call s:NetrwInit("g:netrw_dirhist_cnt"      , 0)
 
170
call s:NetrwInit("g:netrw_decompress"       , '{ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf"}')
 
171
call s:NetrwInit("g:netrw_dirhistmax"       , 10)
 
172
call s:NetrwInit("g:netrw_fastbrowse"       , 1)
 
173
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$')
171
174
if !exists("g:netrw_ftp_list_cmd")
172
175
 if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
173
176
  let g:netrw_ftp_list_cmd     = "ls -lF"
179
182
  let g:netrw_ftp_sizelist_cmd = "dir"
180
183
 endif
181
184
endif
182
 
if !exists("g:netrw_ftpmode")
183
 
 let g:netrw_ftpmode= "binary"
184
 
endif
 
185
call s:NetrwInit("g:netrw_ftpmode",'binary')
185
186
" Default values - h-lh ---------- {{{3
186
 
if !exists("g:netrw_hide")
187
 
 let g:netrw_hide= 1
188
 
endif
 
187
call s:NetrwInit("g:netrw_hide",1)
189
188
if !exists("g:netrw_ignorenetrc")
190
189
 if &shell =~ '\c\<\%(cmd\|4nt\)\.exe$'
191
190
  let g:netrw_ignorenetrc= 1
193
192
  let g:netrw_ignorenetrc= 0
194
193
 endif
195
194
endif
196
 
if !exists("g:netrw_keepdir")
197
 
 let g:netrw_keepdir= 1
198
 
endif
 
195
call s:NetrwInit("g:netrw_keepdir",1)
199
196
if !exists("g:netrw_list_cmd")
200
197
 if g:netrw_scp_cmd =~ '^pscp' && executable("pscp")
201
198
  " provide a 'pscp' listing command
211
208
  let g:netrw_list_cmd= ""
212
209
 endif
213
210
endif
214
 
if !exists("g:netrw_list_hide")
215
 
 let g:netrw_list_hide= ""
216
 
endif
 
211
call s:NetrwInit("g:netrw_list_hide","")
217
212
" Default values - lh-lz ---------- {{{3
218
213
if !exists("g:netrw_localcopycmd")
219
214
 if has("win32") || has("win95") || has("win64") || has("win16")
228
223
  let g:netrw_localcopycmd= ""
229
224
 endif
230
225
endif
231
 
if !exists("g:netrw_local_mkdir")
232
 
 let g:netrw_local_mkdir= "mkdir"
233
 
endif
 
226
call s:NetrwInit("g:netrw_local_mkdir","mkdir")
234
227
if !exists("g:netrw_localmovecmd")
235
228
 if has("win32") || has("win95") || has("win64") || has("win16")
236
229
  if g:netrw_cygwin
244
237
  let g:netrw_localmovecmd= ""
245
238
 endif
246
239
endif
247
 
if !exists("g:netrw_local_rmdir")
248
 
 let g:netrw_local_rmdir= "rmdir"
249
 
endif
250
 
if !exists("g:netrw_liststyle")
251
 
 let g:netrw_liststyle= s:THINLIST
252
 
endif
 
240
call s:NetrwInit("g:netrw_local_rmdir", "rmdir")
 
241
call s:NetrwInit("g:netrw_liststyle"  , s:THINLIST)
 
242
" sanity checks
253
243
if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST
254
 
 " sanity check
255
244
 let g:netrw_liststyle= s:THINLIST
256
245
endif
257
246
if g:netrw_liststyle == s:LONGLIST && g:netrw_scp_cmd !~ '^pscp'
258
247
 let g:netrw_list_cmd= g:netrw_list_cmd." -l"
259
248
endif
260
249
" Default values - m-r ---------- {{{3
261
 
if !exists("g:netrw_markfileesc")
262
 
 let g:netrw_markfileesc= '*./[\~'
263
 
endif
264
 
if !exists("g:netrw_maxfilenamelen")
265
 
 let g:netrw_maxfilenamelen= 32
266
 
endif
267
 
if !exists("g:netrw_menu")
268
 
 let g:netrw_menu= 1
269
 
endif
270
 
if !exists("g:netrw_mkdir_cmd")
271
 
 let g:netrw_mkdir_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir"
272
 
endif
273
 
if !exists("g:netrw_mousemaps")
274
 
 if exists("&mouse") && &mouse =~ '[anh]'
275
 
  let g:netrw_mousemaps= 1
276
 
 else
277
 
  let g:netrw_mousemaps= 0
278
 
 endif
279
 
endif
280
 
if !exists("g:netrw_retmap")
281
 
 let g:netrw_retmap= 0
282
 
endif
283
 
if !exists("g:netrw_preview")
284
 
 let g:netrw_preview= 0
285
 
endif
286
 
if !exists("g:netrw_scpport")
287
 
 let g:netrw_scpport= "-P"
288
 
endif
289
 
if !exists("g:netrw_sshport")
290
 
 let g:netrw_sshport= "-p"
291
 
endif
292
 
if !exists("g:netrw_rename_cmd")
293
 
 let g:netrw_rename_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME mv"
294
 
endif
295
 
if !exists("g:netrw_rm_cmd")
296
 
 let g:netrw_rm_cmd    = g:netrw_ssh_cmd." USEPORT HOSTNAME rm"
297
 
endif
298
 
if !exists("g:netrw_rmdir_cmd")
299
 
 let g:netrw_rmdir_cmd = g:netrw_ssh_cmd." USEPORT HOSTNAME rmdir"
300
 
endif
301
 
if !exists("g:netrw_rmf_cmd")
302
 
 let g:netrw_rmf_cmd    = g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f"
303
 
endif
 
250
call s:NetrwInit("g:netrw_markfileesc"   , '*./[\~')
 
251
call s:NetrwInit("g:netrw_maxfilenamelen", 32)
 
252
call s:NetrwInit("g:netrw_menu"          , 1)
 
253
call s:NetrwInit("g:netrw_mkdir_cmd"     , g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir")
 
254
call s:NetrwInit("g:netrw_mousemaps"     , (exists("&mouse") && &mouse =~ '[anh]'))
 
255
call s:NetrwInit("g:netrw_retmap"        , 0)
 
256
call s:NetrwInit("g:netrw_preview"       , 0)
 
257
call s:NetrwInit("g:netrw_scpport"       , "-P")
 
258
call s:NetrwInit("g:netrw_sshport"       , "-p")
 
259
call s:NetrwInit("g:netrw_rename_cmd"    , g:netrw_ssh_cmd." USEPORT HOSTNAME mv")
 
260
call s:NetrwInit("g:netrw_rm_cmd"        , g:netrw_ssh_cmd." USEPORT HOSTNAME rm")
 
261
call s:NetrwInit("g:netrw_rmdir_cmd"     , g:netrw_ssh_cmd." USEPORT HOSTNAME rmdir")
 
262
call s:NetrwInit("g:netrw_rmf_cmd"       , g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f")
304
263
" Default values - s ---------- {{{3
305
 
 " set up shell quoting character
306
 
if exists("g:netrw_silent") && g:netrw_silent != 0
307
 
 let s:netrw_silentxfer= "silent "
308
 
else
309
 
 let s:netrw_silentxfer= ""
310
 
endif
311
 
if !exists("g:netrw_sort_by")
312
 
 " alternatives: date size
313
 
 let g:netrw_sort_by= "name"
314
 
endif
315
 
if !exists("g:netrw_sort_options")
316
 
 let g:netrw_sort_options= ""
317
 
endif
318
 
if !exists("g:netrw_sort_direction")
319
 
 " alternative: reverse  (z y x ...)
320
 
 let g:netrw_sort_direction= "normal"
321
 
endif
 
264
" g:netrw_sepchr: picking a character that doesn't appear in filenames that can be used to separate priority from filename
 
265
call s:NetrwInit("g:netrw_sepchr"        , (&enc == "euc-jp")? "\<Char-0x01>" : "\<Char-0xff>")
 
266
call s:NetrwInit("s:netrw_silentxfer"    , (exists("g:netrw_silent") && g:netrw_silent != 0)? "silent " : "")
 
267
call s:NetrwInit("g:netrw_sort_by"       , "name") " alternatives: date                                      , size
 
268
call s:NetrwInit("g:netrw_sort_options"  , "")
 
269
call s:NetrwInit("g:netrw_sort_direction", "normal") " alternative: reverse  (z y x ...)
322
270
if !exists("g:netrw_sort_sequence")
323
 
 let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
324
 
endif
325
 
if !exists("g:netrw_special_syntax")
326
 
 let g:netrw_special_syntax= 0
327
 
endif
328
 
if !exists("g:netrw_ssh_browse_reject")
329
 
  let g:netrw_ssh_browse_reject='^total\s\+\d\+$'
330
 
endif
331
 
if !has("patch192")
332
 
 if !exists("g:netrw_use_noswf")
333
 
  let g:netrw_use_noswf= 1
 
271
 if has("unix")
 
272
  let g:netrw_sort_sequence= '[\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
 
273
 else
 
274
  let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
334
275
 endif
335
 
else
336
 
  let g:netrw_use_noswf= 0
337
276
endif
 
277
call s:NetrwInit("g:netrw_special_syntax"   , 0)
 
278
call s:NetrwInit("g:netrw_ssh_browse_reject", '^total\s\+\d\+$')
 
279
call s:NetrwInit("g:netrw_use_noswf"        , 0)
338
280
" Default values - t-w ---------- {{{3
339
 
if !exists("g:netrw_timefmt")
340
 
 let g:netrw_timefmt= "%c"
341
 
endif
342
 
if !exists("g:netrw_xstrlen")
343
 
 let g:netrw_xstrlen= 1
344
 
endif
345
 
if !exists("g:NetrwTopLvlMenu")
346
 
 let g:NetrwTopLvlMenu= "Netrw."
347
 
endif
348
 
if !exists("g:netrw_use_errorwindow")
349
 
 let g:netrw_use_errorwindow= 1
350
 
endif
351
 
if !exists("g:netrw_win95ftp")
352
 
 let g:netrw_win95ftp= 1
353
 
endif
354
 
if !exists("g:netrw_winsize")
355
 
 let g:netrw_winsize= ""
356
 
endif
 
281
call s:NetrwInit("g:netrw_timefmt","%c")
 
282
call s:NetrwInit("g:netrw_xstrlen",0)
 
283
call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.")
 
284
call s:NetrwInit("g:netrw_use_errorwindow",1)
 
285
call s:NetrwInit("g:netrw_win95ftp",1)
 
286
call s:NetrwInit("g:netrw_winsize","")
357
287
" ---------------------------------------------------------------------
358
288
" Default values for netrw's script variables: {{{2
359
 
if !exists("g:netrw_fname_escape")
360
 
 let g:netrw_fname_escape= ' ?&;%'
361
 
endif
362
 
if !exists("g:netrw_glob_escape")
363
 
  let g:netrw_glob_escape= '[]*?`{~$'
364
 
endif
365
 
if !exists("g:netrw_tmpfile_escape")
366
 
 let g:netrw_tmpfile_escape= ' &;'
367
 
endif
368
 
let s:netrw_map_escape = "<|\n\r\\\<C-V>\""
 
289
call s:NetrwInit("g:netrw_fname_escape",' ?&;%')
 
290
call s:NetrwInit("g:netrw_glob_escape",'[]*?`{~$')
 
291
call s:NetrwInit("g:netrw_tmpfile_escape",' &;')
 
292
call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"")
369
293
 
370
294
" BufEnter event ignored by decho when following variable is true
371
295
"  Has a side effect that doau BufReadPost doesn't work, so
384
308
"             NetrwBrowse.
385
309
"             vt: normally its "w:" or "s:" (a variable type)
386
310
fun! s:NetrwOptionSave(vt)
387
 
"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">")
 
311
"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$"))
388
312
 
389
313
"  call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist"))
390
314
  if !exists("{a:vt}netrw_optionsave")
430
354
" ------------------------------------------------------------------------
431
355
" s:NetrwOptionRestore: restore options {{{2
432
356
fun! s:NetrwOptionRestore(vt)
433
 
"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%"))
 
357
"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")." winnr($)=".winnr("$"))
434
358
  if !exists("{a:vt}netrw_optionsave")
435
359
"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
436
360
"   call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist")
503
427
" ---------------------------------------------------------------------
504
428
" s:NetrwSafeOptions: sets options to help netrw do its job {{{2
505
429
fun! s:NetrwSafeOptions()
506
 
"  call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">")
507
 
"  call Decho("window's ft=".&ft)
 
430
"  call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%"))."> winnr($)=".winnr("$"))
 
431
"  call Decho("win#".winnr()."'s ft=".&ft)
508
432
  setlocal cino=
509
433
  setlocal com=
510
434
  setlocal cpo-=aA
513
437
  setlocal fo=nroql2
514
438
  setlocal tw=0
515
439
  setlocal report=10000
 
440
  setlocal isk+=@ isk+=* isk+=/
516
441
  if g:netrw_use_noswf && has("win32") && !has("win95")
517
442
   setlocal noswf
518
443
  endif
 
444
 
 
445
  " allow the user to override safe options
 
446
  silent keepalt keepjumps doau FileType netrw
 
447
 
519
448
"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
520
449
"  call Dret("s:NetrwSafeOptions")
521
450
endfun
566
495
"  call Dret("netrw#NetrwClean")
567
496
endfun
568
497
 
 
498
" ---------------------------------------------------------------------
 
499
" netrw#Nread: {{{2
 
500
fun! netrw#Nread(mode,fname)
 
501
"  call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)")
 
502
  call netrw#NetrwSavePosn()
 
503
  call netrw#NetRead(a:mode,a:fname)
 
504
  call netrw#NetrwRestorePosn()
 
505
"  call Dret("netrw#Nread")
 
506
endfun
 
507
 
569
508
" ------------------------------------------------------------------------
570
509
"  Netrw Transfer Functions: {{{1
571
510
" ===============================
579
518
fun! netrw#NetRead(mode,...)
580
519
"  call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw)
581
520
 
582
 
  " save options {{{3
 
521
  " NetRead: save options {{{3
583
522
  call s:NetrwOptionSave("w:")
584
523
  call s:NetrwSafeOptions()
585
524
 
586
 
  " interpret mode into a readcmd {{{3
 
525
  " NetRead: interpret mode into a readcmd {{{3
587
526
  if     a:mode == 0 " read remote file before current line
588
527
   let readcmd = "0r"
589
528
  elseif a:mode == 1 " read file after current line
599
538
  let ichoice = (a:0 == 0)? 0 : 1
600
539
"  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
601
540
 
602
 
  " Get Temporary Filename {{{3
 
541
  " NetRead: get temporary filename {{{3
603
542
  let tmpfile= s:GetTempfile("")
604
543
  if tmpfile == ""
605
544
"   call Dret("netrw#NetRead : unable to get a tempfile!")
666
605
"   call Decho("choice<" . choice . ">")
667
606
   let ichoice= ichoice + 1
668
607
 
669
 
   " Determine method of read (ftp, rcp, etc) {{{3
 
608
   " NetRead: Determine method of read (ftp, rcp, etc) {{{3
670
609
   call s:NetrwMethod(choice)
 
610
   if !exists("b:netrw_method") || b:netrw_method < 0
 
611
"    call Dfunc("netrw#NetRead : unsupported method")
 
612
    return
 
613
   endif
671
614
   let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix
672
615
 
673
616
   " Check if NetrwBrowse() should be handling this request
680
623
   endif
681
624
 
682
625
   " ============
683
 
   " Perform Protocol-Based Read {{{3
 
626
   " NetRead: Perform Protocol-Based Read {{{3
684
627
   " ===========================
685
628
   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
686
629
    echo "(netrw) Processing your read request..."
687
630
   endif
688
631
 
689
632
   ".........................................
690
 
   " rcp:  NetRead Method #1 {{{3
 
633
   " NetRead: (rcp)  NetRead Method #1 {{{3
691
634
   if  b:netrw_method == 1 " read with rcp
692
635
"    call Decho("read via rcp (method #1)")
693
636
   " ER: nothing done with g:netrw_uid yet?
709
652
    endif
710
653
   endif
711
654
"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
712
 
   exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
 
655
   exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
713
656
   let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
714
657
   let b:netrw_lastfile = choice
715
658
 
716
659
   ".........................................
717
 
   " ftp + <.netrc>:  NetRead Method #2 {{{3
 
660
   " NetRead: (ftp + <.netrc>)  NetRead Method #2 {{{3
718
661
   elseif b:netrw_method  == 2          " read with ftp + <.netrc>
719
662
"     call Decho("read via ftp+.netrc (method #2)")
720
663
     let netrw_fname= b:netrw_fname
745
688
     endif
746
689
     call s:SaveBufVars()
747
690
     bd!
748
 
     if bufname("%") == "" && line("$") == 1 && getline("$") == ""
 
691
     if bufname("%") == "" && getline("$") == "" && line('$') == 1
 
692
      " needed when one sources a file in a nolbl setting window via ftp
749
693
      q!
750
694
     endif
751
695
     call s:RestoreBufVars()
753
697
     let b:netrw_lastfile = choice
754
698
 
755
699
   ".........................................
756
 
   " ftp + machine,id,passwd,filename:  NetRead Method #3 {{{3
 
700
   " NetRead: (ftp + machine,id,passwd,filename)  NetRead Method #3 {{{3
757
701
   elseif b:netrw_method == 3           " read with ftp + machine, id, passwd, and fname
758
702
    " Construct execution string (four lines) which will be passed through filter
759
703
"    call Decho("read via ftp+mipf (method #3)")
809
753
    let b:netrw_lastfile = choice
810
754
 
811
755
   ".........................................
812
 
   " scp: NetRead Method #4 {{{3
 
756
   " NetRead: (scp) NetRead Method #4 {{{3
813
757
   elseif     b:netrw_method  == 4      " read with scp
814
758
"    call Decho("read via scp (method #4)")
815
759
    if exists("g:netrw_port") && g:netrw_port != ""
823
767
    let b:netrw_lastfile = choice
824
768
 
825
769
   ".........................................
826
 
   " http: NetRead Method #5 (wget) {{{3
 
770
   " NetRead: (http) NetRead Method #5 (wget) {{{3
827
771
   elseif     b:netrw_method  == 5
828
772
"    call Decho("read via http (method #5)")
829
773
    if g:netrw_http_cmd == ""
863
807
    setlocal ro
864
808
 
865
809
   ".........................................
866
 
   " cadaver: NetRead Method #6 {{{3
 
810
   " NetRead: (dav) NetRead Method #6 {{{3
867
811
   elseif     b:netrw_method  == 6
868
812
"    call Decho("read via cadaver (method #6)")
869
813
 
870
 
    " Construct execution string (four lines) which will be passed through filter
871
 
    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
872
 
    new
873
 
    setlocal ff=unix
874
 
    if exists("g:netrw_port") && g:netrw_port != ""
875
 
     put ='open '.g:netrw_machine.' '.g:netrw_port
 
814
    if !executable(g:netrw_dav_cmd)
 
815
     call netrw#ErrorMsg(s:ERROR,g:netrw_dav_cmd." is not executable",73)
 
816
"     call Dret("netrw#NetRead : ".g:netrw_dav_cmd." not executable")
 
817
     return
 
818
    endif
 
819
    if g:netrw_dav_cmd =~ "curl"
 
820
"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1))
 
821
     exe s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1)
876
822
    else
877
 
     put ='open '.g:netrw_machine
878
 
    endif
879
 
    put ='user '.g:netrw_uid.' '.s:netrw_passwd
880
 
    put ='get '.netrw_fname.' '.tmpfile
881
 
    put ='quit'
 
823
     " Construct execution string (four lines) which will be passed through filter
 
824
     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
 
825
     new
 
826
     setlocal ff=unix
 
827
     if exists("g:netrw_port") && g:netrw_port != ""
 
828
      put ='open '.g:netrw_machine.' '.g:netrw_port
 
829
     else
 
830
      put ='open '.g:netrw_machine
 
831
     endif
 
832
     put ='user '.g:netrw_uid.' '.s:netrw_passwd
 
833
     put ='get '.netrw_fname.' '.tmpfile
 
834
     put ='quit'
882
835
 
883
 
    " perform cadaver operation:
884
 
    norm! 1Gdd
 
836
     " perform cadaver operation:
 
837
     norm! 1Gdd
885
838
"    call Decho("executing: %!".g:netrw_dav_cmd)
886
 
    exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
887
 
    bd!
 
839
     exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
 
840
     bd!
 
841
    endif
888
842
    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
889
843
    let b:netrw_lastfile = choice
890
844
 
891
845
   ".........................................
892
 
   " rsync: NetRead Method #7 {{{3
 
846
   " NetRead: (rsync) NetRead Method #7 {{{3
893
847
   elseif     b:netrw_method  == 7
894
848
"    call Decho("read via rsync (method #7)")
895
849
"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
898
852
    let b:netrw_lastfile = choice
899
853
 
900
854
   ".........................................
901
 
   " fetch: NetRead Method #8 {{{3
 
855
   " NetRead: (fetch) NetRead Method #8 {{{3
902
856
   "    fetch://[user@]host[:http]/path
903
857
   elseif     b:netrw_method  == 8
904
858
"    call Decho("read via fetch (method #8)")
928
882
    setlocal ro
929
883
 
930
884
   ".........................................
931
 
   " sftp: NetRead Method #9 {{{3
 
885
   " NetRead: (sftp) NetRead Method #9 {{{3
932
886
   elseif     b:netrw_method  == 9
933
887
"    call Decho("read via sftp (method #9)")
934
888
"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
937
891
    let b:netrw_lastfile = choice
938
892
 
939
893
   ".........................................
940
 
   " Complain {{{3
 
894
   " NetRead: Complain {{{3
941
895
   else
942
896
    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8)
943
897
   endif
944
898
  endwhile
945
899
 
946
 
  " cleanup {{{3
 
900
  " NetRead: cleanup {{{3
947
901
  if exists("b:netrw_method")
948
902
"   call Decho("cleanup b:netrw_method and b:netrw_fname")
949
903
   unlet b:netrw_method
951
905
  endif
952
906
  if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't'
953
907
"   call Decho("cleanup by deleting tmpfile<".tmpfile.">")
954
 
   call s:NetrwDelete(fnameescape(tmpfile))
 
908
   call s:NetrwDelete(tmpfile)
955
909
  endif
956
910
  call s:NetrwOptionRestore("w:")
957
911
 
963
917
fun! netrw#NetWrite(...) range
964
918
"  call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw)
965
919
 
966
 
  " option handling
 
920
  " NetWrite: option handling {{{3
967
921
  let mod= 0
968
922
  call s:NetrwOptionSave("w:")
969
923
  call s:NetrwSafeOptions()
970
924
 
971
 
  " Get Temporary Filename {{{3
 
925
  " NetWrite: Get Temporary Filename {{{3
972
926
  let tmpfile= s:GetTempfile("")
973
927
  if tmpfile == ""
974
928
"   call Dret("netrw#NetWrite : unable to get a tempfile!")
1007
961
   0file!
1008
962
  endif
1009
963
 
1010
 
  " While choice loop: {{{3
 
964
  " NetWrite: while choice loop: {{{3
1011
965
  while ichoice <= a:0
1012
966
 
1013
967
   " Process arguments: {{{4
1065
1019
 
1066
1020
   " Determine method of write (ftp, rcp, etc) {{{4
1067
1021
   call s:NetrwMethod(choice)
 
1022
   if !exists("b:netrw_method") || b:netrw_method < 0
 
1023
"    call Dfunc("netrw#NetWrite : unsupported method")
 
1024
    return
 
1025
   endif
1068
1026
 
1069
1027
   " =============
1070
 
   " Perform Protocol-Based Write {{{4
 
1028
   " NetWrite: Perform Protocol-Based Write {{{3
1071
1029
   " ============================
1072
1030
   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
1073
1031
    echo "(netrw) Processing your write request..."
1075
1033
   endif
1076
1034
 
1077
1035
   ".........................................
1078
 
   " rcp: NetWrite Method #1 {{{4
 
1036
   " NetWrite: (rcp) NetWrite Method #1 {{{3
1079
1037
   if  b:netrw_method == 1
1080
1038
"    call Decho("write via rcp (method #1)")
1081
1039
    if s:netrw_has_nt_rcp == 1
1096
1054
    let b:netrw_lastfile = choice
1097
1055
 
1098
1056
   ".........................................
1099
 
   " ftp + <.netrc>: NetWrite Method #2 {{{4
 
1057
   " NetWrite: (ftp + <.netrc>) NetWrite Method #2 {{{3
1100
1058
   elseif b:netrw_method == 2
1101
1059
"    call Decho("write via ftp+.netrc (method #2)")
1102
1060
    let netrw_fname= b:netrw_fname
1130
1088
    let b:netrw_lastfile = choice
1131
1089
 
1132
1090
   ".........................................
1133
 
   " ftp + machine, id, passwd, filename: NetWrite Method #3 {{{4
 
1091
   " NetWrite: (ftp + machine, id, passwd, filename) NetWrite Method #3 {{{3
1134
1092
   elseif b:netrw_method == 3
1135
1093
    " Construct execution string (four lines) which will be passed through filter
1136
1094
"    call Decho("read via ftp+mipf (method #3)")
1175
1133
    bd!
1176
1134
 
1177
1135
   ".........................................
1178
 
   " scp: NetWrite Method #4 {{{4
 
1136
   " NetWrite: (scp) NetWrite Method #4 {{{3
1179
1137
   elseif     b:netrw_method == 4
1180
1138
"    call Decho("write via scp (method #4)")
1181
1139
    if exists("g:netrw_port") && g:netrw_port != ""
1188
1146
    let b:netrw_lastfile = choice
1189
1147
 
1190
1148
   ".........................................
1191
 
   " http: NetWrite Method #5 {{{4
 
1149
   " NetWrite: (http) NetWrite Method #5 {{{3
1192
1150
   elseif     b:netrw_method == 5
1193
1151
"    call Decho("write via http (method #5)")
1194
1152
    if !exists("g:netrw_quiet")
1196
1154
    endif
1197
1155
 
1198
1156
   ".........................................
1199
 
   " dav: NetWrite Method #6 (cadaver) {{{4
 
1157
   " NetWrite: (dav) NetWrite Method #6 (cadaver) {{{3
1200
1158
   elseif     b:netrw_method == 6
1201
1159
"    call Decho("write via cadaver (method #6)")
1202
1160
 
1222
1180
    let b:netrw_lastfile = choice
1223
1181
 
1224
1182
   ".........................................
1225
 
   " rsync: NetWrite Method #7 {{{4
 
1183
   " NetWrite: (rsync) NetWrite Method #7 {{{3
1226
1184
   elseif     b:netrw_method == 7
1227
1185
"    call Decho("write via rsync (method #7)")
1228
1186
"    call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
1230
1188
    let b:netrw_lastfile = choice
1231
1189
 
1232
1190
   ".........................................
1233
 
   " sftp: NetWrite Method #9 {{{4
 
1191
   " NetWrite: (sftp) NetWrite Method #9 {{{3
1234
1192
   elseif     b:netrw_method == 9
1235
1193
"    call Decho("read via sftp (method #9)")
1236
1194
    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
1250
1208
    let b:netrw_lastfile= choice
1251
1209
 
1252
1210
   ".........................................
1253
 
   " Complain {{{4
 
1211
   " NetWrite: Complain {{{3
1254
1212
   else
1255
1213
    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17)
1256
1214
   endif
1257
1215
  endwhile
1258
1216
 
1259
 
  " Cleanup: {{{3
 
1217
  " NetWrite: Cleanup: {{{3
1260
1218
"  call Decho("cleanup")
1261
1219
  if s:FileReadable(tmpfile)
1262
1220
"   call Decho("tmpfile<".tmpfile."> readable, will now delete it")
1422
1380
 
1423
1381
" ------------------------------------------------------------------------
1424
1382
" s:NetrwMethod:  determine method of transfer {{{2
1425
 
"  method == 1: rcp
1426
 
"            2: ftp + <.netrc>
1427
 
"            3: ftp + machine, id, password, and [path]filename
1428
 
"            4: scp
1429
 
"            5: http (wget)
1430
 
"            6: cadaver
1431
 
"            7: rsync
1432
 
"            8: fetch
1433
 
"            9: sftp
1434
 
fun! s:NetrwMethod(choice)  " globals: method machine id passwd fname
 
1383
" Input:
 
1384
"   choice = url   [protocol:]//[userid@]hostname[:port]/[path-to-file]
 
1385
" Output:
 
1386
"  b:netrw_method= 1: rcp                                             
 
1387
"                  2: ftp + <.netrc>                                  
 
1388
"                  3: ftp + machine, id, password, and [path]filename 
 
1389
"                  4: scp                                             
 
1390
"                  5: http (wget)                                     
 
1391
"                  6: dav
 
1392
"                  7: rsync                                           
 
1393
"                  8: fetch                                           
 
1394
"                  9: sftp                                            
 
1395
"  g:netrw_machine= hostname
 
1396
"  b:netrw_fname  = filename
 
1397
"  g:netrw_port   = optional port number (for ftp)
 
1398
"  g:netrw_choice = copy of input url (choice)
 
1399
fun! s:NetrwMethod(choice)
1435
1400
"   call Dfunc("NetrwMethod(a:choice<".a:choice.">)")
1436
1401
 
 
1402
   " record current g:netrw_machine, if any
 
1403
   " curmachine used if protocol == ftp and no .netrc
 
1404
   if exists("g:netrw_machine")
 
1405
    let curmachine= g:netrw_machine
 
1406
"    call Decho("curmachine<".curmachine.">")
 
1407
   else
 
1408
    let curmachine= "N O T A HOST"
 
1409
   endif
 
1410
 
1437
1411
  " initialization
1438
1412
  let b:netrw_method  = 0
1439
1413
  let g:netrw_machine = ""
1449
1423
  " rcphf    : [user@]host:filename                  Use rcp
1450
1424
  " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
1451
1425
  " httpurm  : http://[user@]host/filename           Use wget
1452
 
  " davurm   : dav[s]://host[:port]/path             Use cadaver
 
1426
  " davurm   : dav[s]://host[:port]/path             Use cadaver/curl
1453
1427
  " rsyncurm : rsync://host[:port]/path              Use rsync
1454
1428
  " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
1455
1429
  " sftpurm  : sftp://[user@]host/filename  Use scp
1518
1492
   let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
1519
1493
   let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
1520
1494
   let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
 
1495
"   call Decho("g:netrw_machine<".g:netrw_machine.">")
1521
1496
   if userid != ""
1522
1497
    let g:netrw_uid= userid
1523
1498
   endif
 
1499
   if exists("s:netrw_passwd") && curmachine != g:netrw_machine
 
1500
    " if there's a change in hostname, require password re-entry
 
1501
    unlet s:netrw_passwd
 
1502
   endif
1524
1503
   if exists("g:netrw_uid") && exists("s:netrw_passwd")
1525
1504
    let b:netrw_method = 3
1526
1505
   else
1592
1571
 
1593
1572
  else
1594
1573
   if !exists("g:netrw_quiet")
1595
 
    call netrw#ErrorMsg(s:WARNING,"cannot determine method",45)
 
1574
    call netrw#ErrorMsg(s:WARNING,"cannot determine method (format: protocol://[user@]hostname[:port]/[path])",45)
1596
1575
   endif
1597
1576
   let b:netrw_method  = -1
1598
1577
  endif
1626
1605
if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
1627
1606
 fun! NetReadFixup(method, line1, line2)
1628
1607
"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
 
1608
 
 
1609
   " sanity checks -- attempt to convert inputs to integers
 
1610
   let method = a:method + 0
 
1611
   let line1  = a:line1 + 0
 
1612
   let line2  = a:line2 + 0
 
1613
   if type(method) != 0 || type(line1) != 0 || type(line2) != 0 || method < 0 || line1 <= 0 || line2 <= 0
 
1614
"    call Dret("NetReadFixup")
 
1615
    return
 
1616
   endif
 
1617
 
1629
1618
   if method == 3   " ftp (no <.netrc>)
1630
1619
    let fourblanklines= line2 - 3
1631
 
    silent fourblanklines.",".line2."g/^\s*/d"
 
1620
    if fourblanklines >= line1
 
1621
     exe "silent ".fourblanklines.",".line2."g/^\s*$/d"
 
1622
     call histdel("/",-1)
 
1623
    endif
1632
1624
   endif
 
1625
 
1633
1626
"   call Dret("NetReadFixup")
1634
1627
 endfun
1635
1628
endif
1678
1671
   nnoremap <buffer> <silent> <cr>      :call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
1679
1672
   nnoremap <buffer> <silent> -         :exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
1680
1673
   nnoremap <buffer> <silent> a         :call <SID>NetrwHide(1)<cr>
1681
 
   nnoremap <buffer> <silent> mb        :<c-u>call <SID>NetrwBookmarkDir(0,b:netrw_curdir)<cr>
 
1674
   nnoremap <buffer> <silent> mb        :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
1682
1675
   nnoremap <buffer> <silent> mc        :<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
1683
1676
   nnoremap <buffer> <silent> md        :<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
1684
1677
   nnoremap <buffer> <silent> me        :<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
1694
1687
   nnoremap <buffer> <silent> mu        :<c-u>call <SID>NetrwUnMarkFile(1)<cr>
1695
1688
   nnoremap <buffer> <silent> mx        :<c-u>call <SID>NetrwMarkFileExe(1)<cr>
1696
1689
   nnoremap <buffer> <silent> mz        :<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
1697
 
   nnoremap <buffer> <silent> gb        :<c-u>call <SID>NetrwBookmarkDir(1,b:netrw_curdir)<cr>
 
1690
   nnoremap <buffer> <silent> gb        :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
1698
1691
   nnoremap <buffer> <silent> gh        :<c-u>call <SID>NetrwHidden(1)<cr>
1699
1692
   nnoremap <buffer> <silent> c         :exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
1700
1693
   nnoremap <buffer> <silent> C         :let g:netrw_chgwin= winnr()<cr>
1704
1697
   nnoremap <buffer> <silent> O         :call <SID>NetrwObtain(1)<cr>
1705
1698
   nnoremap <buffer> <silent> p         :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
1706
1699
   nnoremap <buffer> <silent> P         :call <SID>NetrwPrevWinOpen(1)<cr>
1707
 
   nnoremap <buffer> <silent> qb        :<c-u>call <SID>NetrwBookmarkDir(2,b:netrw_curdir)<cr>
1708
 
   nnoremap <buffer> <silent> mB        :<c-u>call <SID>NetrwBookmarkDir(6,b:netrw_curdir)<cr>
 
1700
   nnoremap <buffer> <silent> qb        :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
 
1701
   nnoremap <buffer> <silent> mB        :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
1709
1702
   nnoremap <buffer> <silent> qf        :<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
1710
1703
   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>
1711
1704
   nnoremap <buffer> <silent> s         :call <SID>NetrwSortStyle(1)<cr>
1712
1705
   nnoremap <buffer> <silent> S         :call <SID>NetSortSequence(1)<cr>
1713
1706
   nnoremap <buffer> <silent> t         :call <SID>NetrwSplit(4)<cr>
1714
 
   nnoremap <buffer> <silent> u         :<c-u>call <SID>NetrwBookmarkDir(4,expand("%"))<cr>
1715
 
   nnoremap <buffer> <silent> U         :<c-u>call <SID>NetrwBookmarkDir(5,expand("%"))<cr>
 
1707
   nnoremap <buffer> <silent> u         :<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
 
1708
   nnoremap <buffer> <silent> U         :<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
1716
1709
   nnoremap <buffer> <silent> v         :call <SID>NetrwSplit(5)<cr>
1717
1710
   nnoremap <buffer> <silent> x         :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
1718
1711
   nnoremap <buffer> <silent> %         :call <SID>NetrwOpenFile(1)<cr>
1754
1747
   nnoremap <buffer> <silent> <c-l>     :call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
1755
1748
   nnoremap <buffer> <silent> -         :exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
1756
1749
   nnoremap <buffer> <silent> a         :call <SID>NetrwHide(0)<cr>
1757
 
   nnoremap <buffer> <silent> mb        :<c-u>call <SID>NetrwBookmarkDir(0,b:netrw_curdir)<cr>
 
1750
   nnoremap <buffer> <silent> mb        :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
1758
1751
   nnoremap <buffer> <silent> mc        :<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
1759
1752
   nnoremap <buffer> <silent> md        :<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
1760
1753
   nnoremap <buffer> <silent> me        :<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
1770
1763
   nnoremap <buffer> <silent> mu        :<c-u>call <SID>NetrwUnMarkFile(0)<cr>
1771
1764
   nnoremap <buffer> <silent> mx        :<c-u>call <SID>NetrwMarkFileExe(0)<cr>
1772
1765
   nnoremap <buffer> <silent> mz        :<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
1773
 
   nnoremap <buffer> <silent> gb        :<c-u>call <SID>NetrwBookmarkDir(1,b:netrw_cur)<cr>
 
1766
   nnoremap <buffer> <silent> gb        :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr>
1774
1767
   nnoremap <buffer> <silent> gh        :<c-u>call <SID>NetrwHidden(0)<cr>
1775
1768
   nnoremap <buffer> <silent> C         :let g:netrw_chgwin= winnr()<cr>
1776
1769
   nnoremap <buffer> <silent> i         :call <SID>NetrwListStyle(0)<cr>
1778
1771
   nnoremap <buffer> <silent> O         :call <SID>NetrwObtain(0)<cr>
1779
1772
   nnoremap <buffer> <silent> p         :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
1780
1773
   nnoremap <buffer> <silent> P         :call <SID>NetrwPrevWinOpen(0)<cr>
1781
 
   nnoremap <buffer> <silent> qb        :<c-u>call <SID>NetrwBookmarkDir(2,b:netrw_curdir)<cr>
1782
 
   nnoremap <buffer> <silent> mB        :<c-u>call <SID>NetrwBookmarkDir(6,b:netrw_curdir)<cr>
 
1774
   nnoremap <buffer> <silent> qb        :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
 
1775
   nnoremap <buffer> <silent> mB        :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
1783
1776
   nnoremap <buffer> <silent> qf        :<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
1784
1777
   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>
1785
1778
   nnoremap <buffer> <silent> s         :call <SID>NetrwSortStyle(0)<cr>
1786
1779
   nnoremap <buffer> <silent> S         :call <SID>NetSortSequence(0)<cr>
1787
1780
   nnoremap <buffer> <silent> t         :call <SID>NetrwSplit(1)<cr>
1788
 
   nnoremap <buffer> <silent> u         :<c-u>call <SID>NetrwBookmarkDir(4,b:netrw_curdir)<cr>
1789
 
   nnoremap <buffer> <silent> U         :<c-u>call <SID>NetrwBookmarkDir(5,b:netrw_curdir)<cr>
 
1781
   nnoremap <buffer> <silent> u         :<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
 
1782
   nnoremap <buffer> <silent> U         :<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
1790
1783
   nnoremap <buffer> <silent> v         :call <SID>NetrwSplit(2)<cr>
1791
1784
   nnoremap <buffer> <silent> x         :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
1792
1785
   nnoremap <buffer> <silent> %         :call <SID>NetrwOpenFile(0)<cr>
1836
1829
endfun
1837
1830
 
1838
1831
" ---------------------------------------------------------------------
1839
 
"  s:NetrwBookmarkDir: {{{2
 
1832
"  s:NetrwBookHistHandler: {{{2
1840
1833
"    0: (user: <mb>)   bookmark current directory
1841
1834
"    1: (user: <gb>)   change to the bookmarked directory
1842
1835
"    2: (user: <qb>)   list bookmarks
1844
1837
"    4: (user: <u>)    go up   (previous) bookmark
1845
1838
"    5: (user: <U>)    go down (next)     bookmark
1846
1839
"    6: (user: <mB>)   delete bookmark
1847
 
fun! s:NetrwBookmarkDir(chg,curdir)
1848
 
"  call Dfunc("NetrwBookmarkDir(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." bookmarkcnt=".g:NETRW_BOOKMARKMAX." histcnt=".g:NETRW_DIRHIST_CNT." bookmax=".g:NETRW_BOOKMARKMAX." histmax=".g:netrw_dirhistmax)
 
1840
fun! s:NetrwBookHistHandler(chg,curdir)
 
1841
"  call Dfunc("NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
1849
1842
 
1850
1843
  if a:chg == 0
1851
1844
   " bookmark the current directory
1852
1845
"   call Decho("(user: <b>) bookmark the current directory")
1853
 
   if v:count > 0
1854
 
    " handle bookmark# specified via the count
1855
 
    let g:NETRW_BOOKMARKDIR_{v:count}= a:curdir
1856
 
    if !exists("g:NETRW_BOOKMARKMAX")
1857
 
     let g:NETRW_BOOKMARKMAX= v:count
1858
 
    elseif v:count > g:NETRW_BOOKMARKMAX
1859
 
     let g:NETRW_BOOKMARKMAX= v:count
1860
 
    endif
1861
 
   else
1862
 
    " handle no count specified
1863
 
    let g:NETRW_BOOKMARKMAX                       = g:NETRW_BOOKMARKMAX + 1
1864
 
    let g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX} = a:curdir
 
1846
   if !exists("g:netrw_bookmarklist")
 
1847
    let g:netrw_bookmarklist= []
 
1848
   endif
 
1849
   if index(g:netrw_bookmarklist,a:curdir) == -1
 
1850
    " curdir not currently in g:netrw_bookmarklist, so include it
 
1851
    call add(g:netrw_bookmarklist,a:curdir)
 
1852
    call sort(g:netrw_bookmarklist)
1865
1853
   endif
1866
1854
   echo "bookmarked the current directory"
1867
1855
 
1868
1856
  elseif a:chg == 1
1869
1857
   " change to the bookmarked directory
1870
 
"   call Decho("(user: <B>) change to the bookmarked directory")
1871
 
   if exists("g:NETRW_BOOKMARKDIR_{v:count}")
1872
 
    exe "e ".fnameescape(g:NETRW_BOOKMARKDIR_{v:count})
 
1858
"   call Decho("(user: <".v:count."mb>) change to the bookmarked directory")
 
1859
   if exists("g:netrw_bookmarklist[v:count-1]")
 
1860
    exe "e ".fnameescape(g:netrw_bookmarklist[v:count-1])
1873
1861
   else
1874
1862
    echomsg "Sorry, bookmark#".v:count." doesn't exist!"
1875
1863
   endif
1879
1867
   let didwork= 0
1880
1868
   " list user's bookmarks
1881
1869
"   call Decho("(user: <q>) list user's bookmarks")
1882
 
   if exists("g:NETRW_BOOKMARKMAX")
1883
 
"    call Decho("list bookmarks [0,".g:NETRW_BOOKMARKMAX."]")
1884
 
    let cnt= 0
1885
 
    while cnt <= g:NETRW_BOOKMARKMAX
1886
 
     if exists("g:NETRW_BOOKMARKDIR_{cnt}")
1887
 
"      call Decho("Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt})
1888
 
      echo "Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt}
1889
 
      let didwork= 1
1890
 
     endif
1891
 
     let cnt= cnt + 1
1892
 
    endwhile
 
1870
   if exists("g:netrw_bookmarklist")
 
1871
"    call Decho('list '.len(g:netrw_bookmarklist).' bookmarks')
 
1872
    let cnt= 1
 
1873
    for bmd in g:netrw_bookmarklist
 
1874
"     call Decho("Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1])
 
1875
     echo "Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1]
 
1876
     let didwork = 1
 
1877
     let cnt     = cnt + 1
 
1878
    endfor
1893
1879
   endif
1894
1880
 
1895
1881
   " list directory history
1896
 
   let cnt     = g:NETRW_DIRHIST_CNT
 
1882
   let cnt     = g:netrw_dirhist_cnt
1897
1883
   let first   = 1
1898
1884
   let histcnt = 0
1899
 
   while ( first || cnt != g:NETRW_DIRHIST_CNT )
1900
 
"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:NETRW_DIRHIST_CNT)
 
1885
   while ( first || cnt != g:netrw_dirhist_cnt )
 
1886
"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:netrw_dirhist_cnt)
1901
1887
    let histcnt= histcnt + 1
1902
 
    if exists("g:NETRW_DIRHIST_{cnt}")
1903
 
"     call Decho("Netrw  History#".histcnt.": ".g:NETRW_DIRHIST_{cnt})
1904
 
     echo "Netrw  History#".histcnt.": ".g:NETRW_DIRHIST_{cnt}
 
1888
    if exists("g:netrw_dirhist_{cnt}")
 
1889
"     call Decho("Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt})
 
1890
     echo "Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt}
1905
1891
     let didwork= 1
1906
1892
    endif
1907
1893
    let first = 0
1917
1903
  elseif a:chg == 3
1918
1904
   " saves most recently visited directories (when they differ)
1919
1905
"   call Decho("(browsing) record curdir history")
1920
 
   if !exists("g:NETRW_DIRHIST_0") || g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT} != a:curdir
1921
 
    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
1922
 
"    let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= substitute(a:curdir,'[/\\]$','','e')
1923
 
    let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= a:curdir
1924
 
"    call Decho("save dirhist#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
 
1906
   if !exists("g:netrw_dirhist_cnt") || !exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") || g:netrw_dirhist_{g:netrw_dirhist_cnt} != a:curdir
 
1907
    let g:netrw_dirhist_cnt                   = ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
 
1908
    let g:netrw_dirhist_{g:netrw_dirhist_cnt} = a:curdir
 
1909
"    call Decho("save dirhist#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
1925
1910
   endif
1926
1911
 
1927
1912
  elseif a:chg == 4
1928
1913
   " u: change to the previous directory stored on the history list
1929
1914
"   call Decho("(user: <u>) chg to prev dir from history")
1930
 
   let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
1931
 
   if g:NETRW_DIRHIST_CNT < 0
1932
 
    let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
 
1915
   let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
 
1916
   if g:netrw_dirhist_cnt < 0
 
1917
    let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
1933
1918
   endif
1934
 
   if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
1935
 
"    call Decho("changedir u#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
 
1919
   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
 
1920
"    call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
1936
1921
    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
1937
1922
     setlocal ma noro
1938
1923
"     call Decho("setlocal ma noro")
1940
1925
     setlocal nomod
1941
1926
"     call Decho("setlocal nomod")
1942
1927
    endif
1943
 
"    "    call Decho("exe e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}))
1944
 
    exe "e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
 
1928
"    "    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
 
1929
    exe "e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
1945
1930
   else
1946
 
    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
 
1931
    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
1947
1932
    echo "Sorry, no predecessor directory exists yet"
1948
1933
   endif
1949
1934
 
1950
1935
  elseif a:chg == 5
1951
1936
   " U: change to the subsequent directory stored on the history list
1952
1937
"   call Decho("(user: <U>) chg to next dir from history")
1953
 
   let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
1954
 
   if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
1955
 
"    call Decho("changedir U#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
 
1938
   let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
 
1939
   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
 
1940
"    call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
1956
1941
    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
1957
1942
     setlocal ma noro
1958
1943
"     call Decho("setlocal ma noro")
1961
1946
     setlocal nomod
1962
1947
"     call Decho("setlocal nomod")
1963
1948
    endif
1964
 
"    call Decho("exe e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}))
1965
 
    exe "e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
 
1949
"    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
 
1950
    exe "e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
1966
1951
   else
1967
 
    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
1968
 
    if g:NETRW_DIRHIST_CNT < 0
1969
 
     let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
 
1952
    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
 
1953
    if g:netrw_dirhist_cnt < 0
 
1954
     let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
1970
1955
    endif
1971
1956
    echo "Sorry, no successor directory exists yet"
1972
1957
   endif
1973
1958
 
1974
1959
  elseif a:chg == 6
1975
 
   if v:count > 0 && v:count == g:NETRW_BOOKMARKMAX
1976
 
    " delete the v:count'th bookmark
1977
 
"    call Decho("delete bookmark#".v:count."<".g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}.">")
1978
 
    unlet g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}
1979
 
    let g:NETRW_BOOKMARKMAX= g:NETRW_BOOKMARKMAX - 1
1980
 
 
1981
 
   elseif v:count > 0
1982
 
"    call Decho("delete by shifting bookmark#".v:count."<".g:NETRW_BOOKMARKDIR_{v:count}.">")
1983
 
    let cnt= v:count
1984
 
    while cnt < g:NETRW_BOOKMARKMAX
1985
 
     let g:NETRW_BOOKMARKDIR_{cnt} = g:NETRW_BOOKMARKDIR_{(cnt+1)}
1986
 
     let cnt                       = cnt + 1
1987
 
    endwhile
1988
 
    unlet g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}
1989
 
    let g:NETRW_BOOKMARKMAX= g:NETRW_BOOKMARKMAX - 1
1990
 
 
1991
 
   elseif exists("b:netrw_curdir")
1992
 
    " look for current directory amongst the bookmarks and remove that bookmark
1993
 
"    call Decho("search for bookmark<".b:netrw_curdir.">")
1994
 
    let cnt= 1
1995
 
    while cnt <= g:NETRW_BOOKMARKMAX
1996
 
"     call Decho("checking: g:NETRW_BOOKMARKDIR_".cnt."<".g:NETRW_BOOKMARKDIR_{cnt}.">")
1997
 
     if g:NETRW_BOOKMARKDIR_{cnt} == b:netrw_curdir
1998
 
      if cnt < g:NETRW_BOOKMARKMAX
1999
 
"       call Decho("delete bookmark#".cnt."<".b:netrw_curdir.">")
2000
 
       while cnt < g:NETRW_BOOKMARMAX
2001
 
        let g:NETRW_BOOKMARKDIR_{cnt} = g:NETRW_BOOKMARKDIR_{(cnt+1)}
2002
 
        let cnt                       = cnt + 1
2003
 
       endwhile
2004
 
      endif
2005
 
      unlet g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}
2006
 
      let g:NETRW_BOOKMARKMAX= g:NETRW_BOOKMARKMAX - 1
2007
 
     endif
2008
 
     let cnt= cnt + 1
2009
 
    endwhile
 
1960
   " delete the v:count'th bookmark
 
1961
"   call Decho("delete bookmark#".v:count."<".g:netrw_bookmarklist[v:count-1].">")
 
1962
   let savefile= s:NetrwHome()."/.netrwbook"
 
1963
   if filereadable(savefile)
 
1964
    call s:NetrwBookHistSave() " done here to merge bookmarks first
 
1965
    call delete(savefile)
2010
1966
   endif
2011
 
 
 
1967
   call remove(g:netrw_bookmarklist,v:count-1)
2012
1968
  endif
2013
1969
  call s:NetrwBookmarkMenu()
2014
 
"  call Dret("NetrwBookmarkDir")
 
1970
"  call Dret("NetrwBookHistHandler")
 
1971
endfun
 
1972
 
 
1973
" ---------------------------------------------------------------------
 
1974
" s:NetrwBookHistRead: this function reads bookmarks and history {{{2
 
1975
"                      Sister function: s:NetrwBookHistSave()
 
1976
fun! s:NetrwBookHistRead()
 
1977
"  call Dfunc("s:NetrwBookHistRead()")
 
1978
  if !exists("s:netrw_initbookhist")
 
1979
   let home    = s:NetrwHome()
 
1980
   let savefile= home."/.netrwbook"
 
1981
   if filereadable(savefile)
 
1982
"    call Decho("sourcing .netrwbook")
 
1983
    exe "so ".savefile
 
1984
   endif
 
1985
   let savefile= home."/.netrwhist"
 
1986
   if filereadable(savefile)
 
1987
"    call Decho("sourcing .netrwhist")
 
1988
    exe "so ".savefile
 
1989
   endif
 
1990
   let s:netrw_initbookhist= 1
 
1991
   au VimLeave * call s:NetrwBookHistSave()
 
1992
  endif
 
1993
"  call Dret("s:NetrwBookHistRead")
 
1994
endfun
 
1995
 
 
1996
" ---------------------------------------------------------------------
 
1997
" s:NetrwBookHistSave: this function saves bookmarks and history {{{2
 
1998
"                      Sister function: s:NetrwBookHistRead()
 
1999
"                      I used to do this via viminfo but that appears to
 
2000
"                      be unreliable for long-term storage
 
2001
"                      COMBAK: does $HOME work under windows???
 
2002
fun! s:NetrwBookHistSave()
 
2003
"  call Dfunc("s:NetrwBookHistSave() dirhistmax=".g:netrw_dirhistmax)
 
2004
  let savefile= s:NetrwHome()."/.netrwhist"
 
2005
  1split
 
2006
  call s:NetrwEnew()
 
2007
  setlocal cino= com= cpo-=aA fo=nroql2 tw=0 report=10000 noswf
 
2008
  setlocal nocin noai noci magic nospell nohid wig= noaw
 
2009
  setlocal ma noro write
 
2010
  if exists("&acd") | setlocal noacd | endif
 
2011
  silent %d
 
2012
 
 
2013
  " save .netrwhist -- no attempt to merge
 
2014
  silent! file .netrwhist
 
2015
  call setline(1,"let g:netrw_dirhistmax  =".g:netrw_dirhistmax)
 
2016
  call setline(2,"let g:netrw_dirhist_cnt =".g:netrw_dirhist_cnt)
 
2017
  let lastline = line("$")
 
2018
  let cnt      = 1
 
2019
  while cnt <= g:netrw_dirhist_cnt
 
2020
   call setline((cnt+lastline),'let g:netrw_dirhist_'.cnt."='".g:netrw_dirhist_{cnt}."'")
 
2021
   let cnt= cnt + 1
 
2022
  endwhile
 
2023
  exe "silent! w! ".savefile
 
2024
 
 
2025
  silent %d
 
2026
  if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
 
2027
   " merge and write .netrwbook
 
2028
   let savefile= s:NetrwHome()."/.netrwbook"
 
2029
 
 
2030
   if filereadable(savefile)
 
2031
    let booklist= deepcopy(g:netrw_bookmarklist)
 
2032
    exe "silent so ".savefile
 
2033
    for bdm in booklist
 
2034
     if index(g:netrw_bookmarklist,bdm) == -1
 
2035
      call add(g:netrw_bookmarklist,bdm)
 
2036
     endif
 
2037
    endfor
 
2038
    call sort(g:netrw_bookmarklist)
 
2039
    exe "silent! w! ".savefile
 
2040
   endif
 
2041
 
 
2042
   " construct and save .netrwbook
 
2043
   call setline(1,"let g:netrw_bookmarklist= ".string(g:netrw_bookmarklist))
 
2044
   exe "silent! w! ".savefile
 
2045
  endif
 
2046
  let bgone= bufnr("%")
 
2047
  q!
 
2048
  exe bgone."bwipe!"
 
2049
 
 
2050
"  call Dret("s:NetrwBookHistSave")
2015
2051
endfun
2016
2052
 
2017
2053
" ---------------------------------------------------------------------
2024
2060
"  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%").">")
2025
2061
"  call Decho("tab#".tabpagenr()." win#".winnr())
2026
2062
"  call Dredir("ls!")
 
2063
  if !exists("s:netrw_initbookhist")
 
2064
   call s:NetrwBookHistRead()
 
2065
  endif
 
2066
 
 
2067
  " simplify the dirname (especially for ".."s in dirnames)
 
2068
  if a:dirname !~ '^\a\+://'
 
2069
   let dirname= simplify(a:dirname)
 
2070
  else
 
2071
   let dirname= a:dirname
 
2072
  endif
2027
2073
 
2028
2074
  if exists("s:netrw_skipbrowse")
2029
2075
   unlet s:netrw_skipbrowse
2043
2089
  endif
2044
2090
 
2045
2091
  call s:NetrwOptionSave("w:")
2046
 
  call s:NetrwSafeOptions()
2047
2092
 
2048
2093
  " re-instate any marked files
2049
2094
  if exists("s:netrwmarkfilelist_{bufnr('%')}")
2053
2098
 
2054
2099
  if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
2055
2100
"   call Decho("handle w:netrw_acdkeep:")
2056
 
"   call Decho("keepjumps lcd ".fnameescape(a:dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
2057
 
   exe 'keepjumps lcd '.fnameescape(a:dirname)
 
2101
"   call Decho("keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
 
2102
   exe 'keepjumps lcd '.fnameescape(dirname)
 
2103
   call s:NetrwSafeOptions()
2058
2104
"   call Decho("getcwd<".getcwd().">")
2059
2105
 
2060
 
  elseif !a:islocal && a:dirname !~ '[\/]$' && a:dirname !~ '^"'
 
2106
  elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"'
2061
2107
   " looks like a regular file, attempt transfer
2062
 
"   call Decho("attempt transfer as regular file<".a:dirname.">")
 
2108
"   call Decho("attempt transfer as regular file<".dirname.">")
2063
2109
 
2064
2110
   " remove any filetype indicator from end of dirname, except for the {{{3
2065
2111
   " "this is a directory" indicator (/).
2066
2112
   " There shouldn't be one of those here, anyway.
2067
 
   let path= substitute(a:dirname,'[*=@|]\r\=$','','e')
 
2113
   let path= substitute(dirname,'[*=@|]\r\=$','','e')
2068
2114
"   call Decho("new path<".path.">")
2069
 
   call s:RemotePathAnalysis(a:dirname)
 
2115
   call s:RemotePathAnalysis(dirname)
2070
2116
 
2071
2117
   " remote-read the requested file into current buffer {{{3
2072
2118
   mark '
2073
 
   call s:NetrwEnew(a:dirname)
 
2119
   call s:NetrwEnew(dirname)
 
2120
   call s:NetrwSafeOptions()
2074
2121
   setlocal ma noro
2075
2122
"   call Decho("setlocal ma noro")
2076
 
   let b:netrw_curdir= a:dirname
 
2123
   let b:netrw_curdir= dirname
2077
2124
"   call Decho("exe silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)." (bt=".&bt.")")
2078
2125
   exe "silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)
2079
2126
   exe "silent keepalt doau BufReadPre ".fnameescape(s:fname)
2098
2145
 
2099
2146
  " set up some variables {{{3
2100
2147
  let b:netrw_browser_active = 1
2101
 
  let dirname                = a:dirname
 
2148
  let dirname                = dirname
2102
2149
  let s:last_sort_by         = g:netrw_sort_by
2103
2150
 
2104
2151
  " set up menu {{{3
2183
2230
  else
2184
2231
"   call Decho("remote only:")
2185
2232
 
2186
 
   " analyze a:dirname and g:netrw_list_cmd {{{4
2187
 
"   call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> a:dirname<".a:dirname.">")
2188
 
   if a:dirname =~ "^NetrwTreeListing\>"
 
2233
   " analyze dirname and g:netrw_list_cmd {{{4
 
2234
"   call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">")
 
2235
   if dirname =~ "^NetrwTreeListing\>"
2189
2236
    let dirname= b:netrw_curdir
2190
 
"    call Decho("(dirname was ".a:dirname.") dirname<".dirname.">")
 
2237
"    call Decho("(dirname was ".dirname.") dirname<".dirname.">")
2191
2238
   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
2192
2239
    let dirname= substitute(b:netrw_curdir,'\\','/','g')
2193
2240
    if dirname !~ '/$'
2196
2243
    let b:netrw_curdir = dirname
2197
2244
"    call Decho("(liststyle is TREELIST) dirname<".dirname.">")
2198
2245
   else
2199
 
    let dirname = substitute(a:dirname,'\\','/','g')
 
2246
    let dirname = substitute(dirname,'\\','/','g')
2200
2247
"    call Decho("(normal) dirname<".dirname.">")
2201
2248
   endif
2202
2249
 
2221
2268
  call s:BrowserMaps(a:islocal)
2222
2269
  call s:PerformListing(a:islocal)
2223
2270
 
 
2271
  " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd
 
2272
  " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed).
 
2273
  " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting
 
2274
  " the variable below avoids that second refresh of the screen.  The s:LocalBrowseShellCmdRefresh()
 
2275
  " function gets called due to that autocmd; it notices that the following variable is set
 
2276
  " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008
 
2277
  let s:locbrowseshellcmd= 1
 
2278
 
2224
2279
"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
2225
2280
"  call Dret("s:NetrwBrowse : did PerformListing")
2226
2281
  return
2280
2335
    set ei=all
2281
2336
    exe "b ".w:netrw_treebufnr
2282
2337
    let &ei= eikeep
2283
 
"    call Dret("s:NetrwGetBuffer : bufnum#".bufnum."<NetrwTreeListing>")
 
2338
"    call Dret("s:NetrwGetBuffer : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
2284
2339
    return
2285
2340
   endif
2286
2341
   let bufnum= -1
2446
2501
" ---------------------------------------------------------------------
2447
2502
"  s:NetrwGetWord: it gets the directory/file named under the cursor {{{2
2448
2503
fun! s:NetrwGetWord()
2449
 
"  call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".w:netrw_col)
 
2504
"  call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol("."))
2450
2505
  call s:UseBufWinVars()
2451
2506
 
2452
2507
  " insure that w:netrw_liststyle is set up
2510
2565
   if !exists("b:netrw_cpf")
2511
2566
    let b:netrw_cpf= 0
2512
2567
    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
 
2568
    call histdel("/",-1)
2513
2569
"   call Decho("computed cpf=".b:netrw_cpf)
2514
2570
   endif
2515
2571
 
2516
2572
"   call Decho("buf#".bufnr("%")."<".bufname("%").">")
2517
 
   let filestart = (w:netrw_col/b:netrw_cpf)*b:netrw_cpf
2518
 
"   call Decho("filestart= ([virtcol=".w:netrw_col."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
 
2573
   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
 
2574
"   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
2519
2575
"   call Decho("1: dirname<".dirname.">")
2520
2576
   if filestart == 0
2521
2577
    norm! 0ma
2621
2677
  let svpos= netrw#NetrwSavePosn()
2622
2678
  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
2623
2679
  call netrw#NetrwRestorePosn(svpos)
 
2680
  if w:netrw_liststyle != s:WIDELIST
 
2681
   if g:netrw_cursorline == 2
 
2682
    setlocal cursorline
 
2683
    let &cursorcolumn= s:netrw_usercuc
 
2684
   elseif g:netrw_cursorline
 
2685
    setlocal cursorline
 
2686
"    call Decho("setlocal cursorline")
 
2687
   endif
 
2688
  else
 
2689
   if g:netrw_cursorline == 2
 
2690
    setlocal cursorline cursorcolumn
 
2691
"    call Decho("setlocal cursorline cursorcolumn")
 
2692
   elseif g:netrw_cursorline
 
2693
    let &cursorline= s:netrw_usercul
 
2694
   endif
 
2695
  endif
2624
2696
 
2625
2697
  " keep cursor on the filename
2626
2698
  silent keepjumps $
2642
2714
  if !exists("s:netrw_menucnt")
2643
2715
   return
2644
2716
  endif
2645
 
"  call Dfunc("NetrwBookmarkMenu() bookmarkcnt=".g:NETRW_BOOKMARKMAX." histcnt=".g:NETRW_DIRHIST_CNT." menucnt=".s:netrw_menucnt)
 
2717
"  call Dfunc("NetrwBookmarkMenu()  histcnt=".g:netrw_dirhist_cnt." menucnt=".s:netrw_menucnt)
2646
2718
 
2647
2719
  " the following test assures that gvim is running, has menus available, and has menus enabled.
2648
2720
  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
2649
2721
   if exists("g:NetrwTopLvlMenu")
2650
2722
"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
2651
2723
    exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
 
2724
    exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete'
 
2725
   endif
 
2726
   if !exists("s:netrw_initbookhist")
 
2727
    call s:NetrwBookHistRead()
2652
2728
   endif
2653
2729
 
2654
2730
   " show bookmarked places
2655
 
   let cnt       = 1
2656
 
   while cnt <= g:NETRW_BOOKMARKMAX
2657
 
    if exists("g:NETRW_BOOKMARKDIR_{cnt}")
2658
 
     let bmdir= escape(g:NETRW_BOOKMARKDIR_{cnt},'. ')
2659
 
"     call Decho('silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmdir.'        :e '.bmdir)
2660
 
     exe 'silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmdir.'       :e '.bmdir."\<cr>"
2661
 
    endif
2662
 
    let cnt= cnt + 1
2663
 
   endwhile
 
2731
   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
 
2732
    let cnt= 1
 
2733
    for bmd in g:netrw_bookmarklist
 
2734
"     call Decho('silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmd.'  :e '.bmd)
 
2735
     let bmd= escape(bmd,'. ')
 
2736
 
 
2737
     " show bookmarks for goto menu
 
2738
     exe 'silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmd.' :e '.bmd."\<cr>"
 
2739
 
 
2740
     " show bookmarks for deletion menu
 
2741
     exe 'silent! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.bmd.'        '.cnt."mB"
 
2742
     let cnt= cnt + 1
 
2743
    endfor
 
2744
 
 
2745
   endif
2664
2746
 
2665
2747
   " show directory browsing history
2666
 
   let cnt     = g:NETRW_DIRHIST_CNT
 
2748
   let cnt     = g:netrw_dirhist_cnt
2667
2749
   let first   = 1
2668
2750
   let histcnt = 0
2669
 
   while ( first || cnt != g:NETRW_DIRHIST_CNT )
 
2751
   while ( first || cnt != g:netrw_dirhist_cnt )
2670
2752
    let histcnt  = histcnt + 1
2671
 
    let priority = g:NETRW_DIRHIST_CNT + histcnt
2672
 
    if exists("g:NETRW_DIRHIST_{cnt}")
2673
 
     let bmdir= escape(g:NETRW_DIRHIST_{cnt},'/&? ')
2674
 
"     call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.'    :e '.bmdir)
2675
 
     exe 'silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.'    :e '.bmdir."\<cr>"
 
2753
    let priority = g:netrw_dirhist_cnt + histcnt
 
2754
    if exists("g:netrw_dirhist_{cnt}")
 
2755
     let histdir= escape(g:netrw_dirhist_{cnt},'./&? ')
 
2756
"     call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'  :e '.histdir)
 
2757
     exe 'silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'  :e '.histdir."\<cr>"
2676
2758
    endif
2677
2759
    let first = 0
2678
2760
    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
2680
2762
     let cnt= cnt + g:netrw_dirhistmax
2681
2763
    endif
2682
2764
   endwhile
 
2765
 
2683
2766
  endif
2684
2767
"  call Dret("NetrwBookmarkMenu")
2685
2768
endfun
2737
2820
    else
2738
2821
     let dirname= s:NetrwTreeDir()."/".newdir
2739
2822
    endif
 
2823
"    call Decho("dirname<".dirname.">")
2740
2824
"    call Decho("tree listing")
2741
2825
   elseif newdir =~ '^\(/\|\a:\)'
2742
2826
    let dirname= newdir
2782
2866
    endif
2783
2867
    let dolockout= 1
2784
2868
   endif
 
2869
   if exists("g:Netrw_funcref")
 
2870
    call g:Netrw_funcref()
 
2871
   endif
2785
2872
 
2786
2873
  elseif newdir =~ '^/'
2787
2874
   " ---------------------------------
2887
2974
    " close tree listing for selected subdirectory
2888
2975
"    call Decho("closing selected subdirectory<".dirname.">")
2889
2976
    call remove(w:netrw_treedict,treedir)
2890
 
"    call Decho("removed     entry<".dirname."> from treedict")
 
2977
"    call Decho("removed     entry<".treedir."> from treedict")
2891
2978
"    call Decho("yielding treedict<".string(w:netrw_treedict).">")
2892
 
    let dirname= w:netrw_treetop
 
2979
    let dirname           = w:netrw_treetop
2893
2980
   else
2894
2981
    " go down one directory
2895
2982
    let dirname= substitute(treedir,'/*$','/','')
2896
2983
"    call Decho("go down one dir: treedir<".treedir.">")
2897
2984
   endif
2898
2985
   call s:SetRexDir(a:islocal,dirname)
 
2986
   let s:treeforceredraw = 1
2899
2987
 
2900
2988
  else
2901
2989
   " go down one directory
2927
3015
  if has("win32") || has("win95") || has("win64") || has("win16")
2928
3016
   let exten= substitute(exten,'^.*$','\L&\E','')
2929
3017
  endif
 
3018
"  call Decho("exten<".exten.">")
2930
3019
 
2931
3020
  " seems kde systems often have gnome-open due to dependencies, even though
2932
3021
  " gnome-open's subsidiary display tools are largely absent.  Kde systems
2945
3034
 
2946
3035
  if a:remote == 1
2947
3036
   " create a local copy
2948
 
   let fname= fnamemodify(tempname(),":r").".".exten
2949
 
"   call Decho("a:remote=".a:remote.": create a local copy of <".fname."> as <".fname.">")
2950
 
   exe "silent keepjumps bot 1new ".fnameescape(fname)
 
3037
"   call Decho("a:remote=".a:remote.": create a local copy of <".a:fname.">")
2951
3038
   setlocal bh=delete
2952
 
"   call Decho("read <".fnameescape(fname).">, now writing: exe w! ".fnameescape(fname))
2953
 
   exe "silent! w! ".fnameescape(fname)
2954
 
   q
 
3039
   call netrw#NetRead(3,a:fname)
 
3040
   " attempt to rename tempfile
 
3041
   let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','')
 
3042
   let newname= substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','')
 
3043
"   call Decho("basename<".basename.">")
 
3044
"   call Decho("newname <".newname.">")
 
3045
   if rename(s:netrw_tmpfile,newname) == 0
 
3046
    " renaming succeeded
 
3047
    let fname= newname
 
3048
   else
 
3049
    " renaming failed
 
3050
    let fname= s:netrw_tmpfile
 
3051
   endif
2955
3052
  else
2956
3053
   let fname= a:fname
2957
3054
  endif
 
3055
"  call Decho("fname<".fname.">")
2958
3056
"  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
2959
3057
 
2960
3058
  " set up redirection
3061
3159
 
3062
3160
" ---------------------------------------------------------------------
3063
3161
" netrw#Explore: launch the local browser in the directory of the current file {{{2
3064
 
"          dosplit==0: the window will be split iff the current file has
3065
 
"                      been modified
3066
 
"          dosplit==1: the window will be split before running the local
3067
 
"                      browser
 
3162
"          indx:  == -1: Nexplore
 
3163
"                 == -2: Pexplore
 
3164
"                 ==  +: this is overloaded:
 
3165
"                      * If Nexplore/Pexplore is in use, then this refers to the
 
3166
"                        indx'th item in the w:netrw_explore_list[] of items which
 
3167
"                        matched the */pattern **/pattern *//pattern **//pattern
 
3168
"                      * If Hexplore or Vexplore, then this will override
 
3169
"                        g:netrw_winsize to specify the qty of rows or columns the
 
3170
"                        newly split window should have.
 
3171
"          dosplit==0: the window will be split iff the current file has been modified
 
3172
"          dosplit==1: the window will be split before running the local browser
 
3173
"          style == 0: Explore     style == 1: Explore!
 
3174
"                == 2: Hexplore    style == 3: Hexplore!
 
3175
"                == 4: Vexplore    style == 5: Vexplore!
 
3176
"                == 6: Texplore
3068
3177
fun! netrw#Explore(indx,dosplit,style,...)
3069
3178
"  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." a:0=".a:0)
3070
3179
  if !exists("b:netrw_curdir")
3083
3192
  if a:dosplit || &modified || a:style == 6
3084
3193
"   call Decho("case: dosplit=".a:dosplit." modified=".&modified." a:style=".a:style)
3085
3194
   call s:SaveWinVars()
 
3195
   let winsize= g:netrw_winsize
 
3196
   if a:indx > 0
 
3197
    let winsize= a:indx
 
3198
   endif
3086
3199
 
3087
3200
   if a:style == 0      " Explore, Sexplore
3088
3201
"    call Decho("style=0: Explore or Sexplore")
3089
 
    exe g:netrw_winsize."wincmd s"
 
3202
    exe winsize."wincmd s"
3090
3203
 
3091
3204
   elseif a:style == 1  "Explore!, Sexplore!
3092
3205
"    call Decho("style=1: Explore! or Sexplore!")
3093
 
    exe g:netrw_winsize."wincmd v"
 
3206
    exe winsize."wincmd v"
3094
3207
 
3095
3208
   elseif a:style == 2  " Hexplore
3096
3209
"    call Decho("style=2: Hexplore")
3097
 
    exe "bel ".g:netrw_winsize."wincmd s"
 
3210
    exe "bel ".winsize."wincmd s"
3098
3211
 
3099
3212
   elseif a:style == 3  " Hexplore!
3100
3213
"    call Decho("style=3: Hexplore!")
3101
 
    exe "abo ".g:netrw_winsize."wincmd s"
 
3214
    exe "abo ".winsize."wincmd s"
3102
3215
 
3103
3216
   elseif a:style == 4  " Vexplore
3104
3217
"    call Decho("style=4: Vexplore")
3105
 
    exe "lefta ".g:netrw_winsize."wincmd v"
 
3218
    exe "lefta ".winsize."wincmd v"
3106
3219
 
3107
3220
   elseif a:style == 5  " Vexplore!
3108
3221
"    call Decho("style=5: Vexplore!")
3109
 
    exe "rightb ".g:netrw_winsize."wincmd v"
 
3222
    exe "rightb ".winsize."wincmd v"
3110
3223
 
3111
3224
   elseif a:style == 6  " Texplore
3112
3225
    call s:SaveBufVars()
3137
3250
   endif
3138
3251
  else
3139
3252
   " clear explore
3140
 
"   call Decho("clearing explore variables")
3141
 
   2match none
3142
 
   if exists("s:explore_match")        |unlet s:explore_match        |endif
3143
 
   if exists("s:explore_indx")         |unlet s:explore_indx         |endif
3144
 
   if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
3145
 
   if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
3146
 
   if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
3147
 
   if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
3148
 
   if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
3149
 
   if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
3150
 
"   redraw!
3151
 
   echo " "
3152
 
   echo " "
 
3253
   call s:NetrwClearExplore()
3153
3254
"   call Dret("netrw#Explore : cleared list")
3154
3255
   return
3155
3256
  endif
3237
3338
    if !exists("w:netrw_explore_indx")
3238
3339
     let w:netrw_explore_indx= 0
3239
3340
    endif
 
3341
 
3240
3342
    let indx = a:indx
3241
3343
"    call Decho("starpat=".starpat.": set indx= [a:indx=".indx."]")
3242
 
"
 
3344
 
3243
3345
    if indx == -1
3244
3346
     " Nexplore
3245
3347
"     call Decho("case Nexplore with starpat=".starpat.": (indx=".indx.")")
3290
3392
     " Explore -- initialize
3291
3393
     " build list of files to Explore with Nexplore/Pexplore
3292
3394
"     call Decho("starpat=".starpat.": case Explore: initialize (indx=".indx.")")
 
3395
     call s:NetrwClearExplore()
3293
3396
     let w:netrw_explore_indx= 0
3294
3397
     if !exists("b:netrw_curdir")
3295
3398
      let b:netrw_curdir= getcwd()
3300
3403
     if starpat == 1
3301
3404
      " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
3302
3405
"      call Decho("starpat=".starpat.": build *//pattern list")
 
3406
"      call Decho("pattern<".pattern.">")
3303
3407
      exe "vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
3304
 
      let w:netrw_explore_list = map(getqflist(),'bufname(v:val.bufnr)')
 
3408
      let w:netrw_explore_list = s:NetrwExploreListUniq(map(getqflist(),'bufname(v:val.bufnr)'))
3305
3409
      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
3306
3410
 
3307
3411
     elseif starpat == 2
3320
3424
      endtry
3321
3425
      let s:netrw_curdir       = b:netrw_curdir
3322
3426
      let w:netrw_explore_list = getqflist()
3323
 
      let w:netrw_explore_list = map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)')
 
3427
      let w:netrw_explore_list = s:NetrwExploreListUniq(map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)'))
3324
3428
 
3325
3429
     elseif starpat == 3
3326
3430
      " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
3327
3431
"      call Decho("starpat=".starpat.": build */filepat list")
3328
 
      let dirname             = substitute(dirname,'^\*/','','')
3329
 
      let w:netrw_explore_list= split(expand(b:netrw_curdir."/".dirname),'\n')
3330
 
      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
 
3432
      let filepat= substitute(dirname,'^\*/','','')
 
3433
      let filepat= substitute(filepat,'^[%#<]','\\&','')
 
3434
"      call Decho("b:netrw_curdir<".b:netrw_curdir.">")
 
3435
"      call Decho("filepat<".filepat.">")
 
3436
      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n'))
 
3437
      if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif
3331
3438
 
3332
3439
     elseif starpat == 4
3333
3440
      " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
3334
3441
"      call Decho("starpat=".starpat.": build **/filepat list")
3335
 
      let w:netrw_explore_list= split(expand(b:netrw_curdir."/".dirname),'\n')
 
3442
      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n'))
3336
3443
      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
3337
3444
     endif " switch on starpat to build w:netrw_explore_list
3338
3445
 
3352
3459
 
3353
3460
    " NetrwStatusLine support - for exploring support
3354
3461
    let w:netrw_explore_indx= indx
3355
 
"    call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
 
3462
"    call Decho("w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
3356
3463
 
3357
3464
    " wrap the indx around, but issue a note
3358
3465
    if indx >= w:netrw_explore_listlen || indx < 0
3360
3467
     let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
3361
3468
     let w:netrw_explore_indx= indx
3362
3469
     call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
3363
 
     sleep 1
3364
3470
    endif
3365
3471
 
3366
3472
    exe "let dirfile= w:netrw_explore_list[".indx."]"
3411
3517
  endif
3412
3518
 
3413
3519
  " visual display of **/ **// */ Exploration files
 
3520
"  call Decho("w:netrw_explore_indx=".w:netrw_explore_indx)
 
3521
"  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
3414
3522
  if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
 
3523
"   call Decho("s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-"))
3415
3524
   if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
3416
3525
    " only update match list if current directory isn't the same as before
 
3526
"    call Decho("only update match list if current directory not the same as before")
3417
3527
    let s:explore_prvdir = b:netrw_curdir
3418
3528
    let s:explore_match  = ""
3419
 
    let dirlen           = strlen(b:netrw_curdir)
 
3529
    let dirlen           = s:Strlen(b:netrw_curdir)
3420
3530
    if b:netrw_curdir !~ '/$'
3421
3531
     let dirlen= dirlen + 1
3422
3532
    endif
3425
3535
"     call Decho("fname<".fname.">")
3426
3536
     if fname =~ '^'.b:netrw_curdir
3427
3537
      if s:explore_match == ""
3428
 
       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
 
3538
       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
3429
3539
      else
3430
 
       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
 
3540
       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
3431
3541
      endif
3432
3542
     elseif fname !~ '^/' && fname != prvfname
3433
3543
      if s:explore_match == ""
3434
 
       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
 
3544
       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>'
3435
3545
      else
3436
 
       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
 
3546
       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>'
3437
3547
      endif
3438
3548
     endif
3439
3549
     let prvfname= fname
3457
3567
endfun
3458
3568
 
3459
3569
" ---------------------------------------------------------------------
 
3570
" s:NetrwClearExplore: clear explore variables (if any) {{{2
 
3571
fun! s:NetrwClearExplore()
 
3572
"  call Dfunc("s:NetrwClearExplore()")
 
3573
  2match none
 
3574
  if exists("s:explore_match")        |unlet s:explore_match        |endif
 
3575
  if exists("s:explore_indx")         |unlet s:explore_indx         |endif
 
3576
  if exists("s:netrw_explore_prvdir") |unlet s:netrw_explore_prvdir |endif
 
3577
  if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
 
3578
  if exists("s:explore_prvdir")       |unlet s:explore_prvdir       |endif
 
3579
  if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
 
3580
  if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
 
3581
  if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
 
3582
  if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
 
3583
"   redraw!
 
3584
  echo " "
 
3585
  echo " "
 
3586
"  call Dret("s:NetrwClearExplore")
 
3587
endfun
 
3588
 
 
3589
" ---------------------------------------------------------------------
 
3590
" s:NetrwExploreListUniq: {{{2
 
3591
fun! s:NetrwExploreListUniq(explist)
 
3592
"  call Dfunc("s:NetrwExploreListUniq(explist)")
 
3593
 
 
3594
  " this assumes that the list is already sorted
 
3595
  let newexplist= []
 
3596
  for member in a:explist
 
3597
   if !exists("uniqmember") || member != uniqmember
 
3598
    let uniqmember = member
 
3599
    let newexplist = newexplist + [ member ]
 
3600
   endif
 
3601
  endfor
 
3602
 
 
3603
"  call Dret("s:NetrwExploreListUniq")
 
3604
  return newexplist
 
3605
endfun
 
3606
 
 
3607
" ---------------------------------------------------------------------
3460
3608
" s:NetrwHide: this function is invoked by the "a" map for browsing {{{2
3461
3609
"          and switches the hiding mode.  The actual hiding is done by
3462
3610
"          s:NetrwListHide().
3490
3638
"     call Decho("hide: g:netrw_list_hide<".g:netrw_list_hide.">")
3491
3639
    endif
3492
3640
   endfor
3493
 
   unlet s:netrwmarkfilelist_{bufnr("%")}
3494
 
   unlet s:netrwmarkfilemtch_{bufnr("%")}
3495
 
   2match none
 
3641
   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
3496
3642
   let g:netrw_hide= 1
3497
3643
 
3498
3644
  else
3522
3668
  if g:netrw_list_hide =~ '\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+'
3523
3669
   " remove pattern from hiding list
3524
3670
   let g:netrw_list_hide= substitute(g:netrw_list_hide,'\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+','','')
3525
 
  elseif strlen(g:netrw_list_hide) >= 1
 
3671
  elseif s:Strlen(g:netrw_list_hide) >= 1
3526
3672
   let g:netrw_list_hide= g:netrw_list_hide . ',\(^\|\s\s\)\zs\.\S\+'
3527
3673
  else
3528
3674
   let g:netrw_list_hide= '\(^\|\s\s\)\zs\.\S\+'
3535
3681
endfun
3536
3682
 
3537
3683
" ---------------------------------------------------------------------
 
3684
"  s:NetrwHome: this function determines a "home" for saving bookmarks and history {{{2
 
3685
fun! s:NetrwHome()
 
3686
"  call Dfunc("s:NetrwHome()")
 
3687
  if exists("g:netrw_home")
 
3688
   let home= g:netrw_home
 
3689
  else
 
3690
   " go to vim plugin home
 
3691
   for home in split(&rtp,',') + ['']
 
3692
    if isdirectory(home) && filewritable(home) | break | endif
 
3693
     let basehome= substitute(home,'[/\\]\.vim$','','')
 
3694
    if isdirectory(basehome) && filewritable(basehome)
 
3695
     let home= basehome."/.vim"
 
3696
     break
 
3697
    endif
 
3698
   endfor
 
3699
   if home == ""
 
3700
    " just pick the first directory
 
3701
"    call Decho("just pick first directory in &rtp")
 
3702
    let home= substitute(&rtp,',.*$','','')
 
3703
   endif
 
3704
   if (has("win32") || has("win95") || has("win64") || has("win16"))
 
3705
    let home= substitute(home,'/','\\','g')
 
3706
   endif
 
3707
  endif
 
3708
  " insure that the home directory exists
 
3709
"  call Decho("picked home<".home.">")
 
3710
  if !isdirectory(home)
 
3711
   if exists("g:netrw_mkdir")
 
3712
"    call Decho("home<".home."> isn't a directory -- making it now with g:netrw_mkdir<".g:netrw_mkdir.">")
 
3713
"    call Decho("system(".g:netrw_mkdir." ".s:Escape(home).")")
 
3714
    call system(g:netrw_mkdir." ".s:Escape(home))
 
3715
   else
 
3716
"    call Decho("home<".home."> isn't a directory -- making it now with mkdir()")
 
3717
    call mkdir(home)
 
3718
   endif
 
3719
  endif
 
3720
  let g:netrw_home= home
 
3721
"  call Dret("s:NetrwHome <".home.">")
 
3722
  return home
 
3723
endfun
 
3724
 
 
3725
" ---------------------------------------------------------------------
3538
3726
" s:NetrwLeftmouse: handles the <leftmouse> when in a netrw browsing window {{{2
3539
3727
fun! s:NetrwLeftmouse(islocal)
3540
3728
"  call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")")
3767
3955
    call filter(s:netrwmarkfilelist_{curbufnr},'v:val != a:fname')
3768
3956
    if s:netrwmarkfilelist_{curbufnr} == []
3769
3957
     " local markfilelist is empty; remove it entirely
3770
 
"     call Decho("markfile list now empty, unlet s:netrwmarkfilelist_".curbufnr." and ...mtch_".curbufnr)
 
3958
"     call Decho("markfile list now empty")
3771
3959
     call s:NetrwUnmarkList(curbufnr,curdir)
3772
3960
    else
3773
3961
     " rebuild match list to display markings correctly
3982
4170
  if a:islocal
3983
4171
   call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
3984
4172
  endif
3985
 
  call s:LocalBrowseShellCmdRefresh()
 
4173
  if g:netrw_fastbrowse <= 1
 
4174
   call s:LocalBrowseShellCmdRefresh()
 
4175
  endif
3986
4176
  
3987
4177
"  call Dret("s:NetrwMarkFileCopy 1")
3988
4178
  return 1
4290
4480
  if a:islocal
4291
4481
   call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
4292
4482
  endif
4293
 
  call s:LocalBrowseShellCmdRefresh()
 
4483
  if g:netrw_fastbrowse <= 1
 
4484
   call s:LocalBrowseShellCmdRefresh()
 
4485
  endif
4294
4486
  
4295
4487
"  call Dret("s:NetrwMarkFileMove")
4296
4488
endfun
4371
4563
   set ei=all ma
4372
4564
"   call Decho("set ei=all ma")
4373
4565
   1split
4374
 
   enew
 
4566
   call s:NetrwEnew()
 
4567
   call s:NetrwSafeOptions()
4375
4568
   silent norm! "ap
4376
4569
   2
4377
4570
   let bannercnt= search('^" =====','W')
4379
4572
   set bt=nofile
4380
4573
   if     g:netrw_liststyle == s:LONGLIST
4381
4574
    silent %s/\s\{2,}\S.*$//e
 
4575
    call histdel("/",-1)
4382
4576
   elseif g:netrw_liststyle == s:WIDELIST
4383
4577
    silent %s/\s\{2,}/\r/ge
 
4578
    call histdel("/",-1)
4384
4579
   elseif g:netrw_liststyle == s:TREELIST
4385
4580
    silent %s/^| //e
4386
4581
    silent! g/^ .*$/d
 
4582
    call histdel("/",-1)
 
4583
    call histdel("/",-1)
4387
4584
   endif
4388
4585
   " convert regexp into the more usual glob-style format
4389
4586
   let regexp= substitute(regexp,'\*','.*','g')
4390
4587
"   call Decho("regexp<".regexp.">")
4391
4588
   exe "silent! v/".escape(regexp,'/')."/d"
 
4589
   call histdel("/",-1)
4392
4590
   let filelist= getline(1,line("$"))
4393
4591
   q!
4394
4592
   for filename in filelist
4459
4657
    let path= substitute(curdir,'^\(.*\)/[^/]*$','\1/','')
4460
4658
"    call Decho("curdir<".curdir."> path<".path.">")
4461
4659
    exe '%s/\t\(\S\+\)\t/\t'.escape(path,"/\n\r\\").'\1\t/e'
 
4660
    call histdel("/",-1)
4462
4661
    wq!
4463
4662
   endif
4464
4663
   2match none
4518
4717
  endif
4519
4718
  let s:netrwmftgt_islocal= a:islocal
4520
4719
 
4521
 
  if g:netrw_fastbrowse > 0
 
4720
  if g:netrw_fastbrowse <= 1
4522
4721
   call s:LocalBrowseShellCmdRefresh()
4523
4722
  endif
4524
4723
  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
4653
4852
"    call Decho("initialize menu")
4654
4853
    let s:netrw_menu_enabled= 1
4655
4854
    exe 'silent! menu '.g:NetrwMenuPriority.'.1     '.g:NetrwTopLvlMenu.'Help<tab><F1>  <F1>'
4656
 
    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4
4657
4855
    exe 'silent! menu '.g:NetrwMenuPriority.'.5     '.g:NetrwTopLvlMenu.'-Sep1- :'
4658
4856
    exe 'silent! menu '.g:NetrwMenuPriority.'.6     '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-        -'
4659
4857
    exe 'silent! menu '.g:NetrwMenuPriority.'.7     '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x   x'
4660
4858
    exe 'silent! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb    mb'
4661
 
    exe 'silent! menu '.g:NetrwMenuPriority.'.8.2   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete<tab>mB        mB'
4662
 
    exe 'silent! menu '.g:NetrwMenuPriority.'.8.3   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Bookmark<tab>gb  gb'
4663
4859
    exe 'silent! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u       u'
4664
4860
    exe 'silent! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U       U'
4665
4861
    exe 'silent! menu '.g:NetrwMenuPriority.'.8.6   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb    qb'
4666
 
    exe 'silent! menu '.g:NetrwMenuPriority.'.9.1   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab>'."<ctrl-h>     \<Plug>NetrwHideEdit"
 
4862
    exe 'silent! menu '.g:NetrwMenuPriority.'.9.1   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'."     \<c-h>'"
4667
4863
    exe 'silent! menu '.g:NetrwMenuPriority.'.9.2   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S        S'
4668
4864
    exe 'silent! menu '.g:NetrwMenuPriority.'.9.3   '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh     gh"
4669
 
    exe 'silent! menu '.g:NetrwMenuPriority.'.9.4   '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>     \<Plug>NetrwRefresh"
 
4865
    exe 'silent! menu '.g:NetrwMenuPriority.'.9.4   '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>     \<c-l>"
4670
4866
    exe 'silent! menu '.g:NetrwMenuPriority.'.9.5   '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings  '.":NetrwSettings\<cr>"
4671
4867
    exe 'silent! menu '.g:NetrwMenuPriority.'.10    '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D   D'
4672
4868
    exe 'silent! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>    '."\<cr>"
4704
4900
    exe 'silent! menu '.g:NetrwMenuPriority.'.16.4  '.g:NetrwTopLvlMenu.'Style.Sorting\ Method\ (name-time-size)<tab>s  s'
4705
4901
    exe 'silent! menu '.g:NetrwMenuPriority.'.17    '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R   R'
4706
4902
    exe 'silent! menu '.g:NetrwMenuPriority.'.18    '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c  c'
 
4903
    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4, 8.2.x
4707
4904
    let s:netrw_menucnt= 28
4708
4905
 
4709
4906
   elseif !a:domenu
4731
4928
"  call Dfunc("NetrwObtain(islocal=".a:islocal.")")
4732
4929
 
4733
4930
  if exists("s:netrwmarkfilelist_{bufnr('%')}")
4734
 
   let islocal= s:netrwmarkfilelist_{bufnr("%")}[1] !~ '^\a\+://'
4735
 
   call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr("%")})
 
4931
   let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://'
 
4932
   call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')})
4736
4933
   call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir)
4737
4934
  else
4738
4935
   call netrw#NetrwObtain(a:islocal,expand("<cWORD>"))
4769
4966
  endif
4770
4967
"  call Decho("tgtdir<".tgtdir.">")
4771
4968
 
4772
 
  if b:netrw_islocal
 
4969
  if exists("b:netrw_islocal") && b:netrw_islocal
4773
4970
   " obtain a file from local b:netrw_curdir to (local) tgtdir
4774
4971
"   call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir)
4775
4972
   if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
4921
5118
      call netrw#ErrorMsg(s:ERROR,getline(1),5)
4922
5119
     endif
4923
5120
    endif
 
5121
   elseif !exists("b:netrw_method") || b:netrw_method < 0
 
5122
"    call Dfunc("netrw#NetrwObtain : unsupported method")
 
5123
    return
 
5124
   endif
 
5125
 
 
5126
   " restore status line
 
5127
   if type(a:fname) == 1 && exists("s:netrw_users_stl")
 
5128
    call s:SetupNetrwStatusLine(s:netrw_users_stl)
4924
5129
   endif
4925
5130
 
4926
5131
  endif
5138
5343
     endif
5139
5344
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
5140
5345
     silent g/Local directory now/d
 
5346
     call histdel("/",-1)
5141
5347
     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
5142
5348
      call netrw#ErrorMsg(s:ERROR,getline(1),14)
5143
5349
     else
5196
5402
     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
5197
5403
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
5198
5404
     silent g/Local directory now/d
 
5405
     call histdel("/",-1)
5199
5406
     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
5200
5407
      let debugkeep= &debug
5201
5408
      setlocal debug=msg
5205
5412
     else
5206
5413
      bw!|q
5207
5414
     endif
 
5415
    elseif !exists("b:netrw_method") || b:netrw_method < 0
 
5416
"     call Dfunc("netrw#NetrwUpload : unsupported method")
 
5417
     return
5208
5418
    endif
5209
5419
   else
5210
5420
    call netrw#ErrorMsg(s:ERROR,"can't obtain files with protocol from<".a:tgt.">",63)
5325
5535
    let seq     = seqlist
5326
5536
    let seqlist = ""
5327
5537
   endif
5328
 
   let sepchr= "\<Char-0xff>"
5329
5538
   if priority < 10
5330
 
    let spriority= "00".priority.sepchr
 
5539
    let spriority= "00".priority.g:netrw_sepchr
5331
5540
   elseif priority < 100
5332
 
    let spriority= "0".priority.sepchr
 
5541
    let spriority= "0".priority.g:netrw_sepchr
5333
5542
   else
5334
 
    let spriority= priority.sepchr
 
5543
    let spriority= priority.g:netrw_sepchr
5335
5544
   endif
5336
5545
"   call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
5337
5546
 
5345
5554
    let starpriority= spriority
5346
5555
   else
5347
5556
    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.seq.'/s/^/'.spriority.'/'
 
5557
    call histdel("/",-1)
5348
5558
    " sometimes multiple sorting patterns will match the same file or directory.
5349
5559
    " The following substitute is intended to remove the excess matches.
5350
 
    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^\d\{3}'.sepchr.'\d\{3}\//s/^\d\{3}'.sepchr.'\(\d\{3}\/\).\@=/\1/e'
 
5560
    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^\d\{3}'.g:netrw_sepchr.'\d\{3}\//s/^\d\{3}'.g:netrw_sepchr.'\(\d\{3}\/\).\@=/\1/e'
 
5561
    call histdel("/",-1)
5351
5562
   endif
5352
5563
   let priority = priority + 1
5353
5564
  endwhile
5354
5565
  if exists("starpriority")
5355
 
   exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}'.sepchr.'/s/^/'.starpriority.'/'
 
5566
   exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/'
 
5567
   call histdel("/",-1)
5356
5568
  endif
5357
5569
 
5358
5570
  " Following line associated with priority -- items that satisfy a priority
5361
5573
  " priority pattern needs to be retained.  So, at this point, these excess
5362
5574
  " priority prefixes need to be removed, but not directories that happen to
5363
5575
  " be just digits themselves.
5364
 
  exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}'.sepchr.'\)\%(\d\{3}'.sepchr.'\)\+\ze./\1/e'
 
5576
  exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}'.g:netrw_sepchr.'\)\%(\d\{3}'.g:netrw_sepchr.'\)\+\ze./\1/e'
 
5577
  call histdel("/",-1)
5365
5578
 
5366
5579
"  call Dret("SetSort")
5367
5580
endfun
5405
5618
 
5406
5619
  elseif a:mode == 1
5407
5620
   " remote and t
5408
 
   let cursorword  = s:NetrwGetWord()
 
5621
   let newdir  = s:NetrwBrowseChgDir(0,s:NetrwGetWord())
5409
5622
"   call Decho("tabnew")
5410
5623
   tabnew
5411
5624
   let s:didsplit= 1
5412
5625
   call s:RestoreWinVars()
5413
 
   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,cursorword))
 
5626
   call s:NetrwBrowse(0,newdir)
5414
5627
   unlet s:didsplit
5415
5628
 
5416
5629
  elseif a:mode == 2
5433
5646
 
5434
5647
  elseif a:mode == 4
5435
5648
   " local and t
5436
 
   let netrw_curdir= b:netrw_curdir
5437
5649
   let cursorword  = s:NetrwGetWord()
 
5650
   let netrw_curdir= s:NetrwTreeDir()
5438
5651
"   call Decho("tabnew")
5439
5652
   tabnew
5440
5653
   let b:netrw_curdir= netrw_curdir
5505
5718
  if w:netrw_liststyle == s:TREELIST
5506
5719
"   call Decho("w:netrrw_liststyle is TREELIST:")
5507
5720
"   call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
 
5721
 
 
5722
   " extract tree directory if on a line specifying a subdirectory (ie. ends with "/")
5508
5723
   if getline('.') =~ '/$'
5509
5724
    let treedir= substitute(getline('.'),'^\%(| \)*\([^|].\{-}\)$','\1','e')
5510
5725
   else
5511
5726
    let treedir= ""
5512
5727
   endif
5513
 
 
5514
5728
"   call Decho("treedir<".treedir.">")
5515
5729
 
5516
5730
   " detect user attempting to close treeroot
5525
5739
 
5526
5740
   " elide all non-depth information
5527
5741
   let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e')
5528
 
"   call Decho("depth<".depth."> 1st subst")
 
5742
"   call Decho("depth<".depth."> 1st subst (non-depth info removed)")
5529
5743
 
5530
5744
   " elide first depth
5531
5745
   let depth = substitute(depth,'^| ','','')
5532
 
"   call Decho("depth<".depth."> 2nd subst")
 
5746
"   call Decho("depth<".depth."> 2nd subst (first depth removed)")
5533
5747
 
5534
5748
   " construct treedir by searching backwards at correct depth
5535
5749
"   call Decho("constructing treedir<".treedir."> depth<".depth.">")
5548
5762
  endif
5549
5763
  let treedir= substitute(treedir,'//$','/','')
5550
5764
 
5551
 
"  " now force a refresh
5552
 
"" call DECHO("clear buffer<".expand("%")."> with :%d")
5553
 
"  setlocal ma noro
5554
 
"  keepjumps %d
5555
 
 
5556
5765
"  call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
5557
5766
  return treedir
5558
5767
endfun
5663
5872
  if w:netrw_liststyle == s:WIDELIST
5664
5873
"   call Dfunc("NetrwWideListing() w:netrw_liststyle=".w:netrw_liststyle.' fo='.&fo.' l:fo='.&l:fo)
5665
5874
   " look for longest filename (cpf=characters per filename)
5666
 
   " cpf: characters per file
5667
 
   " fpl: files per line
5668
 
   " fpc: files per column
 
5875
   " cpf: characters per filename
 
5876
   " fpl: filenames per line
 
5877
   " fpc: filenames per column
5669
5878
   setlocal ma noro
5670
5879
"   call Decho("setlocal ma noro")
5671
5880
   let b:netrw_cpf= 0
5672
5881
   if line("$") >= w:netrw_bannercnt
5673
5882
    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
 
5883
    call histdel("/",-1)
5674
5884
   else
5675
5885
"    call Dret("NetrwWideListing")
5676
5886
    return
5677
5887
   endif
5678
 
"   call Decho("max file strlen+1=".b:netrw_cpf)
5679
 
   let b:netrw_cpf= b:netrw_cpf + 1
 
5888
   let b:netrw_cpf= b:netrw_cpf + 2
 
5889
"   call Decho("b:netrw_cpf=max_filename_length+2=".b:netrw_cpf)
5680
5890
 
5681
5891
   " determine qty files per line (fpl)
5682
5892
   let w:netrw_fpl= winwidth(0)/b:netrw_cpf
5683
5893
   if w:netrw_fpl <= 0
5684
5894
    let w:netrw_fpl= 1
5685
5895
   endif
5686
 
"   call Decho("fpl= ".winwidth(0)."/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
 
5896
"   call Decho("fpl= [winwidth=".winwidth(0)."]/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
5687
5897
 
5688
5898
   " make wide display
5689
5899
   exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/'
 
5900
   call histdel("/",-1)
5690
5901
   let fpc         = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
5691
5902
   let newcolstart = w:netrw_bannercnt + fpc
5692
5903
   let newcolend   = newcolstart + fpc - 1
5706
5917
   endwhile
5707
5918
   silent! let @*= keepregstar
5708
5919
   exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
 
5920
   call histdel("/",-1)
5709
5921
   setlocal noma nomod ro
5710
5922
"   call Dret("NetrwWideListing")
5711
5923
  endif
5733
5945
  endif
5734
5946
 
5735
5947
  " save current directory on directory history list
5736
 
  call s:NetrwBookmarkDir(3,b:netrw_curdir)
 
5948
  call s:NetrwBookHistHandler(3,b:netrw_curdir)
5737
5949
 
5738
5950
  " Set up the banner {{{3
5739
5951
"  call Decho("set up banner")
5844
6056
     endif
5845
6057
     " remove priority pattern prefix
5846
6058
"     call Decho("remove priority pattern prefix")
5847
 
     let sepchr= "\<Char-0xff>"
5848
 
     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}'.sepchr.'//e'
 
6059
     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}'.g:netrw_sepchr.'//e'
 
6060
     call histdel("/",-1)
5849
6061
 
5850
6062
    elseif a:islocal
5851
6063
     if w:netrw_bannercnt < line("$")
5857
6069
"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!')
5858
6070
       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
5859
6071
      endif
5860
 
     endif
5861
6072
     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
 
6073
     call histdel("/",-1)
 
6074
     endif
5862
6075
    endif
5863
6076
 
5864
6077
   elseif g:netrw_sort_direction =~ 'r'
5865
6078
"    call Decho('reverse the sorted listing')
5866
 
    exe 'silent keepjumps '.w:netrw_bannercnt.'g/^/m '.w:netrw_bannercnt
 
6079
    if w:netrw_bannercnt < line('$')
 
6080
     exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^/m '.w:netrw_bannercnt
 
6081
     call histdel("/",-1)
 
6082
    endif
5867
6083
   endif
5868
6084
  endif
5869
6085
 
6006
6222
    " cleanup
6007
6223
    if g:netrw_ftp_browse_reject != ""
6008
6224
     exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
 
6225
     call histdel("/",-1)
6009
6226
    endif
6010
6227
    silent! keepjumps %s/\r$//e
 
6228
    call histdel("/",-1)
6011
6229
 
6012
6230
    " if there's no ../ listed, then put ./ and ../ in
6013
6231
    let line1= line(".")
6025
6243
    if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
6026
6244
"     call Decho("M$ ftp cleanup")
6027
6245
     exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+//'
 
6246
     call histdel("/",-1)
6028
6247
    else " normal ftp cleanup
6029
6248
"     call Decho("normal ftp cleanup")
6030
6249
     exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
6031
6250
     exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
6032
6251
     exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
 
6252
     call histdel("/",-1)
 
6253
     call histdel("/",-1)
 
6254
     call histdel("/",-1)
6033
6255
    endif
6034
6256
   endif
6035
6257
 
6045
6267
    g/^Listing directory/d
6046
6268
    g/^d[-rwx][-rwx][-rwx]/s+$+/+e
6047
6269
    silent g/^l[-rwx][-rwx][-rwx]/s+$+@+e
 
6270
    call histdel("/",-1)
 
6271
    call histdel("/",-1)
 
6272
    call histdel("/",-1)
6048
6273
    if g:netrw_liststyle != s:LONGLIST
6049
6274
     g/^[dlsp-][-rwx][-rwx][-rwx]/s/^.*\s\(\S\+\)$/\1/e
 
6275
     call histdel("/",-1)
6050
6276
    endif
6051
6277
   else
6052
6278
    if s:path == ""
6063
6289
   if g:netrw_ftp_browse_reject != ""
6064
6290
"    call Decho("(cleanup) exe silent! g/".g:netrw_ssh_browse_reject."/keepjumps d")
6065
6291
    exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
 
6292
    call histdel("/",-1)
6066
6293
   endif
6067
6294
  endif
6068
6295
 
6099
6326
    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e'
6100
6327
    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
6101
6328
    exe 'silent keepjumps '.w:netrw_bannercnt
 
6329
    call histdel("/",-1)
 
6330
    call histdel("/",-1)
 
6331
    call histdel("/",-1)
6102
6332
   endif
6103
6333
  endif
6104
6334
 
6118
6348
  let all= 0
6119
6349
  if exists("s:netrwmarkfilelist_{bufnr('%')}")
6120
6350
   " remove all marked files
 
6351
"   call Decho("remove all marked files with bufnr#".bufnr("%"))
6121
6352
   for fname in s:netrwmarkfilelist_{bufnr("%")}
6122
6353
    let ok= s:NetrwRemoteRmFile(a:path,fname,all)
6123
6354
    if ok =~ 'q\%[uit]'
6126
6357
     let all= 1
6127
6358
    endif
6128
6359
   endfor
6129
 
   unlet s:netrwmarkfilelist_{bufnr("%")}
6130
 
   unlet s:netrwmarkfilemtch_{bufnr("%")}
6131
 
   2match none
 
6360
   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
6132
6361
 
6133
6362
  else
6134
6363
   " remove files specified by range
 
6364
"   call Decho("remove files specified by range")
6135
6365
 
6136
6366
   " preparation for removing multiple files/directories
6137
6367
   let ctr= a:firstline
6353
6583
  " cleanup for Windows
6354
6584
  if has("win32") || has("win95") || has("win64") || has("win16")
6355
6585
   silent! keepjumps %s/\r$//e
 
6586
   call histdel("/",-1)
6356
6587
  endif
6357
6588
  if a:listcmd == "dir"
6358
6589
   " infer directory/link based on the file permission string
6359
6590
   silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@
6360
6591
   silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/
 
6592
   call histdel("/",-1)
 
6593
   call histdel("/",-1)
6361
6594
   if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
6362
6595
    exe "silent! keepjumps ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e'
 
6596
    call histdel("/",-1)
6363
6597
   endif
6364
6598
  endif
6365
6599
 
6466
6700
  " The &ft == "netrw" test was installed because the BufEnter event
6467
6701
  " would hit when re-entering netrw windows, creating unexpected
6468
6702
  " refreshes (and would do so in the middle of NetrwSaveOptions(), too)
6469
 
"  call Decho("netrw#LocalBrowseCheck: isdir<".a:dirname.">=".isdirectory(a:dirname))
 
6703
"  call Decho("netrw#LocalBrowseCheck: isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : "")))
6470
6704
  if isdirectory(a:dirname)
6471
6705
"   call Decho(" ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$"))
6472
6706
   if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname)
6473
6707
    silent! call s:NetrwBrowse(1,a:dirname)
6474
6708
   elseif &ft == "netrw" && line("$") == 1
6475
6709
    silent! call s:NetrwBrowse(1,a:dirname)
 
6710
   elseif exists("s:treeforceredraw")
 
6711
    unlet s:treeforceredraw
 
6712
    silent! call s:NetrwBrowse(1,a:dirname)
6476
6713
   endif
6477
6714
  endif
6478
6715
  " not a directory, ignore it
6492
6729
 
6493
6730
  " get the list of files contained in the current directory
6494
6731
  let dirname    = escape(b:netrw_curdir,g:netrw_glob_escape)
6495
 
  let dirnamelen = strlen(b:netrw_curdir)
 
6732
  let dirnamelen = s:Strlen(b:netrw_curdir)
6496
6733
  let filelist   = glob(s:ComposePath(dirname,"*"))
6497
6734
"  call Decho("glob(dirname<".dirname."/*>)=".filelist)
6498
6735
  if filelist != ""
6608
6845
 
6609
6846
   if w:netrw_liststyle == s:LONGLIST
6610
6847
    let sz   = getfsize(filename)
6611
 
    let fsz  = strpart("               ",1,15-s:Strlen(sz)).sz
 
6848
    let fsz  = strpart("               ",1,15-strlen(sz)).sz
6612
6849
    let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
6613
6850
"    call Decho("sz=".sz." fsz=".fsz)
6614
6851
   endif
6617
6854
    " sort by time (handles time up to 1 quintillion seconds, US)
6618
6855
"    call Decho("getftime(".filename.")=".getftime(filename))
6619
6856
    let t  = getftime(filename)
6620
 
    let ft = strpart("000000000000000000",1,18-s:Strlen(t)).t
 
6857
    let ft = strpart("000000000000000000",1,18-strlen(t)).t
6621
6858
"    call Decho("exe keepjumps put ='".ft.'/'.filename."'")
6622
6859
    let ftpfile= ft.'/'.pfile
6623
6860
    keepjumps silent! put=ftpfile
6626
6863
    " sort by size (handles file sizes up to 1 quintillion bytes, US)
6627
6864
"    call Decho("getfsize(".filename.")=".getfsize(filename))
6628
6865
    let sz   = getfsize(filename)
6629
 
    let fsz  = strpart("000000000000000000",1,18-s:Strlen(sz)).sz
 
6866
    let fsz  = strpart("000000000000000000",1,18-strlen(sz)).sz
6630
6867
"    call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
6631
6868
    let fszpfile= fsz.'/'.pfile
6632
6869
    keepjumps silent! put =fszpfile
6640
6877
 
6641
6878
  " cleanup any windows mess at end-of-line
6642
6879
  silent! keepjumps %s/\r$//e
 
6880
  call histdel("/",-1)
6643
6881
  exe "setlocal ts=".g:netrw_maxfilenamelen
6644
6882
"  call Decho("setlocal ts=".g:netrw_maxfilenamelen)
6645
6883
 
6659
6897
   return
6660
6898
  endif
6661
6899
  if !exists("w:netrw_bannercnt")
6662
 
"   call Dret("LocalBrowseShellCmdRefresh : don't refresh when focus not on netrw windwo")
 
6900
"   call Dret("LocalBrowseShellCmdRefresh : don't refresh when focus not on netrw window")
6663
6901
   return
6664
6902
  endif
 
6903
  if exists("s:locbrowseshellcmd")
 
6904
   if s:locbrowseshellcmd
 
6905
    let s:locbrowseshellcmd= 0
 
6906
"    call Dret("LocalBrowseShellCmdRefresh : NetrwBrowse itself caused the refresh")
 
6907
    return
 
6908
   endif
 
6909
   let s:locbrowseshellcmd= 0
 
6910
  endif
6665
6911
  let itab       = 1
6666
6912
  let buftablist = []
6667
6913
  while itab <= tabpagenr("$")
6874
7120
    endif
6875
7121
    call rename(oldname,newname)
6876
7122
   endfor
6877
 
   2match none
6878
 
   unlet s:netrwmarkfilelist_{bufnr("%")}
6879
 
   unlet s:netrwmarkfilemtch_{bufnr("%")}
 
7123
   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
6880
7124
  
6881
7125
  else
6882
7126
 
6955
7199
   augroup AuNetrwShellCmd
6956
7200
    au!
6957
7201
    if (has("win32") || has("win95") || has("win64") || has("win16"))
 
7202
"     call Decho("autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()")
6958
7203
     au ShellCmdPost                    *       call s:LocalBrowseShellCmdRefresh()
6959
7204
    else
6960
7205
     au ShellCmdPost,FocusGained        *       call s:LocalBrowseShellCmdRefresh()
 
7206
"     call Decho("autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()")
6961
7207
    endif
6962
7208
   augroup END
6963
7209
  endif
6984
7230
"   0=note     = s:NOTE
6985
7231
"   1=warning  = s:WARNING
6986
7232
"   2=error    = s:ERROR
6987
 
"  Jul 08, 2008 : max errnum currently is 71
 
7233
"  Oct 12, 2008 : max errnum currently is 73
6988
7234
fun! netrw#ErrorMsg(level,msg,errnum)
6989
7235
"  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
6990
7236
 
7017
7263
   else
7018
7264
"    call Decho("create a NetrwMessage buffer window")
7019
7265
    bo 1split
7020
 
    enew
 
7266
    call s:NetrwEnew()
 
7267
    call s:NetrwSafeOptions()
7021
7268
    setlocal bt=nofile
7022
7269
    file NetrwMessage
7023
7270
"    call Decho("setlocal ma noro")
7130
7377
 
7131
7378
  if(has("amiga"))
7132
7379
"   call Decho("amiga")
7133
 
   let ec = a:base[strlen(a:base)-1]
 
7380
   let ec = a:base[s:Strlen(a:base)-1]
7134
7381
   if ec != '/' && ec != ':'
7135
7382
    let ret = a:base . "/" . a:subdir
7136
7383
   else
7212
7459
   endif
7213
7460
 
7214
7461
   " let netrw#NetSource() know about the tmpfile
7215
 
   let s:netrw_tmpfile= tmpfile " used by netrw#NetSource()
 
7462
   let s:netrw_tmpfile= tmpfile " used by netrw#NetSource() and netrw#NetrwBrowseX()
7216
7463
"   call Decho("tmpfile<".tmpfile."> s:netrw_tmpfile<".s:netrw_tmpfile.">")
7217
7464
 
7218
7465
   " o/s dependencies
7317
7564
   let result= delete(path)
7318
7565
  endif
7319
7566
  if result < 0
7320
 
   call Netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
 
7567
   call netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
7321
7568
  endif
7322
7569
 
7323
7570
"  call Dret("s:NetrwDelete ".result)
7326
7573
 
7327
7574
" ---------------------------------------------------------------------
7328
7575
" s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2
7329
 
fun! s:NetrwEnew(curdir)
7330
 
"  call Dfunc("s:NetrwEnew(curdir<".a:curdir.">) buf#".bufnr("%")."<".bufname("%").">")
 
7576
fun! s:NetrwEnew(...)
 
7577
"  call Dfunc("s:NetrwEnew() a:0=".a:0)
 
7578
"  call Decho("curdir<".((a:0>0)? a:1 : "")."> buf#".bufnr("%")."<".bufname("%").">")
7331
7579
 
7332
7580
  " grab a function-local-variable copy of buffer variables
7333
7581
  if exists("b:netrw_bannercnt")      |let netrw_bannercnt       = b:netrw_bannercnt      |endif
7370
7618
  if exists("netrw_option")         |let b:netrw_option          = netrw_option         |endif
7371
7619
  if exists("netrw_prvdir")         |let b:netrw_prvdir          = netrw_prvdir         |endif
7372
7620
 
7373
 
  let b:netrw_curdir= a:curdir
7374
 
  if b:netrw_curdir =~ '/$'
7375
 
   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
7376
 
    file NetrwTreeListing
7377
 
    nno <silent> <buffer> [     :silent call <SID>TreeListMove('[')<cr>
7378
 
    nno <silent> <buffer> ]     :silent call <SID>TreeListMove(']')<cr>
7379
 
   else
7380
 
    exe "silent! keepalt file ".fnameescape(b:netrw_curdir)
 
7621
  if a:0 > 0
 
7622
   let b:netrw_curdir= a:1
 
7623
   if b:netrw_curdir =~ '/$'
 
7624
    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
 
7625
     file NetrwTreeListing
 
7626
     nno <silent> <buffer> [    :silent call <SID>TreeListMove('[')<cr>
 
7627
     nno <silent> <buffer> ]    :silent call <SID>TreeListMove(']')<cr>
 
7628
    else
 
7629
     exe "silent! keepalt file ".fnameescape(b:netrw_curdir)
 
7630
    endif
7381
7631
   endif
7382
7632
  endif
7383
7633
 
7511
7761
   call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
7512
7762
   unlet s:nbcd_curpos_{bufnr('%')}
7513
7763
  endif
 
7764
  if exists("s:explore_match")
 
7765
   exe "2match netrwMarkFile /".s:explore_match."/"
 
7766
  endif
7514
7767
"  call Dret("s:NetrwRexplore")
7515
7768
endfun
7516
7769
 
7517
7770
" ---------------------------------------------------------------------
7518
7771
" s:SaveBufVars: {{{2
7519
7772
fun! s:SaveBufVars()
7520
 
"  call Dfunc("s:SaveBufVars()")
 
7773
"  call Dfunc("s:SaveBufVars() buf#".bufnr("%"))
7521
7774
 
7522
7775
  if exists("b:netrw_curdir")        |let s:netrw_curdir         = b:netrw_curdir        |endif
7523
7776
  if exists("b:netrw_lastfile")      |let s:netrw_lastfile       = b:netrw_lastfile      |endif
7532
7785
" ---------------------------------------------------------------------
7533
7786
" s:SaveWinVars: (used by Explore() and NetrwSplit()) {{{2
7534
7787
fun! s:SaveWinVars()
7535
 
"  call Dfunc("s:SaveWinVars()")
 
7788
"  call Dfunc("s:SaveWinVars() win#".winnr())
7536
7789
  if exists("w:netrw_bannercnt")      |let s:bannercnt       = w:netrw_bannercnt      |endif
7537
7790
  if exists("w:netrw_col")            |let s:col             = w:netrw_col            |endif
7538
7791
  if exists("w:netrw_curdir")         |let s:curdir          = w:netrw_curdir         |endif
7562
7815
"   variables are not inherited by the new window.  SetBufWinVars() and
7563
7816
"   UseBufWinVars() get around that.
7564
7817
fun! s:SetBufWinVars()
7565
 
"  call Dfunc("s:SetBufWinVars()")
 
7818
"  call Dfunc("s:SetBufWinVars() win#".winnr())
7566
7819
  if exists("w:netrw_liststyle")      |let b:netrw_liststyle      = w:netrw_liststyle      |endif
7567
7820
  if exists("w:netrw_bannercnt")      |let b:netrw_bannercnt      = w:netrw_bannercnt      |endif
7568
7821
  if exists("w:netrw_method")         |let b:netrw_method         = w:netrw_method         |endif
7584
7837
  if a:islocal
7585
7838
   exe 'com! Rexplore call s:NetrwRexplore(1,"'.escape(a:dirname,'"\').'")'
7586
7839
   if g:netrw_retmap
7587
 
    silent! unmap <2-leftmouse>
7588
 
    if !hasmapto("<Plug>NetrwReturn")
 
7840
    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
7589
7841
     nmap <unique> <silent> <2-leftmouse>       <Plug>NetrwReturn
7590
7842
    endif
7591
7843
    let dir = escape(a:dirname, s:netrw_map_escape)
7594
7846
  else
7595
7847
   exe 'com! Rexplore call s:NetrwRexplore(0,"'.escape(a:dirname,'"\').'")'
7596
7848
   if g:netrw_retmap
7597
 
    silent! unmap <2-leftmouse>
7598
 
    if !hasmapto("<Plug>NetrwReturn")
 
7849
    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
7599
7850
     nmap <unique> <silent> <2-leftmouse>       <Plug>NetrwReturn
7600
7851
    endif
7601
7852
    let dir = escape(a:dirname, s:netrw_map_escape)
7608
7859
" ---------------------------------------------------------------------
7609
7860
" s:Strlen: this function returns the length of a string, even if its {{{2
7610
7861
"           using two-byte etc characters.
7611
 
"           Currently, its only used if g:Align_xstrlen is set to a
7612
 
"           nonzero value.  Solution from Nicolai Weibull, vim docs
7613
 
"           (:help strlen()), Tony Mechelynck, and my own invention.
 
7862
"           Solution from Nicolai Weibull, vim docs (:help strlen()), Tony Mechelynck,
 
7863
"           and a bit from me.
 
7864
"           if g:netrw_xstrlen is zero (default), then the builtin strlen() function is used.
7614
7865
fun! s:Strlen(x)
7615
7866
"  call Dfunc("s:Strlen(x<".a:x.">")
7616
7867
  if g:netrw_xstrlen == 1
7638
7889
 
7639
7890
  else
7640
7891
   " at least give a decent default
7641
 
   ret= strlen(a:x)
 
7892
   let ret= strlen(a:x)
7642
7893
  endif
7643
7894
"  call Dret("s:Strlen ".ret)
7644
7895
  return ret
7737
7988
endfun
7738
7989
 
7739
7990
" ---------------------------------------------------------------------
7740
 
" s:WinPath: {{{2
 
7991
" s:WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2
7741
7992
fun! s:WinPath(path)
7742
7993
"  call Dfunc("s:WinPath(path<".a:path.">)")
7743
 
  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
 
7994
  if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16"))
 
7995
   " remove cygdrive prefix, if present
 
7996
   let path = substitute(a:path,'/cygdrive/\(.\)','\1:','')
7744
7997
   " remove trailing slash (Win95)
7745
 
   let path = substitute(a:path, '\(\\\|/\)$', '', 'g')
 
7998
   let path = substitute(path, '\(\\\|/\)$', '', 'g')
7746
7999
   " remove escaped spaces
7747
8000
   let path = substitute(path, '\ ', ' ', 'g')
7748
8001
   " convert slashes to backslashes