updated for version 7.0128

This commit is contained in:
Bram Moolenaar
2005-08-11 20:09:58 +00:00
parent 8b1e71fa25
commit 488c6512d9
19 changed files with 520 additions and 217 deletions

View File

@ -1,7 +1,7 @@
" netrw.vim: Handles file transfer and remote directory listing across a network
" Last Change: Aug 08, 2005
" Last Change: Aug 10, 2005
" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
" Version: 59
" Version: 60
" License: Vim License (see vim's :help license)
" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr.
" Permission is hereby granted to use and distribute this code,
@ -22,9 +22,11 @@
if exists("g:loaded_netrw") || &cp
finish
endif
let g:loaded_netrw = "v59"
let loaded_explorer = 1
let s:keepcpo = &cpo
let g:loaded_netrw = "v60"
if v:version < 700
let loaded_explorer = 1
endif
let s:keepcpo= &cpo
set cpo&vim
" ---------------------------------------------------------------------
@ -255,28 +257,28 @@ com! -nargs=? -bar -bang Pexplore call s:Explore(-2,0,0,<q-args>)
fun! s:NetSavePosn()
" call Dfunc("NetSavePosn()")
" Save current line and column
let s:netrw_winnr= winnr()
let s:netrw_line = line(".")
let s:netrw_col = virtcol(".")
let w:netrw_winnr= winnr()
let w:netrw_line = line(".")
let w:netrw_col = virtcol(".")
" Save top-of-screen line
norm! H0
let s:netrw_hline= line(".")
let w:netrw_hline= line(".")
call s:NetRestorePosn()
" call Dret("NetSavePosn : winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
" call Dret("NetSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
endfun
" ------------------------------------------------------------------------
" NetRestorePosn: restores the cursor and file position as saved by NetSavePosn() {{{1
fun! <SID>NetRestorePosn()
" call Dfunc("NetRestorePosn() winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
" call Dfunc("NetRestorePosn() winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
let eikeep= &ei
set ei=all
" restore window
" call Decho("restore window: exe silent! ".s:netrw_winnr."wincmd w")
exe "silent! ".s:netrw_winnr."wincmd w"
" call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
exe "silent! ".w:netrw_winnr."wincmd w"
" if v:shell_error == 0
" " as suggested by Bram M: redraw on no error
" " allows protocol error messages to remain visible
@ -284,12 +286,12 @@ fun! <SID>NetRestorePosn()
" endif
" restore top-of-screen line
" call Decho("restore topofscreen: exe norm! ".s:netrw_hline."G0z")
exe "norm! ".s:netrw_hline."G0z\<CR>"
" call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
exe "norm! ".w:netrw_hline."G0z\<CR>"
" restore position
" call Decho("restore posn: exe norm! ".s:netrw_line."G0".s:netrw_col."|")
exe "norm! ".s:netrw_line."G0".s:netrw_col."\<bar>"
" call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
let &ei= eikeep
" call Dret("NetRestorePosn")
@ -1050,6 +1052,12 @@ endfun
fun! <SID>NetBrowse(dirname)
" call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".g:netrw_longlist)
if exists("s:netrw_skipbrowse")
unlet s:netrw_skipbrowse
" call Dret("NetBrowse")
return
endif
" sanity check
if exists("b:netrw_method") && b:netrw_method =~ '[235]'
" call Decho("b:netrw_method=".b:netrw_method)
@ -1106,8 +1114,8 @@ fun! <SID>NetBrowse(dirname)
endif
if exists("b:netrw_method")
" call Decho("setting s:netrw_method<".b:netrw_method.">")
let s:netrw_method= b:netrw_method
" call Decho("setting w:netrw_method<".b:netrw_method.">")
let w:netrw_method= b:netrw_method
endif
" optionally sort by time (-t) or by size (-S)
@ -1200,14 +1208,14 @@ fun! <SID>NetBrowse(dirname)
nnoremap <buffer> <silent> B :<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr>
nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(0)<cr>
nnoremap <buffer> <silent> i :call <SID>NetLongList(0)<cr>
nnoremap <buffer> <silent> o :exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
nnoremap <buffer> <silent> o :call <SID>NetSplit(0)<cr>
nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr>
nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
nnoremap <buffer> <silent> s :call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
nnoremap <buffer> <silent> S :call <SID>NetSortSequence(0)<cr>
nnoremap <buffer> <silent> u :<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
nnoremap <buffer> <silent> v :exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
nnoremap <buffer> <silent> v :call <SID>NetSplit(1)<cr>
nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
@ -1225,15 +1233,15 @@ fun! <SID>NetBrowse(dirname)
keepjumps put ='\" ==========================================================================='
keepjumps put ='\" Netrw Remote Directory Listing'
keepjumps put ='\" '.bufname
let s:netrw_bannercnt= 7
let sortby= g:netrw_sort_by
let w:netrw_bannercnt = 7
let sortby = g:netrw_sort_by
if g:netrw_sort_direction =~ "^r"
let sortby= sortby." reversed"
let sortby = sortby." reversed"
endif
if g:netrw_sort_by =~ "^n"
" sorted by name
let s:netrw_bannercnt= s:netrw_bannercnt + 1
let w:netrw_bannercnt= w:netrw_bannercnt + 1
keepjumps put ='\" Sorted by '.sortby
keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence
else
@ -1246,7 +1254,7 @@ fun! <SID>NetBrowse(dirname)
else
keepjumps put ='\" Showing: '.g:netrw_list_hide
endif
let s:netrw_bannercnt= s:netrw_bannercnt + 1
let w:netrw_bannercnt= w:netrw_bannercnt + 1
endif
keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec'
keepjumps put ='\" ==========================================================================='
@ -1263,7 +1271,7 @@ fun! <SID>NetBrowse(dirname)
if !g:netrw_longlist
" shorten the listing
" call Decho("generate short listing")
exe "keepjumps ".s:netrw_bannercnt
exe "keepjumps ".w:netrw_bannercnt
" cleanup
if g:netrw_ftp_browse_reject != ""
@ -1283,9 +1291,9 @@ fun! <SID>NetBrowse(dirname)
keepjumps norm! 0
" more cleanup
exe 'keepjumps silent! '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
exe "keepjumps silent! ".s:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
exe "keepjumps silent! ".s:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
exe 'keepjumps silent! '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
endif
else
@ -1315,7 +1323,7 @@ fun! <SID>NetBrowse(dirname)
endif
" manipulate the directory listing (hide, sort)
if line("$") >= s:netrw_bannercnt
if line("$") >= w:netrw_bannercnt
if g:netrw_hide && g:netrw_list_hide != ""
call s:NetrwListHide()
endif
@ -1326,7 +1334,7 @@ fun! <SID>NetBrowse(dirname)
if method == "ftp"
" cleanup
exe "keepjumps ".s:netrw_bannercnt
exe "keepjumps ".w:netrw_bannercnt
while getline(".") =~ g:netrw_ftp_browse_reject
keepjumps d
endwhile
@ -1336,37 +1344,37 @@ fun! <SID>NetBrowse(dirname)
silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
let line2= line(".")
if line2 == 0
exe 'keepjumps '.s:netrw_bannercnt."put='./'"
exe 'keepjumps '.s:netrw_bannercnt."put='../'"
exe 'keepjumps '.w:netrw_bannercnt."put='./'"
exe 'keepjumps '.w:netrw_bannercnt."put='../'"
endif
exe "keepjumps ".line1
keepjumps norm! 0
endif
exe 'keepjumps silent '.s:netrw_bannercnt.',$s/ -> .*$//e'
exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
exe s:netrw_bannercnt
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/ -> .*$//e'
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
exe w:netrw_bannercnt
endif
if line("$") >= s:netrw_bannercnt
if line("$") >= w:netrw_bannercnt
if g:netrw_sort_by =~ "^n"
call s:SetSort()
if v:version < 700
exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
elseif g:netrw_sort_direction =~ 'n'
exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
else
exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
endif
exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
endif
if g:netrw_longlist
" shorten the list to keep its width <= 80 characters
exe "keepjumps silent ".s:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
exe "keepjumps silent ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
endif
endif
endif
exe "keepjumps ".s:netrw_bannercnt
exe "keepjumps ".w:netrw_bannercnt
setlocal nomod noma nonu
@ -1421,8 +1429,27 @@ endfun
" NetGetWord: it gets the directory named under the cursor
fun! <SID>NetGetWord()
" call Dfunc("NetGetWord() line#".line("."))
if line(".") < s:netrw_bannercnt
if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
let dirname= "./"
let curline= getline(".")
if curline =~ '"\s*Sorted by\s'
norm s
let s:netrw_skipbrowse= 1
echo 'Pressing "s" also works'
elseif curline =~ '"\s*Sort sequence:'
let s:netrw_skipbrowse= 1
echo 'Press "S" to edit sorting sequence'
elseif curline =~ '"\s*Quick Help:'
norm ?
let s:netrw_skipbrowse= 1
echo 'Pressing "?" also works'
elseif curline =~ '"\s*\%(Hiding\|Showing\):'
norm a
let s:netrw_skipbrowse= 1
echo 'Pressing "a" also works'
elseif line("$") > w:netrw_bannercnt
exe w:netrw_bannercnt
endif
else
let dirname= getline(".")
if dirname =~ '\t'
@ -1466,7 +1493,7 @@ fun! <SID>NetBrowseRm(usrhost,path) range
endif
if all || ok =~ 'y\%[es]' || ok == ""
if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
silent! keepjumps .,$d
call NetBrowseFtpCmd(a:path,"delete ".rmfile)
else
@ -1492,7 +1519,7 @@ fun! <SID>NetBrowseRm(usrhost,path) range
endif
if all || ok =~ 'y\%[es]' || ok == ""
if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
call NetBrowseFtpCmd(a:path,"rmdir ".rmfile)
else
let rmfile = a:path.rmfile
@ -1552,7 +1579,7 @@ fun! <SID>NetBrowseRename(usrhost,path) range
let newname= input("Moving ".oldname." to : ",oldname)
call inputrestore()
if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
call NetBrowseFtpCmd(a:path,"rename ".oldname." ".newname)
else
let oldname= a:path.oldname
@ -1582,6 +1609,41 @@ fun! <SID>NetRefresh(dirname)
" call Dret("NetRefresh")
endfun
" ---------------------------------------------------------------------
" NetSplit: mode {{{2
" =0 : net and o
" =1 : net and v
" =2 : local and o
" =3 : local and v
fun! s:NetSplit(mode)
" call Dfunc("NetSplit(mode=".a:mode.")")
call s:SaveWinVars()
if a:mode == 0
exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
call s:CopyWinVars()
exe "norm! 0"
call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))
elseif a:mode ==1
exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
call s:CopyWinVars()
exe "norm! 0"
call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))
elseif a:mode ==2
exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
call s:CopyWinVars()
exe "norm! 0"
call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))
else
exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
call s:CopyWinVars()
exe "norm! 0"
call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))
endif
" call Dret("NetSplit")
endfun
" ---------------------------------------------------------------------
" NetBrowseX: allows users to write custom functions to operate on {{{2
" files given their extension. Passes 0=local, 1=remote
@ -1661,7 +1723,7 @@ endfun
" and reverse sorts will be requested of the server but not otherwise
" enforced here.
fun! NetBrowseFtpCmd(path,cmd)
" call Dfunc("NetBrowseFtpCmd(path<".a:path."> cmd<".a:cmd.">) netrw_method=".s:netrw_method)
" call Dfunc("NetBrowseFtpCmd(path<".a:path."> cmd<".a:cmd.">) netrw_method=".w:netrw_method)
" because WinXX ftp uses unix style input
" curline is one more than the bannercnt in order to account
@ -1669,11 +1731,11 @@ fun! NetBrowseFtpCmd(path,cmd)
" buffer yields a blank first line)
let ffkeep= &ff
setlocal ma ff=unix
let curline= s:netrw_bannercnt+1
let curline= w:netrw_bannercnt+1
exe "silent! keepjumps ".curline.",$d"
".........................................
if s:netrw_method == 2 || s:netrw_method == 5
if w:netrw_method == 2 || w:netrw_method == 5
" ftp + <.netrc>: Method #2
if a:path != ""
put ='cd '.a:path
@ -1689,7 +1751,7 @@ fun! NetBrowseFtpCmd(path,cmd)
endif
".........................................
elseif s:netrw_method == 3
elseif w:netrw_method == 3
" ftp + machine,id,passwd,filename: Method #3
setlocal ff=unix
if exists("g:netrw_port") && g:netrw_port != ""
@ -1759,9 +1821,9 @@ fun! <SID>NetrwListHide()
" Prune the list by hiding any files which match
" call Decho("pruning <".hide."> listhide<".listhide.">")
if g:netrw_hide == 1
exe 'keepjumps silent '.s:netrw_bannercnt.',$g~'.hide.'~d'
exe 'keepjumps silent '.w:netrw_bannercnt.',$g~'.hide.'~d'
elseif g:netrw_hide == 2
exe 'keepjumps silent '.s:netrw_bannercnt.',$v~'.hide.'~d'
exe 'keepjumps silent '.w:netrw_bannercnt.',$v~'.hide.'~d'
endif
endwhile
@ -1838,7 +1900,8 @@ fun! <SID>NetLongList(mode)
silent call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,"./"))
endif
" call s:NetRestorePosn()
call s:NetRestorePosn()
" call Dret("NetLongList : g:netrw_longlist=".g:netrw_longlist)
endfun
@ -1964,6 +2027,15 @@ endfun
" 5: (user: <U>) go down (next) bookmark
fun! <SID>NetBookmarkDir(chg,curdir)
" call Dfunc("NetBookmarkDir(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count)
if exists("w:netrw_bannercnt") && line(".") <= w:netrw_bannercnt
" looks like a "b" was pressed while in the banner region
if line("$") > w:netrw_bannercnt
exe w:netrw_bannercnt
endif
echo ""
" call Dret("NetBookmarkDir - ignoring")
return
endif
if a:chg == 0
" bookmark the current directory
@ -1973,6 +2045,7 @@ fun! <SID>NetBookmarkDir(chg,curdir)
elseif v:count > g:NETRW_BOOKMARKMAX
let g:NETRW_BOOKMARKMAX= v:count
endif
echo "bookmarked the current directory"
elseif a:chg == 1
" change to the bookmarked directory
@ -2072,6 +2145,12 @@ fun! <SID>LocalBrowse(dirname)
" call Dfunc("LocalBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr()." sortby=".g:netrw_sort_by)
" call Dredir("ls!")
if exists("s:netrw_skipbrowse")
unlet s:netrw_skipbrowse
" call Dret("NetBrowse")
return
endif
if v:version < 603
if !exists("g:netrw_quiet")
echohl Error | echo "***netrw*** vim version<".v:version."> too old for browsing with netrw" | echohl None
@ -2142,7 +2221,18 @@ fun! <SID>LocalBrowse(dirname)
" make netrw's idea of the current directory vim's if the user wishes
if !g:netrw_keepdir
" call Decho("change directory: cd ".b:netrw_curdir)
exe 'cd '.b:netrw_curdir
try
exe 'cd '.b:netrw_curdir
catch /^Vim\%((\a\+)\)\=:E472/
echohl Error | echo "***netrw*** unable to change directory to <".b:netrw_curdir."> (permissions?)" | echohl None
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
if exists("w:netrw_prvdir")
let b:netrw_curdir= w:netrw_prvdir
else
" call Dret("LocalBrowse : reusing buffer#".bufnum."<".a:dirname.">")
return
endif
endtry
endif
" change the name of the buffer to reflect the b:netrw_curdir
@ -2174,7 +2264,7 @@ fun! <SID>LocalBrowse(dirname)
nnoremap <buffer> <silent> d :call <SID>NetMakeDir("")<cr>
nnoremap <buffer> <silent> <c-h> :call <SID>NetHideEdit(1)<cr>
nnoremap <buffer> <silent> i :call <SID>NetLongList(1)<cr>
nnoremap <buffer> <silent> o :exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
nnoremap <buffer> <silent> o :call <SID>NetSplit(2)<cr>
nnoremap <buffer> <silent> p :exe "norm! 0"<bar>call <SID>LocalPreview(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),1))<cr>
nnoremap <buffer> <silent> q :<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<cr>
nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr>
@ -2182,7 +2272,7 @@ fun! <SID>LocalBrowse(dirname)
nnoremap <buffer> <silent> S :call <SID>NetSortSequence(1)<cr>
nnoremap <buffer> <silent> u :<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
nnoremap <buffer> <silent> v :exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
nnoremap <buffer> <silent> v :call <SID>NetSplit(3)<cr>
nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)<cr>
nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
nnoremap <buffer> <silent> <s-up> :Pexplore<cr>
@ -2202,7 +2292,7 @@ fun! <SID>LocalBrowse(dirname)
keepjumps 1d
keepjumps put ='\" Directory Listing (netrw '.g:loaded_netrw.')'
keepjumps put ='\" '.b:netrw_curdir
let s:netrw_bannercnt= 3
let w:netrw_bannercnt= 3
let sortby= g:netrw_sort_by
if g:netrw_sort_direction =~ "^r"
@ -2215,12 +2305,12 @@ fun! <SID>LocalBrowse(dirname)
" sorted by name
keepjumps put ='\" Sorted by '.sortby
keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence
let s:netrw_bannercnt= s:netrw_bannercnt + 2
let w:netrw_bannercnt= w:netrw_bannercnt + 2
else
" call Decho("directories will be sorted by size or date")
" sorted by size or date
keepjumps put ='\" Sorted by '.sortby
let s:netrw_bannercnt= s:netrw_bannercnt + 1
let w:netrw_bannercnt= w:netrw_bannercnt + 1
endif
" Hiding... -or- Showing...
@ -2230,15 +2320,15 @@ fun! <SID>LocalBrowse(dirname)
else
keepjumps put ='\" Showing: '.g:netrw_list_hide
endif
let s:netrw_bannercnt= s:netrw_bannercnt + 1
let w:netrw_bannercnt= w:netrw_bannercnt + 1
endif
keepjumps put ='\" Quick Help: ?:help -:go up dir D:delete R:rename s:sort-by x:exec'
keepjumps put ='\" ============================================================================'
let s:netrw_bannercnt= s:netrw_bannercnt + 2
let w:netrw_bannercnt= w:netrw_bannercnt + 2
" bannercnt should index the line just after the banner
let s:netrw_bannercnt= s:netrw_bannercnt + 1
" call Decho("bannercnt=".s:netrw_bannercnt)
let w:netrw_bannercnt= w:netrw_bannercnt + 1
" call Decho("bannercnt=".w:netrw_bannercnt)
" generate the requested directory listing
call LocalBrowseList()
@ -2252,38 +2342,43 @@ fun! <SID>LocalBrowse(dirname)
endif
" manipulate the directory listing (hide, sort)
if line("$") >= s:netrw_bannercnt
if line("$") >= w:netrw_bannercnt
if g:netrw_hide && g:netrw_list_hide != ""
call s:NetrwListHide()
endif
if line("$") >= s:netrw_bannercnt
if line("$") >= w:netrw_bannercnt
if g:netrw_sort_by =~ "^n"
call s:SetSort()
if v:version < 700
exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
elseif g:netrw_sort_direction =~ 'n'
exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
else
exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
endif
exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
else
if v:version < 700
exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
elseif g:netrw_sort_direction =~ 'n'
exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
else
exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
endif
exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{-}\///e'
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
endif
endif
endif
exe s:netrw_bannercnt
if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
exe w:netrw_bannercnt
endif
" record previous current directory
let w:netrw_prvdir= b:netrw_curdir
setlocal noma nomod nonu bh=hide nobl
if has("netbeans_intg") || has("sun_workshop")
@ -2454,7 +2549,7 @@ fun! <SID>LocalBrowseRm(path) range
exe "keepjumps ".ctr
" sanity checks
if line(".") < s:netrw_bannercnt
if line(".") < w:netrw_bannercnt
let ctr= ctr + 1
continue
endif
@ -2558,7 +2653,7 @@ fun! <SID>LocalBrowseRename(path) range
exe "keepjumps ".ctr
" sanity checks
if line(".") < s:netrw_bannercnt
if line(".") < w:netrw_bannercnt
let ctr= ctr + 1
continue
endif
@ -2630,46 +2725,67 @@ fun! s:Explore(indx,dosplit,style,...)
" if dosplit or file has been modified
if a:dosplit || &modified
call <SID>SaveWinVars()
if a:style == 0 " Explore, Sexplore
exe g:netrw_winsize."wincmd s"
" call Decho("style=0: Explore or Sexplore")
elseif a:style == 1 "Explore!, Sexplore!
exe g:netrw_winsize."wincmd v"
" call Decho("style=1: Explore! or Sexplore!")
elseif a:style == 2 " Hexplore
exe "bel ".g:netrw_winsize."wincmd s"
" call Decho("style=2: Hexplore")
elseif a:style == 3 " Hexplore!
exe "abo ".g:netrw_winsize."wincmd s"
" call Decho("style=3: Hexplore!")
elseif a:style == 4 " Vexplore
exe "lefta ".g:netrw_winsize."wincmd v"
" call Decho("style=4: Vexplore")
elseif a:style == 5 " Vexplore!
exe "rightb ".g:netrw_winsize."wincmd v"
" call Decho("style=5: Vexplore!")
endif
call s:CopyWinVars()
endif
norm! 0
if a:1 == "" && a:indx >= 0
let newdir= substitute(expand("%:p"),'^\(.*\)[/\\][^/\\]*$','\1','e')
" call Decho("calling LocalBrowse(newdir<".newdir.">)")
call s:LocalBrowse(newdir)
" Explore Hexplore Vexplore Sexplore
let newdir= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
if newdir =~ '^scp:' || newdir =~ '^ftp:'
" call Decho("calling NetBrowse(newdir<".newdir.">)")
call s:NetBrowse(newdir)
else
" call Decho("calling LocalBrowse(newdir<".newdir.">)")
call s:LocalBrowse(newdir)
endif
elseif a:1 =~ '\*\*/' || a:indx < 0
" Nexplore Pexplore -or- Explore **/...
if has("path_extra")
if !exists("s:explore_indx")
let s:explore_indx= 0
if has("path_extra") && v:version >= 700
if !exists("w:netrw_explore_indx")
let w:netrw_explore_indx= 0
endif
let indx = a:indx
if indx == -1
let indx= s:explore_indx + 1
let indx= w:netrw_explore_indx + 1
elseif indx == -2
let indx= s:explore_indx - 1
let indx= w:netrw_explore_indx - 1
else
let s:explore_indx = 0
let w:netrw_explore_indx = 0
if !exists("b:netrw_curdir")
let b:netrw_curdir = "."
let b:netrw_curdir= getcwd()
endif
let s:explorelist = split(expand(b:netrw_curdir."/".a:1),'\n')
let s:explore_listlen = len(s:explorelist)
if s:explore_listlen == 1 && s:explorelist[0] =~ '\*\*\/'
let w:netrw_explore_list = split(expand(b:netrw_curdir."/".a:1),'\n')
let w:netrw_explore_listlen = len(w:netrw_explore_list)
if w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/'
echohl WarningMsg | echo "***netrw*** no files matched" | echohl None
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
" call Dret("Explore")
@ -2678,32 +2794,33 @@ fun! s:Explore(indx,dosplit,style,...)
endif
" NetrwStatusLine support
let s:explore_indx = indx
let w:netrw_explore_indx= indx
if !exists("s:netrw_explore_stl")
let s:netrw_explore_stl= &stl
endif
set stl=%f\ %h%m%r%=%{NetrwStatusLine()}
" call Decho("explorelist<".join(s:explorelist,',')."> len=".s:explore_listlen)
" call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
" sanity check
if indx >= s:explore_listlen || indx < 0
let indx= (indx < 0)? 0 : ( s:explore_listlen - 1 )
if indx >= w:netrw_explore_listlen || indx < 0
let indx= (indx < 0)? 0 : ( w:netrw_explore_listlen - 1 )
echohl WarningMsg | echo "***netrw*** no more files match Explore pattern" | echohl None
call inputsave()|call input("Press <cr> to continue")|call inputrestore()
" call Dret("Explore")
return
endif
exe "let dirfile= s:explorelist[".indx."]"
exe "let dirfile= w:netrw_explore_list[".indx."]"
" call Decho("dirfile<".dirfile."> indx=".indx)
let newdir= substitute(dirfile,'/[^/]*$','','e')
" call Decho("newdir<".newdir.">")
" call Decho("calling LocalBrowse(newdir<".newdir.">)")
call s:LocalBrowse(newdir)
call search(substitute(dirfile,"^.*/","",""),"W")
let s:explore_mtchcnt = indx + 1
let s:explore_bufnr = bufnr(".")
let s:explore_line = line(".")
let w:netrw_explore_mtchcnt = indx + 1
let w:netrw_explore_bufnr = bufnr(".")
let w:netrw_explore_line = line(".")
" call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
else
if v:version < 700
@ -2726,13 +2843,14 @@ endfun
" ---------------------------------------------------------------------
" NetrwStatusLine: {{{2
fun! NetrwStatusLine()
let g:explore_bufnr= s:explore_bufnr
let g:explore_line= s:explore_line
if !exists("s:explore_bufnr") || s:explore_bufnr != bufnr(".") || !exists("s:explore_line") || s:explore_line != line(".")
" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".")
if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr(".") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
let &stl= s:netrw_explore_stl
if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
return ""
else
return "Match ".s:explore_mtchcnt." of ".s:explore_listlen
return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
endif
endfun
@ -3119,7 +3237,7 @@ endif
" "files" that satisfy each pattern, putting the priority / in
" front. An "*" pattern handles the default priority.
fun! <SID>SetSort()
" call Dfunc("SetSort() bannercnt=".s:netrw_bannercnt)
" call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
if g:netrw_longlist
let seqlist = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
else
@ -3151,24 +3269,54 @@ fun! <SID>SetSort()
" call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
" sanity check
if s:netrw_bannercnt > line("$")
if w:netrw_bannercnt > line("$")
" apparently no files were left after a Hiding pattern was used
" call Dret("SetSort : no files left after hiding")
return
endif
if seq == '*'
exe 'keepjumps silent '.s:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
exe 'keepjumps silent '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
else
exe 'keepjumps silent '.s:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
exe 'keepjumps silent '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
endif
let priority = priority + 1
endwhile
exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
" call Dret("SetSort")
endfun
" ---------------------------------------------------------------------
" SaveWinVars: (used by Explore()) {{{1
fun! s:SaveWinVars()
" call Dfunc("SaveWinVars()")
if exists("w:netrw_bannercnt") |let s:bannercnt = w:netrw_bannercnt |endif
if exists("w:netrw_method") |let s:method = w:netrw_method |endif
if exists("w:netrw_prvdir") |let s:prvdir = w:netrw_prvdir |endif
if exists("w:netrw_explore_indx") |let s:explore_indx = w:netrw_explore_indx |endif
if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif
if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif
if exists("w:netrw_explore_bufnr") |let s:explore_bufnr = w:netrw_explore_bufnr |endif
if exists("w:netrw_explore_line") |let s:explore_line = w:netrw_explore_line |endif
" call Dret("SaveWinVars")
endfun
" ---------------------------------------------------------------------
" CopyWinVars: (used by Explore()) {{{1
fun! s:CopyWinVars()
" call Dfunc("CopyWinVars()")
if exists("s:bannercnt") |let w:netrw_bannercnt = s:bannercnt |unlet s:bannercnt |endif
if exists("s:method") |let w:netrw_method = s:method |unlet s:method |endif
if exists("s:prvdir") |let w:netrw_prvdir = s:prvdir |unlet s:prvdir |endif
if exists("s:explore_indx") |let w:netrw_explore_indx = s:explore_indx |unlet s:explore_indx |endif
if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif
if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif
if exists("s:explore_bufnr") |let w:netrw_explore_bufnr = s:explore_bufnr |unlet s:explore_bufnr |endif
if exists("s:explore_line") |let w:netrw_explore_line = s:explore_line |unlet s:explore_line |endif
" call Dret("CopyWinVars")
endfun
let &cpo= s:keepcpo
unlet s:keepcpo
" ------------------------------------------------------------------------