comparison runtime/plugin/netrw.vim @ 461:f98374445f66

updated for version 7.0123
author vimboss
date Thu, 04 Aug 2005 21:29:45 +0000
parents d9d38102399f
children 3b705e71c7b0
comparison
equal deleted inserted replaced
460:7f2d3b3c15a2 461:f98374445f66
1 " netrw.vim: Handles file transfer and remote directory listing across a network 1 " netrw.vim: Handles file transfer and remote directory listing across a network
2 " Last Change: Aug 01, 2005 2 " Last Change: Aug 02, 2005
3 " Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz> 3 " Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
4 " Version: 56 4 " Version: 58b NOT RELEASED
5 " License: Vim License (see vim's :help license) 5 " License: Vim License (see vim's :help license)
6 " 6 "
7 " But be doers of the Word, and not only hearers, deluding your own selves 7 " But be doers of the Word, and not only hearers, deluding your own selves
8 " (James 1:22 RSV) 8 " (James 1:22 RSV)
9 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 9 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
12 " --------------------------------------------------------------------- 12 " ---------------------------------------------------------------------
13 " Load Once: {{{1 13 " Load Once: {{{1
14 if exists("g:loaded_netrw") || &cp 14 if exists("g:loaded_netrw") || &cp
15 finish 15 finish
16 endif 16 endif
17 let g:loaded_netrw = "v56" 17 let g:loaded_netrw = "v58b"
18 let loaded_explorer = 1 18 let loaded_explorer = 1
19 let s:keepcpo = &cpo 19 let s:keepcpo = &cpo
20 set cpo&vim 20 set cpo&vim
21 21
22 " --------------------------------------------------------------------- 22 " ---------------------------------------------------------------------
88 " alternative: reverse (z y x ...) 88 " alternative: reverse (z y x ...)
89 let g:netrw_sort_direction= "normal" 89 let g:netrw_sort_direction= "normal"
90 endif 90 endif
91 if !exists("g:netrw_longlist") || g:netrw_longlist == 0 91 if !exists("g:netrw_longlist") || g:netrw_longlist == 0
92 let g:netrw_longlist= 0 92 let g:netrw_longlist= 0
93 let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
93 else 94 else
94 let g:netrw_longlist= 1 95 let g:netrw_longlist= 1
95 let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa -lk" 96 let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa -l"
97 endif
98 if !exists("g:netrw_list_cmd")
96 endif 99 endif
97 if !exists("g:netrw_timefmt") 100 if !exists("g:netrw_timefmt")
98 let g:netrw_timefmt= "%c" 101 let g:netrw_timefmt= "%c"
99 endif 102 endif
100 if !exists("g:netrw_local_rmdir") 103 if !exists("g:netrw_local_rmdir")
230 com! -nargs=* Nread call s:NetSavePosn()<bar>call s:NetRead(<f-args>)<bar>call s:NetRestorePosn() 233 com! -nargs=* Nread call s:NetSavePosn()<bar>call s:NetRead(<f-args>)<bar>call s:NetRestorePosn()
231 com! -range=% -nargs=* Nwrite call s:NetSavePosn()<bar><line1>,<line2>call s:NetWrite(<f-args>)<bar>call s:NetRestorePosn() 234 com! -range=% -nargs=* Nwrite call s:NetSavePosn()<bar><line1>,<line2>call s:NetWrite(<f-args>)<bar>call s:NetRestorePosn()
232 com! -nargs=* NetUserPass call NetUserPass(<f-args>) 235 com! -nargs=* NetUserPass call NetUserPass(<f-args>)
233 236
234 " Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{1 237 " Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{1
235 com! -nargs=? -bar -bang Explore call s:Explore(0,0+<bang>0,<q-args>) 238 com! -nargs=? -bar -bang -count=0 Explore call s:Explore(<count>,0,0+<bang>0,<q-args>)
236 com! -nargs=? -bar -bang Sexplore call s:Explore(1,0+<bang>0,<q-args>) 239 com! -nargs=? -bar -bang -count=0 Sexplore call s:Explore(<count>,1,0+<bang>0,<q-args>)
237 com! -nargs=? -bar -bang Hexplore call s:Explore(1,2+<bang>0,<q-args>) 240 com! -nargs=? -bar -bang -count=0 Hexplore call s:Explore(<count>,1,2+<bang>0,<q-args>)
238 com! -nargs=? -bar -bang Vexplore call s:Explore(1,4+<bang>0,<q-args>) 241 com! -nargs=? -bar -bang -count=0 Vexplore call s:Explore(<count>,1,4+<bang>0,<q-args>)
242 com! -nargs=? -bar -bang Nexplore call s:Explore(-1,0,0,<q-args>)
243 com! -nargs=? -bar -bang Pexplore call s:Explore(-2,0,0,<q-args>)
239 244
240 " ------------------------------------------------------------------------ 245 " ------------------------------------------------------------------------
241 " NetSavePosn: saves position of cursor on screen {{{1 246 " NetSavePosn: saves position of cursor on screen {{{1
242 fun! s:NetSavePosn() 247 fun! s:NetSavePosn()
243 " call Dfunc("NetSavePosn()") 248 " call Dfunc("NetSavePosn()")
680 let rfile= bufname(".") 685 let rfile= bufname(".")
681 " call Decho("remotefile<".rfile.">") 686 " call Decho("remotefile<".rfile.">")
682 " call Dredir("ls!","starting buffer list") 687 " call Dredir("ls!","starting buffer list")
683 688
684 " rename the current buffer to the temp file (ie. fname) 689 " rename the current buffer to the temp file (ie. fname)
685 keepalt exe "file ".fname 690 if v:version < 700
691 exe "file ".fname
692 else
693 keepalt exe "file ".fname
694 endif
686 " call Dredir("ls!","after renaming current buffer to <".fname.">") 695 " call Dredir("ls!","after renaming current buffer to <".fname.">")
687 696
688 " edit temporary file 697 " edit temporary file
689 e 698 e
690 " call Dredir("ls!","after editing temporary file") 699 " call Dredir("ls!","after editing temporary file")
691 700
692 " rename buffer back to remote filename 701 " rename buffer back to remote filename
693 keepalt exe "file ".rfile 702 if v:version < 700
703 exe "file ".rfile
704 else
705 keepalt exe "file ".rfile
706 endif
694 " call Dredir("ls!","renaming buffer back to remote filename<".rfile.">") 707 " call Dredir("ls!","renaming buffer back to remote filename<".rfile.">")
695 let line1 = 1 708 let line1 = 1
696 let line2 = line("$") 709 let line2 = line("$")
697 710
698 elseif filereadable(fname) 711 elseif filereadable(fname)
1230 " Note that not all ftp servers honor the options for ls 1243 " Note that not all ftp servers honor the options for ls
1231 if method == "ftp" 1244 if method == "ftp"
1232 " use ftp to get remote file listing 1245 " use ftp to get remote file listing
1233 " call Decho("use ftp to get remote file listing") 1246 " call Decho("use ftp to get remote file listing")
1234 call NetBrowseFtpCmd(path,listcmd) 1247 call NetBrowseFtpCmd(path,listcmd)
1235
1236 keepjumps 1d 1248 keepjumps 1d
1237 1249
1238 if !g:netrw_longlist 1250 if !g:netrw_longlist
1239 " shorten the listing 1251 " shorten the listing
1240 " call Decho("generate short listing") 1252 " call Decho("generate short listing")
1267 " use ssh to get remote file listing 1279 " use ssh to get remote file listing
1268 " call Decho("use ssh to get remote file listing") 1280 " call Decho("use ssh to get remote file listing")
1269 let shq= &shq? &shq : ( &sxq? &sxq : "'") 1281 let shq= &shq? &shq : ( &sxq? &sxq : "'")
1270 " call Decho("exe silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq) 1282 " call Decho("exe silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq)
1271 exe "silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq 1283 exe "silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq
1284 if !exists("g:junk")
1285 let g:junk=1
1286 else
1287 put ='testing'
1288 return
1289 endif
1272 keepjumps 1d 1290 keepjumps 1d
1273 " cleanup 1291 " cleanup
1274 if g:netrw_ftp_browse_reject != "" 1292 if g:netrw_ftp_browse_reject != ""
1275 exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d" 1293 exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
1276 endif 1294 endif
1295 endif
1296
1297 " set up syntax highlighting
1298 if has("syntax")
1299 setlocal ft=netrwlist
1300 if !has("syntax_items")
1301 setlocal ft=
1302 endif
1277 endif 1303 endif
1278 1304
1279 " manipulate the directory listing (hide, sort) 1305 " manipulate the directory listing (hide, sort)
1280 setlocal ft=netrwlist
1281 if line("$") >= s:netrw_bannercnt 1306 if line("$") >= s:netrw_bannercnt
1282 if g:netrw_hide && g:netrw_list_hide != "" 1307 if g:netrw_hide && g:netrw_list_hide != ""
1283 call s:NetrwListHide() 1308 call s:NetrwListHide()
1284 endif 1309 endif
1285 1310
1314 if line("$") >= s:netrw_bannercnt 1339 if line("$") >= s:netrw_bannercnt
1315 if g:netrw_sort_by =~ "^n" 1340 if g:netrw_sort_by =~ "^n"
1316 call s:SetSort() 1341 call s:SetSort()
1317 if v:version < 700 1342 if v:version < 700
1318 exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()' 1343 exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
1344 elseif g:netrw_sort_direction =~ 'n'
1345 exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
1319 else 1346 else
1320 exe 'keepjumps silent '.s:netrw_bannercnt.',$sort' 1347 exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
1321 endif 1348 endif
1322 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e' 1349 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
1323 endif 1350 endif
1324 if g:netrw_longlist 1351 if g:netrw_longlist
1325 " shorten the list to keep its width <= 80 characters 1352 " shorten the list to keep its width <= 80 characters
1350 " call Decho("handling a file: dirname<".dirname.">") 1377 " call Decho("handling a file: dirname<".dirname.">")
1351 1378
1352 elseif newdir == './' 1379 elseif newdir == './'
1353 " refresh the directory list 1380 " refresh the directory list
1354 " call Decho("refresh directory listing") 1381 " call Decho("refresh directory listing")
1355 setlocal ma 1382 setlocal ma nobl bh=hide
1356 %d 1383 %d
1357 1384
1358 elseif newdir == '../' 1385 elseif newdir == '../'
1359 " go up one directory 1386 " go up one directory
1360 let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','') 1387 let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','')
1621 " because WinXX ftp uses unix style input 1648 " because WinXX ftp uses unix style input
1622 " curline is one more than the bannercnt in order to account 1649 " curline is one more than the bannercnt in order to account
1623 " for the unwanted first blank line (doing a :put to an empty 1650 " for the unwanted first blank line (doing a :put to an empty
1624 " buffer yields a blank first line) 1651 " buffer yields a blank first line)
1625 let ffkeep= &ff 1652 let ffkeep= &ff
1626 setlocal ma 1653 setlocal ma ff=unix
1627 setlocal ff=unix
1628 let curline= s:netrw_bannercnt+1 1654 let curline= s:netrw_bannercnt+1
1629 exe "silent! keepjumps ".curline.",$d" 1655 exe "silent! keepjumps ".curline.",$d"
1630 1656
1631 "......................................... 1657 ".........................................
1632 if s:netrw_method == 2 || s:netrw_method == 5 1658 if s:netrw_method == 2 || s:netrw_method == 5
1770 " call Dfunc("NetLongList(mode=".a:mode.") netrw_longlist=".g:netrw_longlist) 1796 " call Dfunc("NetLongList(mode=".a:mode.") netrw_longlist=".g:netrw_longlist)
1771 call s:NetSavePosn() 1797 call s:NetSavePosn()
1772 1798
1773 if g:netrw_longlist != 0 1799 if g:netrw_longlist != 0
1774 " turn long listing off 1800 " turn long listing off
1801 " call Decho("turn long listing off")
1775 let g:netrw_longlist = 0 1802 let g:netrw_longlist = 0
1776 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge') 1803 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
1777 1804
1778 else 1805 else
1779 " turn long listing on 1806 " turn long listing on
1807 " call Decho("turn long listing on")
1780 let g:netrw_longlist = 1 1808 let g:netrw_longlist = 1
1781 let g:netrw_list_cmd = g:netrw_list_cmd." -l" 1809 let g:netrw_list_cmd = g:netrw_list_cmd." -l"
1782 endif 1810 endif
1811 setlocal ma
1812 %d
1783 1813
1784 " refresh the listing 1814 " refresh the listing
1785 if a:mode == 0 1815 if a:mode == 0
1786 silent call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),"./")) 1816 silent call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),"./"))
1787 else 1817 else
1859 let netrw_origdir= s:NetGetcwd(1) 1889 let netrw_origdir= s:NetGetcwd(1)
1860 exe 'cd '.b:netrw_curdir 1890 exe 'cd '.b:netrw_curdir
1861 " call Decho("netrw_origdir<".netrw_origdir."> b:netrw_curdir<".b:netrw_curdir.">") 1891 " call Decho("netrw_origdir<".netrw_origdir."> b:netrw_curdir<".b:netrw_curdir.">")
1862 " call Decho("exe silent! !".g:netrw_local_mkdir.' "'.newdirname.'"') 1892 " call Decho("exe silent! !".g:netrw_local_mkdir.' "'.newdirname.'"')
1863 exe "silent! !".g:netrw_local_mkdir.' "'.newdirname.'"' 1893 exe "silent! !".g:netrw_local_mkdir.' "'.newdirname.'"'
1864 if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif 1894 if !g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
1865 endif 1895 endif
1866 1896
1867 if v:shell_error == 0 1897 if v:shell_error == 0
1868 " refresh listing 1898 " refresh listing
1869 " call Decho("refresh listing") 1899 " call Decho("refresh listing")
2011 endif 2041 endif
2012 2042
2013 " unfortunate interaction -- when putting debugging calls 2043 " unfortunate interaction -- when putting debugging calls
2014 " above one can no longer enter the DBG buffer. 2044 " above one can no longer enter the DBG buffer.
2015 " call Dfunc("LocalBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr()) 2045 " call Dfunc("LocalBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr())
2016 " call Decho("winbufnr1=".winbufnr(1)." winbufnr2=".winbufnr(2)." winbufnr3=".winbufnr(3))
2017 " call Dredir("ls!") 2046 " call Dredir("ls!")
2018 2047
2019 if v:version < 603 2048 if v:version < 603
2020 if !exists("g:netrw_quiet") 2049 if !exists("g:netrw_quiet")
2021 echoerr "***netrw*** vim version<".v:version."> too old for browsing with netrw" 2050 echoerr "***netrw*** vim version<".v:version."> too old for browsing with netrw"
2024 " call Dret("LocalBrowse : vim version<".v:version."> too old") 2053 " call Dret("LocalBrowse : vim version<".v:version."> too old")
2025 return 2054 return
2026 endif 2055 endif
2027 2056
2028 " record autochdir setting and then insure its unset (tnx to David Fishburn) 2057 " record autochdir setting and then insure its unset (tnx to David Fishburn)
2029 let keep_autochdir= &autochdir 2058 if has("netbeans_intg") || has("sun_workshop")
2030 set noautochdir 2059 let keep_autochdir= &autochdir
2031 2060 set noautochdir
2032 " record and change current directory 2061 endif
2062
2063 " find buffer number of buffer named precisely the same as a:dirname
2064 let bufnum= bufnr(a:dirname)
2065 " call Decho("findbuf: bufnum=".bufnum)
2066 if bufnum > 0 && bufname(bufnum) != a:dirname
2067 let ibuf= 1
2068 let buflast= bufnr("$")
2069 while bufname(ibuf) !~ '^'.a:dirname.'\=$' && ibuf <= buflast
2070 " call Decho("findbuf: ibuf=".ibuf. " bufname<".bufname(ibuf)."> dirname<".a:dirname.">")
2071 let ibuf= ibuf + 1
2072 endwhile
2073 if ibuf > buflast
2074 let bufnum= -1
2075 else
2076 let bufnum= ibuf
2077 endif
2078 " call Decho("findbuf: bufnum=".bufnum." (final)")
2079 endif
2080
2081 " get cleared buffer
2082 if bufnum < 0
2083 if v:version < 700
2084 enew!
2085 else
2086 keepalt enew!
2087 endif
2088 " call Decho("enew buffer")
2089 else
2090 let eikeep= &ei
2091 set ei=BufEnter
2092 if v:version < 700
2093 exe "b ".bufnum
2094 else
2095 exe "keepalt b ".bufnum
2096 endif
2097 let &ei= eikeep
2098 if getline(2) =~ '^" Directory Listing '
2099 " call Dret("LocalBrowse : reusing buffer#".bufnum."<".a:dirname.">")
2100 return
2101 endif
2102 endif
2103
2104 " get the new directory name
2033 let b:netrw_curdir= substitute(a:dirname,'\\','/','ge') 2105 let b:netrw_curdir= substitute(a:dirname,'\\','/','ge')
2034 if b:netrw_curdir =~ '[/\\]$' 2106 if b:netrw_curdir =~ '[/\\]$'
2035 let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e') 2107 let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
2036 endif 2108 endif
2037 " call Decho("b:netrw_curdir<".b:netrw_curdir.">") 2109 " call Decho("b:netrw_curdir<".b:netrw_curdir.">")
2110
2038 " make netrw's idea of the current directory vim's if the user wishes 2111 " make netrw's idea of the current directory vim's if the user wishes
2039 if g:netrw_keepdir 2112 if !g:netrw_keepdir
2040 " call Decho("change directory: cd ".b:netrw_curdir) 2113 " call Decho("change directory: cd ".b:netrw_curdir)
2041 exe 'cd '.b:netrw_curdir 2114 exe 'cd '.b:netrw_curdir
2042 endif 2115 endif
2043 2116
2044 " change the name of the buffer to reflect the b:netrw_curdir 2117 " change the name of the buffer to reflect the b:netrw_curdir
2045 exe 'silent file '.escape(b:netrw_curdir,s:netrw_cd_escape) 2118 exe 'silent! file '.escape(b:netrw_curdir,s:netrw_cd_escape)
2046 2119
2047 " make this buffer modifiable 2120 " make this buffer modifiable and hidden
2048 setlocal ma 2121 setlocal ma hidden nonu
2049 2122
2050 " --------------------------- 2123 " ---------------------------
2051 " Perform Directory Listing: 2124 " Perform Directory Listing:
2052 2125
2053 " save current directory on directory history list 2126 " save current directory on directory history list
2130 " call Decho("bannercnt=".s:netrw_bannercnt) 2203 " call Decho("bannercnt=".s:netrw_bannercnt)
2131 2204
2132 " generate the requested directory listing 2205 " generate the requested directory listing
2133 call LocalBrowseList() 2206 call LocalBrowseList()
2134 2207
2208 " set up syntax highlighting
2209 if has("syntax")
2210 setlocal ft=netrwlist
2211 if !has("syntax_items")
2212 setlocal ft=
2213 endif
2214 endif
2215
2135 " manipulate the directory listing (hide, sort) 2216 " manipulate the directory listing (hide, sort)
2136 setlocal ft=netrwlist
2137 if line("$") >= s:netrw_bannercnt 2217 if line("$") >= s:netrw_bannercnt
2138 if g:netrw_hide && g:netrw_list_hide != "" 2218 if g:netrw_hide && g:netrw_list_hide != ""
2139 call s:NetrwListHide() 2219 call s:NetrwListHide()
2140 endif 2220 endif
2141 if line("$") >= s:netrw_bannercnt 2221 if line("$") >= s:netrw_bannercnt
2222
2142 if g:netrw_sort_by =~ "^n" 2223 if g:netrw_sort_by =~ "^n"
2143 call s:SetSort() 2224 call s:SetSort()
2225
2144 if v:version < 700 2226 if v:version < 700
2145 exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()' 2227 exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
2228 elseif g:netrw_sort_direction =~ 'n'
2229 exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
2146 else 2230 else
2147 exe 'keepjumps silent '.s:netrw_bannercnt.',$sort' 2231 exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
2148 endif 2232 endif
2149 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e' 2233 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
2234
2150 else 2235 else
2151 if v:version < 700 2236 if v:version < 700
2152 exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()' 2237 exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
2238 elseif g:netrw_sort_direction =~ 'n'
2239 exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
2153 else 2240 else
2154 exe 'keepjumps silent '.s:netrw_bannercnt.',$sort' 2241 exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
2155 endif 2242 endif
2156 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{-}\///e' 2243 exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{-}\///e'
2157 endif 2244 endif
2245
2158 endif 2246 endif
2159 endif 2247 endif
2160 exe s:netrw_bannercnt 2248 exe s:netrw_bannercnt
2161 2249
2162 setlocal noma nomod nonu 2250 setlocal noma nomod nonu bh=hide nobl
2163 let &autochdir= keep_autochdir 2251 if has("netbeans_intg") || has("sun_workshop")
2252 let &autochdir= keep_autochdir
2253 endif
2164 2254
2165 " call Dret("LocalBrowse : file<".expand("%:p")."> bufname<".bufname("%").">") 2255 " call Dret("LocalBrowse : file<".expand("%:p")."> bufname<".bufname("%").">")
2166 endfun 2256 endfun
2167 2257
2168 " --------------------------------------------------------------------- 2258 " ---------------------------------------------------------------------
2224 " call Decho("filename<".filename.">") 2314 " call Decho("filename<".filename.">")
2225 " call Decho("pfile <".pfile.">") 2315 " call Decho("pfile <".pfile.">")
2226 2316
2227 if g:netrw_longlist 2317 if g:netrw_longlist
2228 let sz = getfsize(filename) 2318 let sz = getfsize(filename)
2229 let fsz = strpart(" ",1,15-strlen(sz)).sz 2319 if v:version <= 700
2230 let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename)) 2320 let fsz = strpart(" ",1,15-strlen(sz)).sz
2321 let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
2322 else
2323 let pfile= printf('%-'.g:netrw_maxfilenamelen.'s%15d%s',pfile,sz,getftime(filename))
2324 endif
2231 " call Decho("sz=".sz." fsz=".fsz) 2325 " call Decho("sz=".sz." fsz=".fsz)
2232 endif 2326 endif
2233 2327
2234 if g:netrw_sort_by =~ "^t" 2328 if g:netrw_sort_by =~ "^t"
2235 " sort by time (handles time up to 1 quintillion seconds, US) 2329 " sort by time (handles time up to 1 quintillion seconds, US)
2272 if dirname !~ '[\/]$' 2366 if dirname !~ '[\/]$'
2273 " apparently vim is "recognizing" that it is in the home directory and 2367 " apparently vim is "recognizing" that it is in the home directory and
2274 " is removing the "/". Bad idea, so I have to put it back. 2368 " is removing the "/". Bad idea, so I have to put it back.
2275 let dirname= dirname.'/' 2369 let dirname= dirname.'/'
2276 " call Decho("adjusting dirname<".dirname.">") 2370 " call Decho("adjusting dirname<".dirname.">")
2277 setlocal ma
2278 %d
2279 endif 2371 endif
2280 2372
2281 if newdir !~ '[\/]$' 2373 if newdir !~ '[\/]$'
2282 " handling a file 2374 " handling a file
2283 let dirname= dirname.newdir 2375 let dirname= dirname.newdir
2295 2387
2296 elseif newdir == '../' 2388 elseif newdir == '../'
2297 " go up one directory 2389 " go up one directory
2298 let dirname= substitute(dirname,'^\(.*/\)\([^/]\+[\/]$\)','\1','e') 2390 let dirname= substitute(dirname,'^\(.*/\)\([^/]\+[\/]$\)','\1','e')
2299 " call Decho("go up one dir: dirname<".dirname.">") 2391 " call Decho("go up one dir: dirname<".dirname.">")
2300 setlocal ma
2301 %d
2302 2392
2303 else 2393 else
2304 " go down one directory 2394 " go down one directory
2305 let dirname= dirname.newdir 2395 let dirname= dirname.newdir
2306 " call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">") 2396 " call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
2307 setlocal ma
2308 %d
2309 endif 2397 endif
2310 2398
2311 " call Dret("LocalBrowseChgDir <".dirname.">") 2399 " call Dret("LocalBrowseChgDir <".dirname.">")
2312 return dirname 2400 return dirname
2313 endfun 2401 endfun
2486 " Explore: launch the local browser in the directory of the current file {{{2 2574 " Explore: launch the local browser in the directory of the current file {{{2
2487 " dosplit==0: the window will be split iff the current file has 2575 " dosplit==0: the window will be split iff the current file has
2488 " been modified 2576 " been modified
2489 " dosplit==1: the window will be split before running the local 2577 " dosplit==1: the window will be split before running the local
2490 " browser 2578 " browser
2491 fun! s:Explore(dosplit,style,...) 2579 fun! s:Explore(indx,dosplit,style,...)
2492 " call Dfunc("Explore(dosplit=".a:dosplit." style=".a:style.")") 2580 " call Dfunc("Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.")")
2493 2581
2494 " if dosplit or file has been modified 2582 " if dosplit or file has been modified
2495 if a:dosplit || &modified 2583 if a:dosplit || &modified
2496 if a:style == 0 " Explore, Sexplore 2584 if a:style == 0 " Explore, Sexplore
2497 exe g:netrw_winsize."wincmd s" 2585 exe g:netrw_winsize."wincmd s"
2507 exe "rightb ".g:netrw_winsize."wincmd v" 2595 exe "rightb ".g:netrw_winsize."wincmd v"
2508 endif 2596 endif
2509 endif 2597 endif
2510 norm! 0 2598 norm! 0
2511 2599
2512 if a:1 == "" 2600 if a:1 == "" && a:indx >= 0
2513 let newdir= substitute(expand("%:p"),'^\(.*\)[/\\][^/\\]*$','\1','e') 2601 let newdir= substitute(expand("%:p"),'^\(.*\)[/\\][^/\\]*$','\1','e')
2602 " call Decho("calling LocalBrowse(newdir<".newdir.">)")
2603 call s:LocalBrowse(newdir)
2604
2605 elseif a:1 =~ '\*\*' || a:indx < 0
2606
2607 if has("path_extra")
2608 if !exists("s:indx")
2609 let s:indx= 0
2610 endif
2611 let indx = a:indx
2612 if indx == -1
2613 let indx= s:indx + 1
2614 elseif indx == -2
2615 let indx= s:indx - 1
2616 else
2617 let s:indx = 0
2618 let s:explorelist = split(expand(b:netrw_curdir."/".a:1),'\n')
2619 let s:listlen = len(s:explorelist)
2620 endif
2621 let s:indx = indx
2622 " call Decho("explorelist<".join(s:explorelist,',')."> len=".s:listlen)
2623
2624 " sanity check
2625 if indx >= s:listlen
2626 echoerr "***netrw*** no more directories with matching files"
2627 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2628 " call Dret("Explore")
2629 return
2630 endif
2631
2632 exe "let dirfile= s:explorelist[".indx."]"
2633 " call Decho("dirfile<".dirfile."> indx=".indx)
2634 let newdir= substitute(dirfile,'/[^/]*$','','e')
2635 " call Decho("newdir<".newdir.">")
2636 " call Decho("calling LocalBrowse(newdir<".newdir.">)")
2637 call s:LocalBrowse(newdir)
2638 call search(substitute(dirfile,"^.*/","",""),"W")
2639
2640 else
2641 if v:version < 700
2642 echoerr "***netrw*** you need vim version 7.0 or later for Exploring with **!"
2643 elseif !exists("g:netrw_quiet")
2644 echoerr "***netrw*** your vim needs the path_extra feature for Exploring with **!"
2645 endif
2646 call inputsave()|call input("Press <cr> to continue")|call inputrestore()
2647 endif
2648
2514 else 2649 else
2515 let newdir= a:1 2650 let newdir= a:1
2516 endif 2651 " call Decho("calling LocalBrowse(newdir<".newdir.">)")
2517 " call Decho("newdir<".newdir.">") 2652 call s:LocalBrowse(newdir)
2518 call s:LocalBrowse(newdir) 2653 endif
2519 2654
2520 " call Dret("Explore") 2655 " call Dret("Explore")
2521 endfun 2656 endfun
2522 2657
2523 " --------------------------------------------------------------------- 2658 " ---------------------------------------------------------------------