diff options
38 files changed, 1780 insertions, 1450 deletions
diff --git a/runtime/autoload/csscomplete.vim b/runtime/autoload/csscomplete.vim index 8ac3600611..9461f39b8f 100644 --- a/runtime/autoload/csscomplete.vim +++ b/runtime/autoload/csscomplete.vim @@ -1,7 +1,7 @@ " Vim completion script " Language: CSS 2.1 " Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) -" Last Change: 2005 Sep 19 +" Last Change: 2005 Sep 23 function! csscomplete#CompleteCSS(findstart, base) if a:findstart @@ -18,6 +18,8 @@ else " 3. if } we are outside of css definitions " 4. for comments ignoring is be the easiest but assume they are the same " as 1. + " 5. if @ complete at-rule + " 6. if ! complete important let line = a:base let res = [] @@ -26,14 +28,16 @@ else " We need the last occurrence of char so reverse line let revline = join(reverse(split(line, '.\zs')), '') + let openbrace = stridx(revline, '{') let closebrace = stridx(revline, '}') - let colon = stridx(revline, ':') - let semicolon = stridx(revline, ';') - let opencomm = stridx(revline, '*/') " Line was reversed - let closecomm = stridx(revline, '/*') " Line was reversed - let style = stridx(revline, '=\s*elyts') " Line was reversed - let atrule = stridx(revline, '@') + let colon = stridx(revline, ':') + let semicolon = stridx(revline, ';') + let opencomm = stridx(revline, '*/') " Line was reversed + let closecomm = stridx(revline, '/*') " Line was reversed + let style = stridx(revline, '=\s*elyts') " Line was reversed + let atrule = stridx(revline, '@') + let exclam = stridx(revline, '!') if openbrace > -1 let borders[openbrace] = "openbrace" @@ -59,6 +63,9 @@ else if atrule > -1 let borders[atrule] = "atrule" endif + if exclam > -1 + let borders[exclam] = "exclam" + endif if len(borders) == 0 || borders[min(keys(borders))] =~ '^\(openbrace\|semicolon\|opencomm\|closecomm\|style\)$' " Complete properties @@ -318,6 +325,22 @@ else return [] + elseif borders[min(keys(borders))] == 'exclam' + + " Complete values + let impbase = matchstr(line, '.\{-}!\s*\ze[a-zA-Z ]*$') + let entered_imp = matchstr(line, '.\{-}!\s*\zs[a-zA-Z ]*$') + + let values = ["important"] + + for m in values + if m =~? '^'.entered_imp + call add(res, impbase . m) + endif + endfor + + return res + elseif borders[min(keys(borders))] == 'atrule' let afterat = matchstr(line, '.*@\zs.*') @@ -368,7 +391,7 @@ else endif - let values = ["charset", "page", "media", "import"] + let values = ["charset", "page", "media", "import", "font-face"] let atrulebase = matchstr(line, '.*@\ze[a-zA-Z -]*$') let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$') diff --git a/runtime/autoload/htmlcomplete.vim b/runtime/autoload/htmlcomplete.vim index ab50952435..9dd5830a12 100644 --- a/runtime/autoload/htmlcomplete.vim +++ b/runtime/autoload/htmlcomplete.vim @@ -1,7 +1,7 @@ " Vim completion script " Language: XHTML 1.0 Strict " Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) -" Last Change: 2005 Sep 19 +" Last Change: 2005 Sep 23 function! htmlcomplete#CompleteTags(findstart, base) if a:findstart @@ -66,8 +66,13 @@ function! htmlcomplete#CompleteTags(findstart, base) " it possible? " Also retrieving class names from current file and linked " stylesheets. - if a:base =~ "\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']" - if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$" + if a:base =~ "\\(on[a-z]*\\|id\\|style\\|class\\)\\s*=\\s*[\"']" + if a:base =~ "\\(id\\|class\\)\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$" + if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$" + let search_for = "class" + elseif a:base =~ "id\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$" + let search_for = "id" + endif " Handle class name completion " 1. Find lines of <link stylesheet> " 1a. Check file for @import @@ -76,9 +81,22 @@ function! htmlcomplete#CompleteTags(findstart, base) let head = getline(search('<head\>'), search('<\/head>')) let headjoined = join(copy(head), ' ') if headjoined =~ '<style' - let stylehead = substitute(headjoined, '+>\*[', ' ', 'g') - let styleheadlines = split(stylehead) - let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'") + let stylehead = substitute(headjoined, '+>\*[,', ' ', 'g') + if search_for == 'class' + let styleheadlines = split(stylehead) + let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'") + else + let stylesheet = split(headjoined, '[{}]') + " Get all lines which fit id syntax + let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'") + " Filter out possible color definitions + call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'") + " Filter out complex border definitions + call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'") + let templines = join(classlines, ' ') + let headclasslines = split(templines) + call filter(headclasslines, "v:val =~ '#[a-zA-Z0-9_-]\\+'") + endif let internal = 1 else let internal = 0 @@ -93,13 +111,15 @@ function! htmlcomplete#CompleteTags(findstart, base) let styletable += [matchstr(line, "href\\s*=\\s*[\"']\\zs\\f\\+\\ze")] endif endfor - for file in filestable + for file in styletable if filereadable(file) let stylesheet = readfile(file) let secimport = filter(copy(stylesheet), "v:val =~ '@import'") if len(secimport) > 0 for line in secimport - let secimportfiles += [matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")] + let secfile = matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze") + let secfile = fnamemodify(file, ":p:h").'/'.secfile + let secimportfiles += [secfile] endfor endif endif @@ -109,10 +129,24 @@ function! htmlcomplete#CompleteTags(findstart, base) for file in cssfiles if filereadable(file) let stylesheet = readfile(file) - let stylefile = join(stylesheet) - let stylefile = substitute(stylefile, '+>\*[', ' ', 'g') - let stylesheet = split(stylefile) - let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'") + let stylefile = join(stylesheet, ' ') + let stylefile = substitute(stylefile, '+>\*[,', ' ', 'g') + if search_for == 'class' + let stylesheet = split(stylefile) + let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'") + else + let stylesheet = split(stylefile, '[{}]') + " Get all lines which fit id syntax + let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'") + " Filter out possible color definitions + call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'") + " Filter out complex border definitions + call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'") + let templines = join(classlines, ' ') + let stylelines = split(templines) + let classlines = filter(stylelines, "v:val =~ '#[a-zA-Z0-9_-]\\+'") + + endif endif " We gathered classes definitions from all external files let classes += classlines @@ -120,43 +154,71 @@ function! htmlcomplete#CompleteTags(findstart, base) if internal == 1 let classes += headclasslines endif - let elements = {} - for element in classes - if element =~ '^\.' - let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze') - let class = substitute(class, ':.*', '', '') - if has_key(elements, "common") - let elements["common"] .= " ".class - else - let elements["common"] = class - endif - else - let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze') - let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.')) - if tagname != '' - if has_key(elements, tagname) - let elements[tagname] .= " ".class + + if search_for == 'class' + let elements = {} + for element in classes + if element =~ '^\.' + let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze') + let class = substitute(class, ':.*', '', '') + if has_key(elements, 'common') + let elements['common'] .= ' '.class else - let elements[tagname] = class + let elements['common'] = class + endif + else + let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze') + let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.')) + if tagname != '' + if has_key(elements, tagname) + let elements[tagname] .= ' '.class + else + let elements[tagname] = class + endif endif endif + endfor + + if has_key(elements, tag) && has_key(elements, 'common') + let values = split(elements[tag]." ".elements['common']) + elseif has_key(elements, tag) && !has_key(elements, 'common') + let values = split(elements[tag]) + elseif !has_key(elements, tag) && has_key(elements, 'common') + let values = split(elements['common']) + else + return [] endif - endfor - if has_key(elements, tag) && has_key(elements, "common") - let values = split(elements[tag]." ".elements["common"]) - elseif has_key(elements, tag) && !has_key(elements, "common") - let values = split(elements[tag]) - elseif !has_key(elements, tag) && has_key(elements, "common") - let values = split(elements["common"]) - else - return [] + elseif search_for == 'id' + " Find used IDs + " 1. Catch whole file + let filelines = getline(1, line('$')) + " 2. Find lines with possible id + let used_id_lines = filter(filelines, 'v:val =~ "id\\s*=\\s*[\"''][a-zA-Z0-9_-]\\+"') + " 3a. Join all filtered lines + let id_string = join(used_id_lines, ' ') + " 3b. And split them to be sure each id is in separate item + let id_list = split(id_string, 'id\s*=\s*') + " 4. Extract id values + let used_id = map(id_list, 'matchstr(v:val, "[\"'']\\zs[a-zA-Z0-9_-]\\+\\ze")') + let joined_used_id = ','.join(used_id, ',').',' + + let allvalues = map(classes, 'matchstr(v:val, ".*#\\zs[a-zA-Z0-9_-]\\+")') + + let values = [] + + for element in classes + if joined_used_id !~ ','.element.',' + let values += [element] + endif + + endfor + endif " We need special version of sbase let classbase = matchstr(a:base, ".*[\"']") - let classquote = matchstr(classbase, '.$') - + let classquote = matchstr(classbase, '.$') let entered_class = matchstr(attr, ".*=\\s*[\"']\\zs.*") @@ -229,6 +291,10 @@ function! htmlcomplete#CompleteTags(findstart, base) let values = ["text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"] elseif a:base =~ '^button' let values = ["button", "submit", "reset"] + elseif a:base =~ '^style' + let values = ["text/css"] + elseif a:base =~ '^script' + let values = ["text/javascript"] endif else return [] @@ -313,11 +379,11 @@ function! htmlcomplete#CompleteTags(findstart, base) elseif tag == 'q' let attrs = coreattrs + ["cite"] elseif tag == 'script' - let attrs = ["id", "charset", "type", "src", "defer", "xml:space"] + let attrs = ["id", "charset", "type=\"text/javascript\"", "type", "src", "defer", "xml:space"] elseif tag == 'select' let attrs = coreattrs + ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"] elseif tag == 'style' - let attrs = coreattrs + ["id", "type", "media", "title", "xml:space"] + let attrs = coreattrs + ["id", "type=\"text/css\"", "type", "media", "title", "xml:space"] elseif tag == 'table' let attrs = coreattrs + ["summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding"] elseif tag =~ '^\(thead\|tfoot\|tbody\|tr\)$' diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim index c7434af9b5..10dd28542d 100644 --- a/runtime/autoload/netrw.vim +++ b/runtime/autoload/netrw.vim @@ -1,7 +1,6 @@ " netrw.vim: Handles file transfer and remote directory listing across a network " AUTOLOAD PORTION -" Date: Sep 12, 2005 -" Version: 70 +" Last Change: Aug 29, 2005 " Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz> " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim " Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1 @@ -17,19 +16,13 @@ " But be doers of the Word, and not only hearers, deluding your own selves {{{1 " (James 1:22 RSV) " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - -" Exception for &cp: {{{1 -if &cp - finish -endif +let s:keepcpo= &cpo +set cpo&vim +" call Decho("doing autoload/netrw.vim") if v:version < 700 echohl WarningMsg | echo "***netrw*** you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw" | echohl None finish endif -let g:loaded_netrw = "v70" -let s:keepcpo = &cpo -set cpo&vim -" call Decho("doing autoload/netrw.vim") " --------------------------------------------------------------------- " Default values for global netrw variables {{{1 @@ -1133,7 +1126,7 @@ fun! s:NetBrowse(dirname) " call Decho("new path<".path.">") " remote-read the requested file into current buffer - keepjumps keepalt enew! + enew! set ma " call Decho("exe file .method."://".user.machine."/".escape(path,s:netrw_cd_escape)) exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape) @@ -1143,7 +1136,7 @@ fun! s:NetBrowse(dirname) keepjumps 1d " save certain window-oriented variables into buffer-oriented variables - call s:SetBufWinVars() + call s:BufWinVars() call s:NetOptionRestore() setlocal nomod @@ -1169,7 +1162,7 @@ fun! s:NetBrowse(dirname) endif else " call Decho("generate a new buffer") - keepjumps keepalt enew! + enew! endif " rename file to reflect where its from @@ -1207,7 +1200,7 @@ fun! s:NetBrowse(dirname) nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr> nnoremap <buffer> <silent> v :call <SID>NetSplit(1)<cr> nnoremap <buffer> <silent> x :call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr> - nnoremap <buffer> <silent> <2-leftmouse> :call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr> + nnoremap <buffer> <silent> <2-leftmouse> :call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr> exe 'nnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' exe 'nnoremap <buffer> <silent> d :call <SID>NetMakeDir("'.user.machine.'")<cr>' @@ -1267,7 +1260,6 @@ fun! s:NetBrowse(dirname) if g:netrw_ftp_browse_reject != "" exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d" endif - silent! keepjumps %s/\r$//e " if there's no ../ listed, then put ./ and ../ in let line1= line(".") @@ -1282,9 +1274,9 @@ fun! s:NetBrowse(dirname) keepjumps norm! 0 " more cleanup - exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e' - exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e' - exe "silent! keepjumps ".w: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 @@ -1341,33 +1333,33 @@ fun! s:NetBrowse(dirname) keepjumps norm! 0 endif - exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e' - exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e' - exe 'silent keepjumps '.w: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("$") >= w:netrw_bannercnt if g:netrw_sort_by =~ "^n" call s:SetSort() if g:netrw_sort_direction =~ 'n' - exe 'silent keepjumps '.w:netrw_bannercnt.',$sort' + exe 'keepjumps silent '.w:netrw_bannercnt.',$sort' else - exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!' + exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!' endif - exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e' + exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e' endif if w:netrw_longlist == 1 " shorten the list to keep its width <= winwidth characters - exe "silent keepjumps ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e' + exe "keepjumps silent ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e' endif endif endif + " cleanup any windows mess at end-of-line + keepjumps silent! %s/\r$//e call s:NetrwWideListing() if line("$") >= w:netrw_bannercnt - " place cursor on the top-left corner of the file listing exe "keepjumps ".w:netrw_bannercnt - norm! 0 endif call s:NetOptionRestore() @@ -1457,7 +1449,7 @@ fun! s:NetGetWord() let s:netrw_skipbrowse= 1 echo 'Pressing "a" also works' elseif line("$") > w:netrw_bannercnt - exe 'silent keepjumps '.w:netrw_bannercnt + exe w:netrw_bannercnt endif elseif w:netrw_longlist == 0 @@ -1698,7 +1690,7 @@ fun! s:NetBrowseX(fname,remote) " create a local copy let fname= tempname().".".exten " call Decho("create a local copy of <".a:fname."> as <".fname.">") - exe "silent keepjumps bot 1new ".a:fname + exe "keepjumps silent bot 1new ".a:fname set bh=delete exe "w! ".fname q @@ -1823,14 +1815,14 @@ fun! s:NetBrowseFtpCmd(path,cmd) " cleanup for Windows if has("win32") || has("win95") || has("win64") || has("win16") - silent! keepjumps! %s/\r$//e + keepjumps silent!! %s/\r$//e endif if a:cmd == "dir" " infer directory/link based on the file permission string - silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@ - silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/ + keepjumps silent! g/d\%([-r][-w][-x]\)\{3}/s@$@/@ + keepjumps silent! g/l\%([-r][-w][-x]\)\{3}/s/$/@/ if w:netrw_longlist == 0 || w:netrw_longlist == 2 - exe "silent! keepjumps ".curline.',$s/^\%(\S\+\s\+\)\{8}//e' + exe "keepjumps silent! ".curline.',$s/^\%(\S\+\s\+\)\{8}//e' endif endif @@ -1868,9 +1860,9 @@ fun! s:NetrwListHide() " Prune the list by hiding any files which match " call Decho("pruning <".hide."> listhide<".listhide.">") if g:netrw_hide == 1 - exe 'silent keepjumps '.w:netrw_bannercnt.',$g~'.hide.'~d' + exe 'keepjumps silent '.w:netrw_bannercnt.',$g~'.hide.'~d' elseif g:netrw_hide == 2 - exe 'silent keepjumps '.w:netrw_bannercnt.',$v~'.hide.'~d' + exe 'keepjumps silent '.w:netrw_bannercnt.',$v~'.hide.'~d' endif endwhile @@ -2004,7 +1996,7 @@ fun! s:NetrwWideListing() exe "silent keepjumps norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p' endif exe "silent keepjumps ".newcolstart.','.newcolend.'d' - exe 'silent keepjumps '.w:netrw_bannercnt + exe w:netrw_bannercnt endwhile exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e' set noma nomod @@ -2138,7 +2130,7 @@ fun! s:NetBookmarkDir(chg,curdir) 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 'silent keepjumps '.w:netrw_bannercnt + exe w:netrw_bannercnt endif echo "" " call Dret("NetBookmarkDir - ignoring") @@ -2237,10 +2229,12 @@ endfun " --------------------------------------------------------------------- " NetObtain: obtain file under cursor (for remote browsing support) {{{2 fun! s:NetObtain() + if !exists("s:netrw_users_stl") + let s:netrw_users_stl= &stl + endif let fname= expand("<cWORD>") - - " NetrwStatusLine support - for obtaining support - call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.fname) + exe 'set stl=%f\ %h%m%r%=Obtaining\ '.escape(fname,' ') + redraw! " call Dfunc("NetObtain() method=".w:netrw_method) if exists("w:netrw_method") && w:netrw_method =~ '[235]' @@ -2318,8 +2312,6 @@ fun! s:NetObtain() echohl Error | echo "***netrw*** this system doesn't support ftp" | echohl None call inputsave()|call input("Press <cr> to continue")|call inputrestore() endif - let &stl = s:netrw_users_stl - let &laststatus = s:netrw_users_ls " call Dret("NetObtain") return endif @@ -2343,8 +2335,7 @@ fun! s:NetObtain() endif " restore status line - let &stl = s:netrw_users_stl - let &laststatus = s:netrw_users_ls + let &stl= s:netrw_users_stl redraw! " call Dret("NetObtain") @@ -2413,7 +2404,7 @@ fun! netrw#DirBrowse(dirname) " get cleared buffer if bufnum < 0 || !bufexists(bufnum) - keepjumps keepalt enew! + keepalt enew! " call Decho("enew buffer") else exe "keepalt b ".bufnum @@ -2505,7 +2496,7 @@ fun! netrw#DirBrowse(dirname) nnoremap <buffer> <silent> U :<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr> nnoremap <buffer> <silent> v :call <SID>NetSplit(3)<cr> nnoremap <buffer> <silent> x :call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)"<cr> - nnoremap <buffer> <silent> <2-leftmouse> :call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr> + nnoremap <buffer> <silent> <2-leftmouse> :exe "call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))"<cr> nnoremap <buffer> <silent> <s-up> :Pexplore<cr> nnoremap <buffer> <silent> <s-down> :Nexplore<cr> exe 'nnoremap <buffer> <silent> <del> :call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>' @@ -2583,19 +2574,19 @@ fun! netrw#DirBrowse(dirname) call s:SetSort() if g:netrw_sort_direction =~ 'n' - exe 'silent keepjumps '.w:netrw_bannercnt.',$sort' + exe 'keepjumps silent '.w:netrw_bannercnt.',$sort' else - exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!' + exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!' endif - exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e' + exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e' else if g:netrw_sort_direction =~ 'n' - exe 'silent keepjumps '.w:netrw_bannercnt.',$sort' + exe 'keepjumps silent '.w:netrw_bannercnt.',$sort' else - exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!' + exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!' endif - exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e' + exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{-}\///e' endif endif @@ -2603,16 +2594,14 @@ fun! netrw#DirBrowse(dirname) call s:NetrwWideListing() if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt - " place cursor on the top-left corner of the file listing - exe 'silent '.w:netrw_bannercnt - norm! 0 + exe w:netrw_bannercnt endif " record previous current directory let w:netrw_prvdir= b:netrw_curdir " save certain window-oriented variables into buffer-oriented variables - call s:SetBufWinVars() + call s:BufWinVars() call s:NetOptionRestore() setlocal noma nomod nonu bh=hide nobl @@ -2712,7 +2701,7 @@ fun! s:LocalBrowseList() endwhile " cleanup any windows mess at end-of-line - silent! keepjumps %s/\r$//e + keepjumps silent! %s/\r$//e setlocal ts=32 " call Dret("LocalBrowseList") @@ -3043,8 +3032,12 @@ fun! netrw#Explore(indx,dosplit,style,...) endif endif - " NetrwStatusLine support - for exploring support + " NetrwStatusLine support let w:netrw_explore_indx= indx + if !exists("s:netrw_users_stl") + let s:netrw_users_stl= &stl + endif + set stl=%f\ %h%m%r%=%{NetrwStatusLine()} " call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen) " sanity check @@ -3057,21 +3050,15 @@ fun! netrw#Explore(indx,dosplit,style,...) endif exe "let dirfile= w:netrw_explore_list[".indx."]" -" call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">") +" 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) - if w:netrw_longlist == 0 || w:netrw_longlist == 1 - call search('^'.substitute(dirfile,"^.*/","","").'\>',"W") - else - call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w") - endif + call search(substitute(dirfile,"^.*/","",""),"W") let w:netrw_explore_mtchcnt = indx + 1 let w:netrw_explore_bufnr = bufnr(".") let w:netrw_explore_line = line(".") - call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}') " call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line) else @@ -3091,73 +3078,12 @@ fun! netrw#Explore(indx,dosplit,style,...) endfun " --------------------------------------------------------------------- -" SetupNetrwStatusLine: {{{2 -fun! s:SetupNetrwStatusLine(statline) -" call Dfunc("SetupNetrwStatusLine(statline<".a:statline.">)") - - if !exists("s:netrw_setup_statline") - let s:netrw_setup_statline= 1 -" call Decho("do first-time status line setup") - - if !exists("s:netrw_users_stl") - let s:netrw_users_stl= &stl - endif - if !exists("s:netrw_users_ls") - let s:netrw_users_ls= &laststatus - endif - - " set up User9 highlighting as needed - let keepa= @a - redir @a - try - hi User9 - catch /^Vim\%((\a\+)\)\=:E411/ - if &bg == "dark" - hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue - else - hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue - endif - endtry - redir END - let @a= keepa - endif - - " set up status line (may use User9 highlighting) - " insure that windows have a statusline - " make sure statusline is displayed - let &stl=a:statline - set laststatus=2 -" call Decho("stl=".&stl) - redraw! - -" call Dret("SetupNetrwStatusLine : stl=".&stl) -endfun - -" --------------------------------------------------------------------- " NetrwStatusLine: {{{2 fun! NetrwStatusLine() - - " vvv NetrwStatusLine() debugging vvv -" let g:stlmsg="" -" if !exists("w:netrw_explore_bufnr") -" let g:stlmsg="!X<explore_bufnr>" -" elseif w:netrw_explore_bufnr != bufnr(".") -" let g:stlmsg="explore_bufnr!=".bufnr(".") -" endif -" if !exists("w:netrw_explore_line") -" let g:stlmsg=" !X<explore_line>" -" elseif w:netrw_explore_line != line(".") -" let g:stlmsg=" explore_line!={line(.)<".line(".").">" -" endif -" if !exists("w:netrw_explore_list") -" let g:stlmsg=" !X<explore_list>" -" endif - " ^^^ NetrwStatusLine() debugging ^^^ - +" 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") " restore user's status line - let &stl = s:netrw_users_stl - let &laststatus = s:netrw_users_ls + let &stl= s:netrw_users_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 "" |