Skip to content

Commit 4d61800

Browse files
tomben13chrisbra
authored andcommitted
runtime(netrw): fix E874 when browsing remote directory which contains ~ character
closes: #15964 Signed-off-by: Tom Benham <[email protected]> Signed-off-by: Christian Brabandt <[email protected]>
1 parent 55adc5b commit 4d61800

1 file changed

Lines changed: 4 additions & 19 deletions

File tree

runtime/autoload/netrw.vim

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
" 2024 Oct 30 by Vim Project: fix filetype detection for remote files (#15961)
3232
" 2024 Oct 30 by Vim Project: fix x mapping on cygwin (#13687)
3333
" 2024 Oct 31 by Vim Project: add netrw#Launch() and netrw#Open() (#15962)
34+
" 2024 Oct 31 by Vim Project: fix E874 when browsing remote dir (#15964)
3435
" }}}
3536
" Former Maintainer: Charles E Campbell
3637
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
@@ -9576,22 +9577,16 @@ endfun
95769577
" Called by s:PerformListing()
95779578
fun! s:NetrwTreeListing(dirname)
95789579
if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
9579-
" call Dfunc("s:NetrwTreeListing() bufname<".expand("%").">")
9580-
" call Decho("curdir<".a:dirname.">",'~'.expand("<slnum>"))
9581-
" call Decho("win#".winnr().": w:netrw_treetop ".(exists("w:netrw_treetop")? "exists" : "doesn't exist")." w:netrw_treedict ".(exists("w:netrw_treedict")? "exists" : "doesn't exit"),'~'.expand("<slnum>"))
9582-
" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")",'~'.expand("<slnum>"))
95839580

95849581
" update the treetop
95859582
if !exists("w:netrw_treetop")
9586-
" call Decho("update the treetop (w:netrw_treetop doesn't exist yet)",'~'.expand("<slnum>"))
95879583
let w:netrw_treetop= a:dirname
95889584
let s:netrw_treetop= w:netrw_treetop
9589-
" call Decho("w:netrw_treetop<".w:netrw_treetop."> (reusing)",'~'.expand("<slnum>"))
9590-
elseif (w:netrw_treetop =~ ('^'.a:dirname) && s:Strlen(a:dirname) < s:Strlen(w:netrw_treetop)) || a:dirname !~ ('^'.w:netrw_treetop)
9591-
" call Decho("update the treetop (override w:netrw_treetop with a:dirname<".a:dirname.">)",'~'.expand("<slnum>"))
9585+
" use \V in case the directory contains specials chars like '$' or '~'
9586+
elseif (w:netrw_treetop =~ ('^'.'\V'.a:dirname) && s:Strlen(a:dirname) < s:Strlen(w:netrw_treetop))
9587+
\ || a:dirname !~ ('^'.'\V'.w:netrw_treetop)
95929588
let w:netrw_treetop= a:dirname
95939589
let s:netrw_treetop= w:netrw_treetop
9594-
" call Decho("w:netrw_treetop<".w:netrw_treetop."> (went up)",'~'.expand("<slnum>"))
95959590
endif
95969591
if exists("w:netrw_treetop")
95979592
let s:netrw_treetop= w:netrw_treetop
@@ -9602,16 +9597,12 @@ fun! s:NetrwTreeListing(dirname)
96029597

96039598
if !exists("w:netrw_treedict")
96049599
" insure that we have a treedict, albeit empty
9605-
" call Decho("initializing w:netrw_treedict to empty",'~'.expand("<slnum>"))
96069600
let w:netrw_treedict= {}
96079601
endif
96089602

96099603
" update the dictionary for the current directory
9610-
" call Decho("updating: w:netrw_treedict[".a:dirname.'] -> [directory listing]','~'.expand("<slnum>"))
9611-
" call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." line($)=".line("$"),'~'.expand("<slnum>"))
96129604
exe "sil! NetrwKeepj ".w:netrw_bannercnt.',$g@^\.\.\=/$@d _'
96139605
let w:netrw_treedict[a:dirname]= getline(w:netrw_bannercnt,line("$"))
9614-
" call Decho("w:treedict[".a:dirname."]= ".string(w:netrw_treedict[a:dirname]),'~'.expand("<slnum>"))
96159606
exe "sil! NetrwKeepj ".w:netrw_bannercnt.",$d _"
96169607

96179608
" if past banner, record word
@@ -9620,23 +9611,17 @@ fun! s:NetrwTreeListing(dirname)
96209611
else
96219612
let fname= ""
96229613
endif
9623-
" call Decho("fname<".fname.">",'~'.expand("<slnum>"))
9624-
" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")",'~'.expand("<slnum>"))
96259614

96269615
" display from treetop on down
9627-
" call Decho("(s:NetrwTreeListing) w:netrw_treetop<".w:netrw_treetop.">")
96289616
NetrwKeepj call s:NetrwTreeDisplay(w:netrw_treetop,"")
9629-
" call Decho("s:NetrwTreeDisplay) setl noma nomod ro",'~'.expand("<slnum>"))
96309617

96319618
" remove any blank line remaining as line#1 (happens in treelisting mode with banner suppressed)
96329619
while getline(1) =~ '^\s*$' && byte2line(1) > 0
9633-
" call Decho("deleting blank line",'~'.expand("<slnum>"))
96349620
1d
96359621
endwhile
96369622

96379623
exe "setl ".g:netrw_bufsettings
96389624

9639-
" call Dret("s:NetrwTreeListing : bufname<".expand("%").">")
96409625
return
96419626
endif
96429627
endfun

0 commit comments

Comments
 (0)