summaryrefslogtreecommitdiff
path: root/runtime/autoload/netrw.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2012-04-05 17:33:26 +0200
committerBram Moolenaar <Bram@vim.org>2012-04-05 17:33:26 +0200
commit5b435d671e5287975398316b8aa8000c96e6ec92 (patch)
tree5f1797bf37028f5397eb406edff9168cbabfe97e /runtime/autoload/netrw.vim
parent3675fa09a753bdf0b5eaac209ed8d6739a7e95d4 (diff)
downloadvim-git-5b435d671e5287975398316b8aa8000c96e6ec92.tar.gz
Updated runtime files.
Diffstat (limited to 'runtime/autoload/netrw.vim')
-rw-r--r--runtime/autoload/netrw.vim795
1 files changed, 505 insertions, 290 deletions
diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim
index 2c85bf8d4..316593345 100644
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,7 +1,7 @@
" netrw.vim: Handles file transfer and remote directory listing across
" AUTOLOAD SECTION
-" Date: Sep 26, 2011
-" Version: 143
+" Date: Apr 05, 2012
+" Version: 145
" Maintainer: Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
" Copyright: Copyright (C) 1999-2010 Charles E. Campbell, Jr. {{{1
@@ -22,7 +22,7 @@
if &cp || exists("g:loaded_netrw")
finish
endif
-let g:loaded_netrw = "v143"
+let g:loaded_netrw = "v145"
if v:version < 702
echohl WarningMsg
echo "***warning*** this version of netrw needs vim 7.2"
@@ -42,7 +42,7 @@ if v:version < 700
endif
let s:keepcpo= &cpo
-setlocal cpo&vim
+set cpo&vim
"DechoTabOn
"call Decho("doing autoload/netrw.vim version ".g:loaded_netrw)
@@ -51,6 +51,86 @@ setlocal cpo&vim
" ======================
" ---------------------------------------------------------------------
+" netrw#ErrorMsg: {{{2
+" 0=note = s:NOTE
+" 1=warning = s:WARNING
+" 2=error = s:ERROR
+" Apr 05, 2012 : max errnum currently is 88
+fun! netrw#ErrorMsg(level,msg,errnum)
+" call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
+
+ if a:level < g:netrw_errorlvl
+ call Dret("netrw#ErrorMsg : suppressing level=".a:level." since g;netrw_errorlvl=".g:netrw_errorlvl)
+ return
+ endif
+
+ if a:level == 1
+ let level= "**warning** (netrw) "
+ elseif a:level == 2
+ let level= "**error** (netrw) "
+ else
+ let level= "**note** (netrw) "
+ endif
+" call Decho("level=".level)
+
+ if g:netrw_use_errorwindow
+ " (default) netrw creates a one-line window to show error/warning
+ " messages (reliably displayed)
+
+ " record current window number for NetrwRestorePosn()'s benefit
+ let s:winBeforeErr= winnr()
+" call Decho("s:winBeforeErr=".s:winBeforeErr)
+
+ " getting messages out reliably is just plain difficult!
+ " This attempt splits the current window, creating a one line window.
+ if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0
+" call Decho("write to NetrwMessage buffer")
+ exe bufwinnr("NetrwMessage")."wincmd w"
+" call Decho("setl ma noro")
+ setl ma noro
+ keepj call setline(line("$")+1,level.a:msg)
+ keepj $
+ else
+" call Decho("create a NetrwMessage buffer window")
+ bo 1split
+ sil! call s:NetrwEnew()
+ sil! keepj call s:NetrwSafeOptions()
+ setl bt=nofile
+ keepj file NetrwMessage
+" call Decho("setlocal ma noro")
+ setl ma noro
+ call setline(line("$"),level.a:msg)
+ endif
+" call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr())
+ if &fo !~ '[ta]'
+ syn clear
+ syn match netrwMesgNote "^\*\*note\*\*"
+ syn match netrwMesgWarning "^\*\*warning\*\*"
+ syn match netrwMesgError "^\*\*error\*\*"
+ hi link netrwMesgWarning WarningMsg
+ hi link netrwMesgError Error
+ endif
+" call Decho("(ErrorMsg) setl noma ro bh=wipe")
+ setl noma ro bh=wipe
+
+ else
+ " (optional) netrw will show messages using echomsg. Even if the
+ " message doesn't appear, at least it'll be recallable via :messages
+" redraw!
+ if a:level == s:WARNING
+ echohl WarningMsg
+ elseif a:level == s:ERROR
+ echohl Error
+ endif
+ echomsg level.a:msg
+" call Decho("echomsg ***netrw*** ".a:msg)
+ echohl None
+ endif
+
+" call Dret("netrw#ErrorMsg")
+endfun
+
+" ---------------------------------------------------------------------
" NetrwInit: initializes variables if they haven't been defined {{{2
" Loosely, varname = value.
fun s:NetrwInit(varname,value)
@@ -100,6 +180,9 @@ if !exists("g:netrw_ftp_cmd")
let g:netrw_ftp_cmd = "ftp"
endif
let s:netrw_ftp_cmd= g:netrw_ftp_cmd
+if !exists("g:netrw_ftp_options")
+ let g:netrw_ftp_options= "-i -n"
+endif
if !exists("g:netrw_http_cmd")
if executable("elinks")
let g:netrw_http_cmd = "elinks"
@@ -171,6 +254,7 @@ let s:netrw_usercuc = &cursorcolumn
call s:NetrwInit("g:netrw_dirhist_cnt" , 0)
call s:NetrwInit("g:netrw_decompress" , '{ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf", ".xz" : "unxz" }')
call s:NetrwInit("g:netrw_dirhistmax" , 10)
+call s:NetrwInit("g:netrw_errorlvl" , s:NOTE)
call s:NetrwInit("g:netrw_fastbrowse" , 1)
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$')
if !exists("g:netrw_ftp_list_cmd")
@@ -212,6 +296,10 @@ if !exists("g:netrw_list_cmd")
endif
call s:NetrwInit("g:netrw_list_hide","")
" Default values - lh-lz ---------- {{{3
+if exists("g:netrw_local_copycmd")
+ let g:netrw_localcopycmd= g:netrw_local_copycmd"
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_copycmd is deprecated in favor of g:netrw_localcopycmd",84)
+endif
if !exists("g:netrw_localcopycmd")
if has("win32") || has("win95") || has("win64") || has("win16")
if g:netrw_cygwin
@@ -224,9 +312,24 @@ if !exists("g:netrw_localcopycmd")
else
let g:netrw_localcopycmd= ""
endif
+ if !executable(g:netrw_localcopycmd)
+ call netrw#ErrorMsg(s:NOTE,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
+ endif
+endif
+if exists("g:netrw_local_mkdir")
+ let g:netrw_localmkdir= g:netrw_local_mkdir"
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_mkdir is deprecated in favor of g:netrw_localmkdir",87)
+endif
+call s:NetrwInit("g:netrw_localmkdir","mkdir")
+if !executable(g:netrw_localmkdir)
+ call netrw#ErrorMsg(s:NOTE,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80)
+endif
endif
-call s:NetrwInit("g:netrw_local_mkdir","mkdir")
call s:NetrwInit("g:netrw_remote_mkdir","mkdir")
+if exists("g:netrw_local_movecmd")
+ let g:netrw_localmovecmd= g:netrw_local_movecmd"
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_movecmd is deprecated in favor of g:netrw_localmovecmd",88)
+endif
if !exists("g:netrw_localmovecmd")
if has("win32") || has("win95") || has("win64") || has("win16")
if g:netrw_cygwin
@@ -239,8 +342,18 @@ if !exists("g:netrw_localmovecmd")
else
let g:netrw_localmovecmd= ""
endif
+ if !executable(g:netrw_localmkdir)
+ call netrw#ErrorMsg(s:NOTE,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",81)
+ endif
+endif
+call s:NetrwInit("g:netrw_localrmdir", "rmdir")
+if exists("g:netrw_local_rmdir")
+ let g:netrw_localrmdir= g:netrw_local_rmdir"
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_rmdir is deprecated in favor of g:netrw_localrmdir",86)
+endif
+if !executable(g:netrw_localrmdir)
+ call netrw#ErrorMsg(s:NOTE,"consider setting g:netrw_localrmdir<".g:netrw_localrmdir."> to something that works",82)
endif
-call s:NetrwInit("g:netrw_local_rmdir", "rmdir")
call s:NetrwInit("g:netrw_liststyle" , s:THINLIST)
" sanity checks
if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST
@@ -293,6 +406,8 @@ call s:NetrwInit("g:netrw_xstrlen",0)
call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.")
call s:NetrwInit("g:netrw_win95ftp",1)
call s:NetrwInit("g:netrw_winsize",50)
+if g:netrw_winsize == 0|let g:netrw_winsize= -1|endif
+if g:netrw_winsize > 100|let g:netrw_winsize= 100|endif
" ---------------------------------------------------------------------
" Default values for netrw's script variables: {{{2
call s:NetrwInit("g:netrw_fname_escape",' ?&;%')
@@ -315,10 +430,12 @@ call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"")
" ======================
if v:version >= 700 && has("balloon_eval") && !exists("s:initbeval") && !exists("g:netrw_nobeval") && has("syntax") && exists("g:syntax_on")
let s:initbeval = &beval
+" let s:initbexpr = &l:bexpr
let &l:bexpr = "netrw#NetrwBalloonHelp()"
set beval
au BufWinEnter,WinEnter * if &ft == "netrw"|set beval|else|let &beval= s:initbeval|endif
endif
+au WinEnter * if &ft == "netrw"|call s:NetrwInsureWinVars()|endif
" ==============================
" Netrw Utility Functions: {{{1
@@ -360,8 +477,8 @@ endif
" vt: normally its "w:" or "s:" (a variable type)
fun! s:NetrwOptionSave(vt)
" call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$"))
-
" call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist"))
+
if !exists("{a:vt}netrw_optionsave")
let {a:vt}netrw_optionsave= 1
else
@@ -371,6 +488,7 @@ fun! s:NetrwOptionSave(vt)
" call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff)
" Save current settings and current directory
+" call Decho("saving current settings and current directory")
let s:yykeep = @@
if exists("&l:acd")|let {a:vt}netrw_acdkeep = &l:acd|endif
let {a:vt}netrw_aikeep = &l:ai
@@ -411,6 +529,7 @@ fun! s:NetrwOptionSave(vt)
endif
" save a few selected netrw-related variables
+" call Decho("saving a few selected netrw-related variables")
if g:netrw_keepdir
let {a:vt}netrw_dirkeep = getcwd()
endif
@@ -420,22 +539,24 @@ fun! s:NetrwOptionSave(vt)
if &go =~# 'a' | sil! let {a:vt}netrw_regstar = @* | endif
sil! let {a:vt}netrw_regslash= @/
-" call Dret("s:NetrwOptionSave : win#".winnr()." buf#".bufnr("%"))
+" call Dret("s:NetrwOptionSave : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
endfun
" ------------------------------------------------------------------------
" s:NetrwOptionRestore: restore options {{{2
fun! s:NetrwOptionRestore(vt)
-" call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")." winnr($)=".winnr("$"))
+" call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$"))
if !exists("{a:vt}netrw_optionsave")
if exists("s:nbcd_curpos_{bufnr('%')}")
-" call Decho("restoring previous position")
+" call Decho("(NetrwOptionRestore) restoring previous position (s:nbcd_curpos_".bufnr('%')." exists)")
keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
-" unlet s:nbcd_curpos_{bufnr('%')}
+" call Decho("(NetrwOptionRestore) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$"))
+" call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%'))
+ unlet s:nbcd_curpos_{bufnr('%')}
else
-" call Decho("no previous position")
+" call Decho("(NetrwOptionRestore) no previous position")
endif
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+" call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist")
return
endif
@@ -443,7 +564,7 @@ fun! s:NetrwOptionRestore(vt)
if exists("&acd")
if exists("{a:vt}netrw_acdkeep")
-" call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+" call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
let curdir = getcwd()
let &l:acd = {a:vt}netrw_acdkeep
unlet {a:vt}netrw_acdkeep
@@ -515,18 +636,19 @@ fun! s:NetrwOptionRestore(vt)
if exists("{a:vt}netrw_regstar") |sil! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif
if exists("{a:vt}netrw_regslash")|sil! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif
if exists("s:nbcd_curpos_{bufnr('%')}")
-" call Decho("restoring previous position")
+" call Decho("(NetrwOptionRestore) restoring previous position (s:nbcd_curpos_".bufnr('%')." exists)")
keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
-" unlet s:nbcd_curpos_{bufnr('%')}
+" call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%'))
+ unlet s:nbcd_curpos_{bufnr('%')}
else
" call Decho("no previous position")
endif
-" call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
-" call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-" call Decho("diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist"))
-" call Dret("s:NetrwOptionRestore : win#".winnr()." buf#".bufnr("%"))
+" call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+" call Decho("(NetrwOptionRestore) fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
+" call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+" call Decho("(NetrwOptionRestore) diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist"))
+" call Dret("s:NetrwOptionRestore : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
endfun
" ---------------------------------------------------------------------
@@ -542,7 +664,8 @@ fun! s:NetrwSafeOptions()
setlocal nocin
setlocal cino=
setlocal com=
- setlocal cpo-=aA
+ setlocal cpo-=a
+ setlocal cpo-=A
setlocal fo=nroql2
setlocal nohid
setlocal noim
@@ -834,14 +957,18 @@ fun! netrw#NetRead(mode,...)
" call Decho("filter input: ".getline('.'))
endif
- if exists("g:netrw_ftp") && g:netrw_ftp == 1
- keepj put =g:netrw_uid
-" call Decho("filter input: ".getline('.'))
- keepj put ='\"'.s:netrw_passwd.'\"'
-" call Decho("filter input: ".getline('.'))
- else
- keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-" call Decho("filter input: ".getline('.'))
+ if exists("g:netrw_uid" && g:netrw_uid != ""
+ if exists("g:netrw_ftp") && g:netrw_ftp == 1
+ keepj put =g:netrw_uid
+" call Decho("filter input: ".getline('.'))
+ if exists("s:netrw_passwd")
+ keepj put ='\"'.s:netrw_passwd.'\"'
+ endif
+" call Decho("filter input: ".getline('.'))
+ elseif exists("s:netrw_passwd")
+ keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+" call Decho("filter input: ".getline('.'))
+ endif
endif
if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
@@ -860,8 +987,8 @@ fun! netrw#NetRead(mode,...)
" -n unix : DON'T use <.netrc>, even though it exists
" -n win32: quit being obnoxious about password
keepj norm! 1Gdd
-" call Decho("executing: %!".s:netrw_ftp_cmd." -i -n")
- exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i -n"
+" call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+ exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
" If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
if getline(1) !~ "^$"
" call Decho("error<".getline(1).">")
@@ -925,7 +1052,8 @@ fun! netrw#NetRead(mode,...)
exe 'keepj norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
endif
let b:netrw_lastfile = choice
- setlocal ro
+" call Decho("(NetRead) setl ro")
+ setl ro
".........................................
" NetRead: (dav) NetRead Method #6 {{{3
@@ -950,7 +1078,9 @@ fun! netrw#NetRead(mode,...)
else
keepj put ='open '.g:netrw_machine
endif
- keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
+ if exists("g:netrw_uid") && exists("s:netrw_passwd") && g:netrw_uid != ""
+ keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
+ endif
keepj put ='get '.netrw_fname.' '.tmpfile
keepj put ='quit'
@@ -982,6 +1112,7 @@ fun! netrw#NetRead(mode,...)
keepj call netrw#ErrorMsg(s:ERROR,"fetch command not available",7)
endif
" call Dret("NetRead")
+ return
endif
if exists("g:netrw_option") && g:netrw_option == ":https\="
let netrw_option= "http"
@@ -1000,7 +1131,8 @@ fun! netrw#NetRead(mode,...)
let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
let b:netrw_lastfile = choice
- setlocal ro
+" call Decho("(NetRead) setl ro")
+ setl ro
".........................................
" NetRead: (sftp) NetRead Method #9 {{{3
@@ -1241,14 +1373,18 @@ fun! netrw#NetWrite(...) range
keepj put ='open '.g:netrw_machine
" call Decho("filter input: ".getline('.'))
endif
- if exists("g:netrw_ftp") && g:netrw_ftp == 1
- keepj put =g:netrw_uid
-" call Decho("filter input: ".getline('.'))
- keepj put ='\"'.s:netrw_passwd.'\"'
-" call Decho("filter input: ".getline('.'))
- else
- keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-" call Decho("filter input: ".getline('.'))
+ if exists("g:netrw_uid") && g:netrw_uid != ""
+ if exists("g:netrw_ftp") && g:netrw_ftp == 1
+ keepj put =g:netrw_uid
+" call Decho("filter input: ".getline('.'))
+ if exists("s:netrw_passwd") && s:netrw_passwd != ""
+ keepj put ='\"'.s:netrw_passwd.'\"'
+ endif
+" call Decho("filter input: ".getline('.'))
+ elseif exists("s:netrw_passwd") && s:netrw_passwd != ""
+ keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+" call Decho("filter input: ".getline('.'))
+ endif
endif
keepj put =g:netrw_ftpmode
" call Decho("filter input: ".getline('$'))
@@ -1266,8 +1402,8 @@ fun! netrw#NetWrite(...) range
" -n unix : DON'T use <.netrc>, even though it exists
" -n win32: quit being obnoxious about password
keepj norm! 1Gdd
-" call Decho("executing: %!".s:netrw_ftp_cmd." -i -n")
- exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i -n"
+" call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+ exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
" If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
if getline(1) !~ "^$"
if !exists("g:netrw_quiet")
@@ -1323,7 +1459,7 @@ fun! netrw#NetWrite(...) range
else
keepj put ='open '.g:netrw_machine
endif
- if exists("g:netrw_uid") && exists("s:netrw_passwd")
+ if exists("g:netrw_uid") && exists("s:netrw_passwd") && g:netrw_uid != ""
keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
endif
keepj put ='put '.tmpfile.' '.netrw_fname
@@ -1396,9 +1532,12 @@ fun! netrw#NetWrite(...) range
if a:firstline == 1 && a:lastline == line("$")
" restore modifiability; usually equivalent to set nomod
let &mod= mod
+" call Decho("(NetWrite) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
elseif !exists("leavemod")
" indicate that the buffer has not been modified since last written
+" call Decho("(NetWrite) set nomod")
set nomod
+" call Decho("(NetWrite) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
endif
" call Dret("netrw#NetWrite")
@@ -1454,7 +1593,7 @@ fun! s:NetrwGetFile(readcmd, tfile, method)
" readcmd=='t': simply do nothing
if a:readcmd == 't'
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+" call Decho("(NetrwGetFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" call Dret("NetrwGetFile : skip read of <".a:tfile.">")
return
endif
@@ -1508,7 +1647,15 @@ fun! s:NetrwGetFile(readcmd, tfile, method)
" rename buffer back to remote filename
" call Decho("exe sil! keepalt file ".fnameescape(rfile))
exe "sil! keepj keepalt file ".fnameescape(rfile)
+
+ " detect filetype of local version of remote file
+ " Note that isk must not include a "/" for scripts.vim
+ " to process this detection correctly.
+" call Decho("detect filetype of local version of remote file")
+ let iskkeep= &isk
+ set isk-=/
filetype detect
+ let &isk= iskkeep
" call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
let line1 = 1
let line2 = line("$")
@@ -1525,7 +1672,7 @@ fun! s:NetrwGetFile(readcmd, tfile, method)
else
" not readable
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+" call Decho("(NetrwGetFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" call Decho("tfile<".a:tfile."> not readable")
keepj call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9)
" call Dret("NetrwGetFile : tfile<".a:tfile."> not readable")
@@ -1550,7 +1697,7 @@ fun! s:NetrwGetFile(readcmd, tfile, method)
" make sure file is being displayed
" redraw!
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+" call Decho("(NetrwGetFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" call Dret("NetrwGetFile")
endfun
@@ -1690,8 +1837,11 @@ fun! s:NetrwMethod(choice)
if userid != ""
let g:netrw_uid= userid
endif
+
if curmachine != g:netrw_machine
- if exists("s:netrw_passwd")
+ if exists("s:netwr_hup[".g:netrw_machine."]")
+ call NetUserPass("ftp:".g:netrw_machine)
+ elseif exists("s:netrw_passwd")
" if there's a change in hostname, require password re-entry
unlet s:netrw_passwd
endif
@@ -1699,10 +1849,15 @@ fun! s:NetrwMethod(choice)
unlet netrw_port
endif
endif
+
if exists("g:netrw_uid") && exists("s:netrw_passwd")
let b:netrw_method = 3
else
- if (has("win32") || has("win95") || has("win64") || has("win16")) && s:netrw_ftp_cmd =~ '-[sS]:'
+ let host= substitute(g:netrw_machine,'\..*$','','')
+ if exists("s:netrw_hup[host]")
+ call NetUserPass("ftp:".host)
+
+ elseif (has("win32") || has("win95") || has("win64") || has("win16")) && s:netrw_ftp_cmd =~ '-[sS]:'
" call Decho("has -s: : s:netrw_ftp_cmd<".s:netrw_ftp_cmd.">")
" call Decho(" g:netrw_ftp_cmd<".g:netrw_ftp_cmd.">")
if g:netrw_ftp_cmd =~ '-[sS]:\S*MACHINE\>'
@@ -1742,6 +1897,7 @@ fun! s:NetrwMethod(choice)
let g:netrw_uid = substitute(a:choice,mipf,'\2',"")
let s:netrw_passwd = substitute(a:choice,mipf,'\3',"")
let b:netrw_fname = substitute(a:choice,mipf,'\4',"")
+ call NetUserPass(g:netrw_machine,g:netrw_uid,s:netrw_passwd)
" Method#3: Issue an ftp: "hostname [path/]filename" {{{3
elseif match(a:choice,mf) == 0
@@ -1844,33 +2000,89 @@ endif
" ---------------------------------------------------------------------
" NetUserPass: set username and password for subsequent ftp transfer {{{2
-" Usage: :call NetUserPass() -- will prompt for userid and password
-" :call NetUserPass("uid") -- will prompt for password
-" :call NetUserPass("uid","password") -- sets global userid and password
+" Usage: :call NetUserPass() -- will prompt for userid and password
+" :call NetUserPass("uid") -- will prompt for password
+" :call NetUserPass("uid","password") -- sets global userid and password
+" :call NetUserPass("ftp:host") -- looks up userid and password using hup dictionary
+" :call NetUserPass("host","uid","password") -- sets hup dictionary with host, userid, password
fun! NetUserPass(...)
- " get/set userid
+" call Dfunc("NetUserPass() a:0=".a:0)
+
+ if !exists('s:netrw_hup')
+ let s:netrw_hup= {}
+ endif
+
if a:0 == 0
-" call Dfunc("NetUserPass(a:0<".a:0.">)")
if !exists("g:netrw_uid") || g:netrw_uid == ""
- " via prompt
+ " get uid via prompt
let g:netrw_uid= input('Enter username: ')
endif
- else " from command line
-" call Dfunc("NetUserPass(a:1<".a:1.">)")
- let g:netrw_uid= a:1
- endif
-
- " get password
- if a:0 <= 1 " via prompt
-" call Decho("a:0=".a:0." case <=1:")
+ " get password via prompt
let s:netrw_passwd= inputsecret("Enter Password: ")
- else " from command line
-" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
- let s:netrw_passwd=a:2
+
+ " set up hup database
+ let host = substitute(g:netrw_machine,'\..*$','','')
+ if !exists('s:netrw_hup[host]')
+ let s:netrw_hup[host]= {}
+ endif
+ let s:netrw_hup[host].uid = g:netrw_uid
+ let s:netrw_hup[host].passwd = s:netrw_passwd
+
+ elseif a:0 == 1
+
+ if a:1 =~ '^ftp:'
+ " access userid and password from hup (host-user-passwd) dictionary
+ let host = substitute(a:1,'^ftp:','','')
+ let host = substitute(host,'\..*','','')
+ if exists("s:netrw_hup[host]")
+ let g:netrw_uid = s:netrw_hup[host].uid
+ let s:netrw_passwd = s:netrw_hup[host].passwd
+" call Decho("get s:netrw_hup[".host."].uid <".s:netrw_hup[host].uid.">")
+" call Decho("get s:netrw_hup[".host."].passwd<".s:netrw_hup[host].passwd.">")
+ else
+ let g:netrw_uid = input("Enter UserId: ")
+ let s:netrw_passwd = inputsecret("Enter Password: ")
+ endif
+ else
+ " set userid, prompt for password
+" call Decho("set g:netrw_uid= <".a:1.">")
+ if exists("g:netrw_machine")
+ let host= substitute(g:netrw_machine,'\..*$','','')
+ endif
+ let g:netrw_uid = a:1
+ let s:netrw_passwd = inputsecret("Enter Password: ")
+ endif
+
+" call Decho("host<".host.">")
+ if exists("host")
+ if !exists('s:netrw_hup[host]')
+ let s:netrw_hup[host]= {}
+ endif
+ let s:netrw_hup[host].uid = g:netrw_uid
+ let s:netrw_hup[host].passwd = s:netrw_passwd
+ endif
+
+ elseif a:0 == 2
+ let g:netrw_uid = a:1
+ let s:netrw_passwd = a:2
+
+ elseif a:0 == 3
+ " enter hostname, user-id, and password into the hup dictionary
+ let host = substitute(a:1,'^\a\+:','','')
+ let host = substitute(host,'\..*$','','')
+ if !exists('s:netrw_hup[host]')
+ let s:netrw_hup[host]= {}
+ endif
+ let s:netrw_hup[host].uid = a:2
+ let s:netrw_hup[host].passwd = a:3
+ let g:netrw_uid = s:netrw_hup[host].uid
+ let s:netrw_passwd = s:netrw_hup[host].passwd
+" call Decho("set s:netrw_hup[".host."].uid <".s:netrw_hup[host].uid.">")
+" call Decho("set s:netrw_hup[".host."].passwd<".s:netrw_hup[host].passwd.">")
endif
-" call Dret("NetUserPass")
+" call Dret("NetUserPass : uid<".g:netrw_uid."> passwd<".s:netrw_passwd.">")
endfun
" ===========================================
@@ -1884,7 +2096,7 @@ fun! s:NetrwMaps(islocal)
" set up Rexplore and [ 2-leftmouse-click -or- c-leftmouse ]
" call Decho("set up Rexplore command")
- com! Rexplore call s:NetrwRexplore(w:netrw_rexlocal,exists("w:netrw_rexdir")? w:netrw_rexdir : ".")
+ com! Rexplore if exists("w:netrw_rexlocal")|call s:NetrwRexplore(w:netrw_rexlocal,exists("w:netrw_rexdir")? w:netrw_rexdir : ".")|else|call netrw#ErrorMsg(s:WARNING,"not a former netrw window",79)|endif
if g:netrw_mousemaps && g:netrw_retmap
" call Decho("set up Rexplore 2-leftmouse")
if !hasmapto("<Plug>NetrwReturn")
@@ -2309,11 +2521,12 @@ fun! s:NetrwBookHistHandler(chg,curdir)
if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
" call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
- setlocal ma noro
-" call Decho("setlocal ma noro")
+ setl ma noro
+" call Decho("(NetrwBookHistHandler) setl ma noro")
sil! keepj %d
- setlocal nomod
-" call Decho("setlocal nomod")
+ setl nomod
+" call Decho("(NetrwBookHistHandler) setl nomod")
+" call Decho("(NetrwBookHistHandler) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
endif
" " call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
@@ -2334,12 +2547,13 @@ fun! s:NetrwBookHistHandler(chg,curdir)
if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
" call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
- setlocal ma noro
-" call Decho("setlocal ma noro")
+" call Decho("(NetrwBookHistHandler) setl ma noro")
+ setl ma noro
sil! keepj %d
-" call Decho("removed all lines from buffer (%d)")
- setlocal nomod
-" call Decho("setlocal nomod")
+" call Decho("removed all lines from buffer (%d)")
+" call Decho("(NetrwBookHistHandler) setl nomod")
+ setl nomod
+" call Decho("(set nomod) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
endif
" call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
@@ -2409,7 +2623,7 @@ fun! s:NetrwBookHistSave()
let savefile= s:NetrwHome()."/.netrwhist"
1split
call s:NetrwEnew()
- setlocal cino= com= cpo-=aA fo=nroql2 tw=0 report=10000 noswf
+ setlocal cino= com= cpo-=a cpo-=A fo=nroql2 tw=0 report=10000 noswf
setlocal nocin noai noci magic nospell nohid wig= noaw
setlocal ma noro write
if exists("&acd") | setlocal noacd | endif
@@ -2463,7 +2677,7 @@ endfun
fun! s:NetrwBrowse(islocal,dirname)
if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
" call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr())
-" call Decho("tab#".tabpagenr()." win#".winnr())
+" call Decho("tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
" call Dredir("ls!")
if !exists("s:netrw_initbookhist")
keepj call s:NetrwBookHistRead()
@@ -2478,7 +2692,7 @@ fun! s:NetrwBrowse(islocal,dirname)
if exists("s:netrw_skipbrowse")
unlet s:netrw_skipbrowse
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
return
endif
@@ -2539,9 +2753,10 @@ fun! s:NetrwBrowse(islocal,dirname)
" save certain window-oriented variables into buffer-oriented variables {{{3
call s:SetBufWinVars()
call s:NetrwOptionRestore("w:")
- setlocal ma nomod
+" call Decho("setl ma nomod")
+ setl ma nomod
+" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
" call Dret("s:NetrwBrowse : file<".s:fname.">")
return
endif
@@ -2570,8 +2785,9 @@ fun! s:NetrwBrowse(islocal,dirname)
endif
if reusing
call s:NetrwOptionRestore("w:")
- setlocal noma nomod nowrap
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+" call Decho("(NetrwBrowse) setl noma nomod nowrap")
+ setl noma nomod nowrap
+" call Decho("(set noma nomod nowrap) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" call Dret("s:NetrwBrowse : re-using buffer")
return
endif
@@ -2620,9 +2836,10 @@ fun! s:NetrwBrowse(islocal,dirname)
let b:netrw_curdir= w:netrw_prvdir
else
call s:NetrwOptionRestore("w:")
- setlocal noma nomod nowrap
+" call Decho("(NetrwBrowse) setl noma nomod nowrap")
+ setl noma nomod nowrap
+" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
let b:netrw_curdir= dirname
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
" call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">")
return
endif
@@ -2659,8 +2876,9 @@ fun! s:NetrwBrowse(islocal,dirname)
keepj call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20)
endif
keepj call s:NetrwOptionRestore("w:")
- setlocal noma nomod nowrap
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+" call Decho("(NetrwBrowse) setl noma nomod nowrap")
+ setl noma nomod nowrap
+" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">")
return
endif
@@ -2688,7 +2906,7 @@ fun! s:NetrwBrowse(islocal,dirname)
" and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008
let s:locbrowseshellcmd= 1
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" call Dret("s:NetrwBrowse : did PerformListing ft<".&ft.">")
return
endfun
@@ -2909,7 +3127,7 @@ fun! s:NetrwGetBuffer(islocal,dirname)
" call Decho(" clear buffer<".expand("%")."> with :%d")
sil! keepalt keepj %d
-" call Dret("s:NetrwGetBuffer 0 : buf#".bufnr("%"))
+" call Dret("s:NetrwGetBuffer 0 : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
return 0
endfun
@@ -3105,10 +3323,12 @@ fun! s:NetrwListStyle(islocal)
" call Decho("clear buffer<".expand("%")."> with :%d")
sil! keepj %d
" following prevents tree listing buffer from being marked "modified"
- setlocal nomod
+" call Decho("(NetrwListStyle) setl nomod")
+ setl nomod
+" call Decho("(NetrwListStyle) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" refresh the listing
-" call Decho("refresh the listing")
+" call Decho("(NetrwListStyle) refresh the listing")
let svpos= netrw#NetrwSavePosn()
keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
keepj call netrw#NetrwRestorePosn(svpos)
@@ -3224,7 +3444,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
" Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called
" and the current window is the NetrwMessage window.
" call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!")
-" call Decho("getcwd<".getcwd().">")
+" call Decho("(NetrwBrowseChgDir) getcwd<".getcwd().">")
" call Dredir("ls!")
" call Dret("s:NetrwBrowseChgDir")
return
@@ -3234,6 +3454,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
keepj call s:NetrwSafeOptions()
let nbcd_curpos = netrw#NetrwSavePosn()
let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos
+" call Decho("(NetrwBrowseChgDir) setting s:nbcd_curpos_".bufnr('%')." to SavePosn")
if (has("win32") || has("win95") || has("win64") || has("win16"))
let dirname = substitute(b:netrw_curdir,'\\','/','ge')
else
@@ -3248,7 +3469,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
else
let dirpat= '[\/]$'
endif
-" call Decho("dirname<".dirname."> dirpat<".dirpat.">")
+" call Decho("(NetrwBrowseChgDir) dirname<".dirname."> dirpat<".dirpat.">")
if dirname !~ dirpat
" apparently vim is "recognizing" that it is in a directory and
@@ -3261,7 +3482,12 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
" ------------
" edit a file:
" ------------
-" call Decho('case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
+" call Decho('(NetrwBrowseChgDir) case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
+
+ " save position for benefit of Rexplore
+ let s:rexposn_{bufnr("%")}= netrw#NetrwSavePosn()
+
+" call Decho("(NetrwBrowseChgDir) setting s:rexposn_".bufnr("%")." to SavePosn")
if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
let dirname= s:NetrwTreeDir()
if dirname =~ '/$'
@@ -3269,17 +3495,17 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
else
let dirname= s:NetrwTreeDir()."/".newdir
endif
-" call Decho("dirname<".dirname.">")
-" call Decho("tree listing")
+" call Decho("(NetrwBrowseChgDir) dirname<".dirname.">")
+" call Decho("(NetrwBrowseChgDir) tree listing")
elseif newdir =~ '^\(/\|\a:\)'
let dirname= newdir
else
let dirname= s:ComposePath(dirname,newdir)
endif
-" call Decho("handling a file: dirname<".dirname."> (a:0=".a:0.")")
+" call Decho("(NetrwBrowseChgDir) handling a file: dirname<".dirname."> (a:0=".a:0.")")
" this lets NetrwBrowseX avoid the edit
if a:0 < 1
-" call Decho("set up windows for editing<".fnameescape(dirname)."> didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
+" call Decho("(NetrwBrowseChgDir) set up windows for editing<".fnameescape(dirname)."> didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
keepj call s:NetrwOptionRestore("s:")
if !exists("s:didsplit")
if g:netrw_browse_split == 1
@@ -3301,7 +3527,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
endif
else
" handling a file, didn't split, so remove menu
-" call Decho("handling a file+didn't split, so remove menu")
+" call Decho("(NetrwBrowseChgDir) handling a file+didn't split, so remove menu")
call s:NetrwMenu(0)
" optional change to window
if g:netrw_chgwin >= 1
@@ -3313,10 +3539,10 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
" the point where netrw actually edits the (local) file
" if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will
if a:islocal
-" call Decho("edit local file: exe e! ".fnameescape(dirname))
+" call Decho("(NetrwBrowseChgDir) edit local file: exe e! ".fnameescape(dirname))
exe "e! ".fnameescape(dirname)
else
-" call Decho("remote file: NetrwBrowse will edit it")
+" call Decho("(NetrwBrowseChgDir) remote file: NetrwBrowse will edit it")
endif
let dolockout= 1
@@ -3325,12 +3551,12 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
" or as a list of function references. It will ignore anything that's not
" a function reference. See :help Funcref for information about function references.
if exists("g:Netrw_funcref")
-" call Decho("handle optional Funcrefs")
+" call Decho("(NetrwBrowseChgDir) handle optional Funcrefs")
if type(g:Netrw_funcref) == 2
-" call Decho("handling a g:Netrw_funcref")
+" call Decho("(NetrwBrowseChgDir) handling a g:Netrw_funcref")
keepj call g:Netrw_funcref()
elseif type(g:Netrw_funcref) == 3
-" call Decho("handling a list of g:Netrw_funcrefs")
+" call Decho("(NetrwBrowseChgDir) handling a list of g:Netrw_funcrefs")
for Fncref in g:Netrw_funcref
if type(FncRef) == 2
keepj call FncRef()
@@ -3344,7 +3570,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
" ---------------------------------
" just go to the new directory spec
" ---------------------------------
-" call Decho('case "just go to new directory spec": newdir<'.newdir.'>')
+" call Decho('(NetrwBrowseChgDir) case "just go to new directory spec": newdir<'.newdir.'>')
let dirname= newdir
keepj call s:SetRexDir(a:islocal,dirname)
keepj call s:NetrwOptionRestore("s:")
@@ -3353,37 +3579,37 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
" --------------------------
" refresh the directory list
" --------------------------
-" call Decho('case "refresh directory listing": newdir == "./"')
+" call Decho('(NetrwBrowseChgDir) case "refresh directory listing": newdir == "./"')
keepj call s:SetRexDir(a:islocal,dirname)
elseif newdir == '../'
" -------------------
" go up one directory
" -------------------
-" call Decho('case "go up one directory": newdir == "../"')
+" call Decho('(NetrwBrowseChgDir) case "go up one directory": newdir == "../"')
if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
" force a refresh
-" call Decho("clear buffer<".expand("%")."> with :%d")
- setlocal noro ma
-" call Decho("setlocal noro ma")
+" call Decho("(NetrwBrowseChgDir) clear buffer<".expand("%")."> with :%d")
+" call Decho("(NetrwBrowseChgDir) setl noro ma")
+ setl noro ma
keepj %d
endif
if has("amiga")
" amiga
-" call Decho('case "go up one directory": newdir == "../" and amiga')
+" call Decho('(NetrwBrowseChgDir) case "go up one directory": newdir == "../" and amiga')
if a:islocal
let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','')
let dirname= substitute(dirname,'/$','','')
else
let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','')
endif
-" call Decho("amiga: dirname<".dirname."> (go up one dir)")
+" call Decho("(NetrwBrowseChgDir) amiga: dirname<".dirname."> (go up one dir)")
else
" unix or cygwin
-" call Decho('case "go up one directory": newdir == "../" and unix or cygwin')
+" call Decho('(NetrwBrowseChgDir) case "go up one directory": newdir == "../" and unix or cygwin')
if a:islocal
let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','')
if dirname == ""
@@ -3392,40 +3618,40 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
else
let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','')
endif
-" call Decho("unix: dirname<".dirname."> (go up one dir)")
+" call Decho("(NetrwBrowseChgDir) unix: dirname<".dirname."> (go up one dir)")
endif
keepj call s:SetRexDir(a:islocal,dirname)
elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
-" call Decho('case liststyle is TREELIST and w:netrw_treedict exists')
+" call Decho('(NetrwBrowseChgDir) case liststyle is TREELIST and w:netrw_treedict exists')
" force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh)
- setlocal noro ma
-" call Decho("setlocal noro ma")
+" call Decho("(NetrwBrowseChgDir) setl noro ma")
+ setl noro ma
if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
-" call Decho("clear buffer<".expand("%")."> with :%d")
+" call Decho("(NetrwBrowseChgDir) clear buffer<".expand("%")."> with :%d")
keepj %d
endif
let treedir = s:NetrwTreeDir()
let s:treecurpos = nbcd_curpos
let haskey= 0
-" call Decho("w:netrw_treedict<".string(w:netrw_treedict).">")
+" call Decho("(NetrwBrowseChgDir) w:netrw_treedict<".string(w:netrw_treedict).">")
" search treedict for tree dir as-is
if has_key(w:netrw_treedict,treedir)
-" call Decho('....searched for treedir<'.treedir.'> : found it!')
+" call Decho('(NetrwBrowseChgDir) ....searched for treedir<'.treedir.'> : found it!')
let haskey= 1
else
-" call Decho('....searched for treedir<'.treedir.'> : not found')
+" call Decho('(NetrwBrowseChgDir) ....searched for treedir<'.treedir.'> : not found')
endif
" search treedict for treedir with a / appended
if !haskey && treedir !~ '/$'
if has_key(w:netrw_treedict,treedir."/")
let treedir= treedir."/"
-" call Decho('....searched.for treedir<'.treedir.'> found it!')
+" call Decho('(NetrwBrowseChgDir) ....searched.for treedir<'.treedir.'> found it!')
let haskey = 1
else
-" call Decho('....searched for treedir<'.treedir.'/> : not found')
+" call Decho('(NetrwBrowseChgDir) ....searched for treedir<'.treedir.'/> : not found')
endif
endif
@@ -3433,24 +3659,24 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
if !haskey && treedir =~ '/$'
let treedir= substitute(treedir,'/$','','')
if has_key(w:netrw_treedict,treedir)
-" call Decho('....searched.for treedir<'.treedir.'> found it!')
+" call Decho('(NetrwBrowseChgDir) ....searched.for treedir<'.treedir.'> found it!')
let haskey = 1
else
-" call Decho('....searched for treedir<'.treedir.'> : not found')
+" call Decho('(NetrwBrowseChgDir) ....searched for treedir<'.treedir.'> : not found')
endif
endif
if haskey
" close tree listing for selected subdirectory
-" call Decho("closing selected subdirectory<".dirname.">")
+" call Decho("(NetrwBrowseChgDir) closing selected subdirectory<".dirname.">")
call remove(w:netrw_treedict,treedir)
-" call Decho("removed entry<".treedir."> from treedict")
-" call Decho("yielding treedict<".string(w:netrw_treedict).">")
+" call Decho("(NetrwBrowseChgDir) removed entry<".treedir."> from treedict")
+" call Decho("(NetrwBrowseChgDir) yielding treedict<".string(w:netrw_treedict).">")
let dirname= w:netrw_treetop
else
" go down one directory
let dirname= substitute(treedir,'/*$','/','')
-" call Decho("go down one dir: treedir<".treedir.">")
+" call Decho("(NetrwBrowseChgDir) go down one dir: treedir<".treedir.">")
endif
keepj call s:SetRexDir(a:islocal,dirname)
let s:treeforceredraw = 1
@@ -3458,21 +3684,24 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...)
else
" go down one directory
let dirname= s:ComposePath(dirname,newdir)
-" call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
+" call Decho("(NetrwBrowseChgDir) go down one dir: dirname<".dirname."> newdir<".newdir.">")
keepj call s:SetRexDir(a:islocal,dirname)
endif
keepj call s:NetrwOptionRestore("s:")
if dolockout
-" call Decho("filewritable(dirname<".dirname.">)=".filewritable(dirname))
+" call Decho("(NetrwBrowseChgDir) filewritable(dirname<".dirname.">)=".filewritable(dirname))
if filewritable(dirname)
-" call Decho("doing modification lockout settings: ma nomod noro")
- setlocal ma nomod noro
+" call Decho("(NetrwBrowseChgDir) doing modification lockout settings: ma nomod noro")
+" call Decho("(NetrwBrowseChgDir) setl ma nomod noro")
+ setl ma nomod noro
+" call Decho("(NetrwBrowseChgDir) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
else
-" call Decho("doing modification lockout settings: ma nomod ro")
- setlocal ma nomod ro
+" call Decho("(NetrwBrowseChgDir) doing modification lockout settings: ma nomod ro")
+" call Decho("(NetrwBrowseChgDir) setl ma nomod noro")
+ setl ma nomod ro
+" call Decho("(NetrwBrowseChgDir) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
endif
-" call Decho("setlocal ma nomod noro")
endif
" call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">")
@@ -3726,7 +3955,7 @@ endfun
" == 4: Vexplore style == 5: Vexplore!
" == 6: Texplore
fun! netrw#Explore(indx,dosplit,style,...)
-" call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." a:0=".a:0)
+" call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." modifiable=".&modifiable." a:0=".a:0." win#".winnr()." buf#".bufnr("%"))
if !exists("b:netrw_curdir")
let b:netrw_curdir= getcwd()
" call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
@@ -3890,6 +4119,7 @@ fun! netrw#Explore(indx,dosplit,style,...)
if dirname == ""|let dirname= getcwd()|endif
" call Decho("..calling LocalBrowseCheck(dirname<".dirname.">)")
call netrw#LocalBrowseCheck(dirname)
+" call Decho("win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
endif
" call Decho("curdir<".curdir.">")
@@ -4491,8 +4721,8 @@ fun! s:NetrwMakeDir(usrhost)
let netrw_origdir= s:NetrwGetcwd(1)
exe 'keepj lcd '.fnameescape(b:netrw_curdir)
" call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">")
-" call Decho("exe sil! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1))
- exe "sil! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1)
+" call Decho("exe sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1))
+ exe "sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)
if !g:netrw_keepdir
exe 'keepj lcd '.fnameescape(netrw_origdir)
" call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">")
@@ -4766,7 +4996,7 @@ fun! s:NetrwMarkFileCopy(islocal)
if exists("*mkdir")
call mkdir(tmpdir)
else
- exe "sil! !".g:netrw_local_mkdir.' '.shellescape(tmpdir,1)
+ exe "sil! !".g:netrw_localmkdir.' '.shellescape(tmpdir,1)
endif
if isdirectory(tmpdir)
exe "keepj lcd ".fnameescape(tmpdir)
@@ -4778,7 +5008,7 @@ fun! s:NetrwMarkFileCopy(islocal)
keepj call s:NetrwDelete(fname)
endfor
exe "keepj lcd ".fnameescape(curdir)
- exe "sil !".g:netrw_local_rmdir." ".shellescape(tmpdir,1)
+ exe "sil !".g:netrw_localrmdir." ".shellescape(tmpdir,1)
else
exe "keepj lcd ".fnameescape(curdir)
endif
@@ -5659,6 +5889,7 @@ fun! s:NetrwMenu(domenu)
endif
endif
" call Dret("NetrwMenu")
+ return
endif
endfun
@@ -5812,14 +6043,18 @@ fun! netrw#NetrwObtain(islocal,fname,...)
" call Decho("filter input: ".getline('$'))
endif
- if exists("g:netrw_ftp") && g:netrw_ftp == 1
- keepj put =g:netrw_uid
-" call Decho("filter input: ".getline('$'))
- keepj put ='\"'.s:netrw_passwd.'\"'
-" call Decho("filter input: ".getline('$'))
- else
- keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-" call Decho("filter input: ".getline('$'))
+ if exists("g:netrw_uid") && g:netrw_uid != ""
+ if exists("g:netrw_ftp") && g:netrw_ftp == 1
+ keepj put =g:netrw_uid
+" call Decho("filter input: ".getline('$'))
+ if exists("s:netrw_passwd") && s:netrw_passwd != ""
+ keepj put ='\"'.s:netrw_passwd.'\"'
+ endif
+" call Decho("filter input: ".getline('$'))
+ elseif exists("s:netrw_passwd")
+ keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+" call Decho("filter input: ".getline('$'))
+ endif
endif
if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
@@ -5851,8 +6086,8 @@ fun! netrw#NetrwObtain(islocal,fname,...)
" -n unix : DON'T use <.netrc>, even though it exists
" -n win32: quit being obnoxious about password
keepj norm! 1Gdd
-" call Decho("executing: %!".s:netrw_ftp_cmd." -i -n")
- exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i -n"
+" call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+ exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
" If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
if getline(1) !~ "^$"
" call Decho("error<".getline(1).">")
@@ -5959,7 +6194,9 @@ fun! s:NetrwPrevWinOpen(islocal)
elseif choice == 2
" No -- don't worry about changed file, just browse anyway
- setlocal nomod
+" call Decho("(NetrwPrevWinOpen) setl nomod")
+ setl nomod
+" call Decho("(NetrwPrevWinOpen) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
keepj call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31)
wincmd p
@@ -6112,14 +6349,18 @@ fun! s:NetrwUpload(fname,tgt,...)
" call Decho("filter input: ".getline('$'))
endif
- if exists("g:netrw_ftp") && g:netrw_ftp == 1
- keepj put =g:netrw_uid
-" call Decho("filter input: ".getline('$'))
- keepj call setline(line("$")+1,'"'.s:netrw_passwd.'"')
-" call Decho("filter input: ".getline('$'))
- else
- keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-" call Decho("filter input: ".getline('$'))
+ if exists("g:netrw_uid") && g:netrw_uid != ""
+ if exists("g:netrw_ftp") && g:netrw_ftp == 1
+ keepj put =g:netrw_uid
+" call Decho("filter input: ".getline('$'))
+ if exists("s:netrw_passwd")
+ keepj call setline(line("$")+1,'"'.s:netrw_passwd.'"')
+ endif
+" call Decho("filter input: ".getline('$'))
+ elseif exists("s:netrw_passwd")
+ keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+" call Decho("filter input: ".getline('$'))
+ endif
endif
keepj call setline(line("$")+1,'lcd "'.fromdir.'"')
@@ -6145,8 +6386,8 @@ fun! s:NetrwUpload(fname,tgt,...)
" -n unix : DON'T use <.netrc>, even though it exists
" -n win32: quit being obnoxious about password
keepj norm! 1Gdd
-" call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i -n")
- exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i -n"
+" call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+ exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
" If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
sil keepj g/Local directory now/d
call histdel("/",-1)
@@ -6621,6 +6862,7 @@ fun! s:NetrwTreeListing(dirname)
keepj call s:NetrwTreeDisplay(w:netrw_treetop,"")
" call Dret("NetrwTreeListing : bufname<".expand("%").">")
+ return
endif
endfun
@@ -6677,8 +6919,11 @@ fun! s:NetrwWideListing()
sil! let @*= keepregstar
exe "sil! keepj ".w:netrw_bannercnt.',$s/\s\+$//e'
keepj call histdel("/",-1)
- setlocal noma nomod ro
+" call Decho("NetrwWideListing) setl noma nomod ro")
+ setl noma nomod ro
+" call Decho("(NetrwWideListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" call Dret("NetrwWideListing")
+ return
endif
endfun
@@ -6804,6 +7049,9 @@ fun! s:PerformListing(islocal)
" call Decho("g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
" manipulate the directory listing (hide, sort) {{{3
+ if !exists("w:netrw_bannercnt")
+ let w:netrw_bannercnt= 0
+ endif
if !g:netrw_banner || line("$") >= w:netrw_bannercnt
" call Decho("manipulate directory listing (hide)")
" call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
@@ -7324,11 +7572,21 @@ fun! s:NetrwRemoteFtpCmd(path,listcmd)
keepj put ='open '.g:netrw_machine
endif
- if exists("g:netrw_ftp") && g:netrw_ftp == 1
- keepj put =g:netrw_uid
- keepj put ='\"'.s:netrw_passwd.'\"'
- else
- keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+ " handle userid and password
+ let host= substitute(g:netrw_machine,'\..*$','','')
+" call Decho("host<".host.">")
+ if exists("s:netrw_hup") && exists("s:netrw_hup[host]")
+ call NetUserPass("ftp:".host)
+ endif
+ if exists("g:netrw_uid") && g:netrw_uid != ""
+ if exists("g:netrw_ftp") && g:netrw_ftp == 1
+ keepj put =g:netrw_uid
+ if exists("s:netrw_passwd") && s:netrw_passwd != ""
+ keepj put ='\"'.s:netrw_passwd.'\"'
+ endif
+ elseif exists("s:netrw_passwd")
+ keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+ endif
endif
if a:path != ""
@@ -7345,8 +7603,8 @@ fun! s:NetrwRemoteFtpCmd(path,listcmd)
" -n unix : DON'T use <.netrc>, even though it exists
" -n win32: quit being obnoxious about password
" exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
-" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i -n")
- exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i -n"
+" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+ exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
".........................................
else
@@ -7493,10 +7751,8 @@ endfun
" s:LocalListing: does the job of "ls" for local directories {{{2
fun! s:LocalListing()
" call Dfunc("s:LocalListing()")
-" call Decho("&ma=".&ma)
-" call Decho("&mod=".&mod)
-" call Decho("&ro=".&ro)
-" call Decho("bufname(%)<".bufname("%").">")
+" call Decho("(LocalListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+" call Decho("(LocalListing) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
" if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">") |else|call Decho("b:netrw_curdir doesn't exist") |endif
" if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif
@@ -7505,51 +7761,51 @@ fun! s:LocalListing()
let dirname = b:netrw_curdir
let dirnamelen = s:Strlen(b:netrw_curdir)
let filelist = glob(s:ComposePath(fnameescape(dirname),"*"))
-" call Decho("glob(dirname<".dirname."/*>)=".filelist)
+" call Decho("(LocalListing) glob(dirname<".dirname."/*>)=".filelist)
if filelist != ""
let filelist= filelist."\n"
endif
let filelist= filelist.glob(s:ComposePath(fnameescape(dirname),".*"))
-" call Decho("glob(dirname<".dirname."/.*>)=".filelist)
+" call Decho("(LocalListing) glob(dirname<".dirname."/.*>)=".filelist)
" Coding choice: either elide ./ if present
" or include ./ if not present
if filelist =~ '[\\/]\.[\\/]\=\(\n\|$\)'
" elide /path/. from glob() entries if present
-" call Decho("elide /path/. from glob entries if present")
+" call Decho("(LocalListing) elide /path/. from glob entries if present")
let filelist = substitute(filelist,'\n','\t','g')
let filelist = substitute(filelist,'^[^\t]\+[/\\]\.\t','','')
let filelist = substitute(filelist,'[^\t]\+[/\\]\.$','','')
let filelist = substitute(filelist,'\t\zs[^\t]\+[/\\]\.\t','','')
let filelist = substitute(filelist,'\t','\n','g')
endif
-" call Decho("filelist<".filelist.">")
+" call Decho("(LocalListing) filelist<".filelist.">")
if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
" include ../ in the glob() entry if its missing
-" call Decho("forcibly tacking on ..")
+" call Decho("(LocalListing) forcibly tacking on ..")
let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"../")
-" call Decho("filelist<".filelist.">")
+" call Decho("(LocalListing) filelist<".filelist.">")
endif
if b:netrw_curdir == '/'
" remove .. from filelist when current directory is root directory
-" call Decho("remove .. from filelist")
+" call Decho("(LocalListing) remove .. from filelist")
let filelist= substitute(filelist,'/\.\.\n','','')
endif
" remove multiple contiguous newlines
let filelist= substitute(filelist,'\n\{2,}','\n','ge')
if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
" change all \s to /s
-" call Decho('change all \s to /s')
+" call Decho('(LocalListing) change all \s to /s')
let filelist= substitute(filelist,'\','/','g')
else
" escape all \s to \\
-" call Decho('escape all \s to \\')
+" call Decho('(LocalListing) escape all \s to \\')
let filelist= substitute(filelist,'\','\\','g')
endif
-" call Decho("(before while) dirname<".dirname.">")
-" call Decho("(before while) dirnamelen<".dirnamelen.">")
-" call Decho("(before while) filelist<".filelist.">")
+" call Decho("(LocalListing) (before while) dirname<".dirname.">")
+" call Decho("(LocalListing) (before while) dirnamelen<".dirnamelen.">")
+" call Decho("(LocalListing) (before while) filelist<".filelist.">")
while filelist != ""
if filelist =~ '\n'
@@ -7560,34 +7816,34 @@ fun! s:LocalListing()
let filelist = ""
endif
" call Decho(" ")
-" call Decho("(while) filelist<".filelist.">")
-" call Decho("(while) filename<".filename.">")
+" call Decho("(LocalListing) (while) filelist<".filelist.">")
+" call Decho("(LocalListing) (while) filename<".filename.">")
if getftype(filename) == "link"
" indicate a symbolic link
-" call Decho("indicate <".filename."> is a symbolic link with trailing @")
+" call Decho("(LocalListing) indicate <".filename."> is a symbolic link with trailing @")
let pfile= filename."@"
elseif getftype(filename) == "socket"
" indicate a socket
-" call Decho("indicate <".filename."> is a socket with trailing =")
+" call Decho("(LocalListing) indicate <".filename."> is a socket with trailing =")
let pfile= filename."="
elseif getftype(filename) == "fifo"
" indicate a fifo
-" call Decho("indicate <".filename."> is a fifo with trailing |")
+" call Decho("(LocalListing) indicate <".filename."> is a fifo with trailing |")
let pfile= filename."|"
elseif isdirectory(filename)
" indicate a directory
-" call Decho("indicate <".filename."> is a directory with trailing /")
+" call Decho("(LocalListing) indicate <".filename."> is a directory with trailing /")
let pfile= filename."/"
elseif exists("b:netrw_curdir") && b:netrw_curdir !~ '^.*://' && !isdirectory(filename)
if (has("win32") || has("win95") || has("win64") || has("win16"))
if filename =~ '\.[eE][xX][eE]$' || filename =~ '\.[cC][oO][mM]$' || filename =~ '\.[bB][aA][tT]$'
" indicate an executable
-" call Decho("indicate <".filename."> is executable with trailing *")
+" call Decho("(LocalListing) indicate <".filename."> is executable with trailing *")
let pfile= filename."*"
else
" normal file
@@ -7595,7 +7851,7 @@ fun! s:LocalListing()
endif
elseif executable(filename)
" indicate an executable
-" call Decho("indicate <".filename."> is executable with trailing *")
+" call Decho("(LocalListing) indicate <".filename."> is executable with trailing *")
let pfile= filename."*"
else
" normal file
@@ -7606,22 +7862,22 @@ fun! s:LocalListing()
" normal file
let pfile= filename
endif
-" call Decho("pfile<".pfile."> (after *@/ appending)")
+" call Decho("(LocalListing) pfile<".pfile."> (after *@/ appending)")
if pfile =~ '//$'
let pfile= substitute(pfile,'//$','/','e')
-" call Decho("change // to /: pfile<".pfile.">")
+" call Decho("(LocalListing) change // to /: pfile<".pfile.">")
endif
let pfile= strpart(pfile,dirnamelen)
let pfile= substitute(pfile,'^[/\\]','','e')
-" call Decho("filename<".filename.">")
-" call Decho("pfile <".pfile.">")
+" call Decho("(LocalListing) filename<".filename.">")
+" call Decho("(LocalListing) pfile <".pfile.">")
if w:netrw_liststyle == s:LONGLIST
let sz = getfsize(filename)
let fsz = strpart(" ",1,15-strlen(sz)).sz
let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
-" call Decho("sz=".sz." fsz=".fsz)
+" call Decho("(LocalListing) sz=".sz." fsz=".fsz)
endif
if g:netrw_sort_by =~ "^t"
@@ -7629,22 +7885,22 @@ fun! s:LocalListing()
" call Decho("getftime(".filename.")=".getftime(filename))
let t = getftime(filename)
let ft = strpart("000000000000000000",1,18-strlen(t)).t
-" call Decho("exe keepjumps put ='".ft.'/'.filename."'")
+" call Decho("(LocalListing) exe keepjumps put ='".ft.'/'.filename."'")
let ftpfile= ft.'/'.pfile
sil! keepj put=ftpfile
elseif g:netrw_sort_by =~ "^s"
" sort by size (handles file sizes up to 1 quintillion bytes, US)
-" call Decho("getfsize(".filename.")=".getfsize(filename))
+" call Decho("(LocalListing) getfsize(".filename.")=".getfsize(filename))
let sz = getfsize(filename)
let fsz = strpart("000000000000000000",1,18-strlen(sz)).sz
-" call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
+" call Decho("(LocalListing) exe keepj put ='".fsz.'/'.filename."'")
let fszpfile= fsz.'/'.pfile
sil! keepj put =fszpfile
else
" sort by name
-" call Decho("exe keepjumps put ='".pfile."'")
+" call Decho("(LocalListing) exe keepjumps put ='".pfile."'")
sil! keepj put=pfile
endif
endwhile
@@ -7654,7 +7910,7 @@ fun! s:LocalListing()
sil! keepj %s/\r$//e
call histdel("/",-1)
exe "setl ts=".g:netrw_maxfilenamelen
-" call Decho("setl ts=".g:netrw_maxfilenamelen)
+" call Decho("(LocalListing) setl ts=".g:netrw_maxfilenamelen)
" call Dret("s:LocalListing")
endfun
@@ -7836,8 +8092,8 @@ fun! s:NetrwLocalRmFile(path,fname,all)
let rmfile= substitute(rmfile,'[\/]$','','e')
if all || ok =~ 'y\%[es]' || ok == ""
-" call Decho("1st attempt: system(netrw#WinPath(".g:netrw_local_rmdir.') '.shellescape(rmfile).')')
- call system(netrw#WinPath(g:netrw_local_rmdir).' '.shellescape(rmfile))
+" call Decho("1st attempt: system(netrw#WinPath(".g:netrw_localrmdir.') '.shellescape(rmfile).')')
+ call system(netrw#WinPath(g:netrw_localrmdir).' '.shellescape(rmfile))
" call Decho("v:shell_error=".v:shell_error)
if v:shell_error != 0
@@ -8039,7 +8295,9 @@ fun! netrw#FileUrlRead(fname)
exe 'keepj r '.plainfname
exe 'file! '.plainfname
keepj 1d
+" call Decho("(FileUrlRead) setl nomod")
setl nomod
+" call Decho("(FileUrlRead) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" call Dret("netrw#FileUrlRead")
exe "sil doau BufReadPost ".fname2396e
endfun
@@ -8048,80 +8306,6 @@ endfun
" Support Functions: {{{1
" ---------------------------------------------------------------------
-" netrw#ErrorMsg: {{{2
-" 0=note = s:NOTE
-" 1=warning = s:WARNING
-" 2=error = s:ERROR
-" Apr 18, 2011 : max errnum currently is 78
-fun! netrw#ErrorMsg(level,msg,errnum)
-" call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
-
- if a:level == 1
- let level= "**warning** (netrw) "
- elseif a:level == 2
- let level= "**error** (netrw) "
- else
- let level= "**note** (netrw) "
- endif
-" call Decho("level=".level)
-
- if g:netrw_use_errorwindow
- " (default) netrw creates a one-line window to show error/warning
- " messages (reliably displayed)
-
- " record current window number for NetrwRestorePosn()'s benefit
- let s:winBeforeErr= winnr()
-" call Decho("s:winBeforeErr=".s:winBeforeErr)
-
- " getting messages out reliably is just plain difficult!
- " This attempt splits the current window, creating a one line window.
- if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0
-" call Decho("write to NetrwMessage buffer")
- exe bufwinnr("NetrwMessage")."wincmd w"
-" call Decho("setl ma noro")
- setl ma noro
- keepj call setline(line("$")+1,level.a:msg)
- keepj $
- else
-" call Decho("create a NetrwMessage buffer window")
- bo 1split
- call s:NetrwEnew()
- keepj call s:NetrwSafeOptions()
- setl bt=nofile
- keepj file NetrwMessage
-" call Decho("setlocal ma noro")
- setl ma noro
- call setline(line("$"),level.a:msg)
- endif
-" call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr())
- if &fo !~ '[ta]'
- syn clear
- syn match netrwMesgNote "^\*\*note\*\*"
- syn match netrwMesgWarning "^\*\*warning\*\*"
- syn match netrwMesgError "^\*\*error\*\*"
- hi link netrwMesgWarning WarningMsg
- hi link netrwMesgError Error
- endif
- setl noma ro bh=wipe
-
- else
- " (optional) netrw will show messages using echomsg. Even if the
- " message doesn't appear, at least it'll be recallable via :messages
-" redraw!
- if a:level == s:WARNING
- echohl WarningMsg
- elseif a:level == s:ERROR
- echohl Error
- endif
- echomsg level.a:msg
-" call Decho("echomsg ***netrw*** ".a:msg)
- echohl None
- endif
-
-" call Dret("netrw#ErrorMsg")
-endfun
-
-" ---------------------------------------------------------------------
" netrw#NetrwRestorePosn: restores the cursor and file position as saved by NetrwSavePosn() {{{2
fun! netrw#NetrwRestorePosn(...)
" call Dfunc("netrw#NetrwRestorePosn() a:0=".a:0." winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1))
@@ -8198,7 +8382,7 @@ endfun
fun! s:ComposePath(base,subdir)
" call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)")
- if(has("amiga"))
+ if has("amiga")
" call Decho("amiga")
let ec = a:base[s:Strlen(a:base)-1]
if ec != '/' && ec != ':'
@@ -8283,7 +8467,7 @@ fun! s:GetTempfile(fname)
" sanity check -- does the temporary file's directory exist?
if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+" call Decho("(GetTempfile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
keepj call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2)
" call Dret("s:GetTempfile getcwd<".getcwd().">")
return ""
@@ -8331,7 +8515,7 @@ fun! s:GetTempfile(fname)
endif
endif
-" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+" call Decho("(GetTempFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
" call Dret("s:GetTempfile <".tmpfile.">")
return tmpfile
endfun
@@ -8553,6 +8737,34 @@ fun! s:NetrwEnew(...)
" call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#").">")
endfun
+" ---------------------------------------------------------------------
+" s:NetrwInsureWinVars: insure that a netrw buffer has its w: variables in spite of a wincmd v or s {{{2
+fun! s:NetrwInsureWinVars()
+" call Dfunc("s:NetrwInsureWinVars()")
+ if !exists("w:netrw_liststyle")
+ let curbuf = bufnr("%")
+ let curwin = winnr()
+ let iwin = 1
+ while iwin <= winnr("$")
+ exe iwin."wincmd w"
+ if winnr() != curwin && bufnr("%") == curbuf && exists("w:netrw_liststyle")
+ " looks like ctrl-w_s or ctrl-w_v was used to split a netrw buffer
+ let winvars= w:
+ break
+ endif
+ let iwin= iwin + 1
+ endwhile
+ exe curbuf."wincmd w"
+ if exists("winvars")
+" call Decho("copying w#".iwin." window variables to w#".curwin)
+ for k in keys(winvars)
+ let w:{k}= winvars[k]
+ endfor
+ endif
+ endif
+" call Dret("s:NetrwInsureWinVars")
+endfun
+
" ------------------------------------------------------------------------
" s:NetrwSaveWordPosn: used to keep cursor on same word after refresh, {{{2
" changed sorting, etc. Also see s:NetrwRestoreWordPosn().
@@ -8672,7 +8884,7 @@ endfun
fun! s:NetrwRexplore(islocal,dirname)
" call Dfunc("s:NetrwRexplore() w:netrw_rexlocal=".w:netrw_rexlocal." w:netrw_rexdir<".w:netrw_rexdir.">")
if !exists("w:netrw_rexlocal")
- " call Dret("s:NetrwRexplore() w:netrw_rexlocal doesn't exist")
+" " call Dret("s:NetrwRexplore() w:netrw_rexlocal doesn't exist")
return
endif
if w:netrw_rexlocal
@@ -8683,9 +8895,12 @@ fun! s:NetrwRexplore(islocal,dirname)
if exists("s:initbeval")
set beval
endif
- if exists("s:nbcd_curpos_{bufnr('%')}")
- keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
-" unlet s:nbcd_curpos_{bufnr('%')}
+ if exists("s:rexposn_".bufnr("%"))
+" call Decho("(NetrwRexplore) restore posn, then unlet s:rexposn_".bufnr('%'))
+ keepj call netrw#NetrwRestorePosn(s:rexposn_{bufnr('%')})
+ unlet s:rexposn_{bufnr('%')}
+ else
+" call Decho("(NetrwRexplore) s:rexposn_".bufnr('%')." doesn't exist")
endif
if exists("s:explore_match")
exe "2match netrwMarkFile /".s:explore_match."/"