]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(netrw): handle file/dir symlinks specifically in tree mode
authorChristian Brabandt <cb@256bit.org>
Thu, 29 Feb 2024 16:48:14 +0000 (17:48 +0100)
committerChristian Brabandt <cb@256bit.org>
Thu, 29 Feb 2024 16:48:14 +0000 (17:48 +0100)
fixes: #2386
related: #3609

Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/autoload/netrw.vim

index 0508dcae3b5dc3b12b2752aabcaa4ca9f63e5a89..850e5a40f44492dd5094e50be5fa57278faa5b84 100644 (file)
@@ -9476,7 +9476,7 @@ fun! s:NetrwTreeDir(islocal)
 "    call Decho("treedir<".treedir.">",'~'.expand("<slnum>"))
    elseif curline =~ '@$'
 "    call Decho("handle symbolic link from current line",'~'.expand("<slnum>"))
-    let treedir= resolve(substitute(substitute(getline('.'),'@.*$','','e'),'^|*\s*','','e'))
+    let potentialdir= resolve(substitute(substitute(getline('.'),'@.*$','','e'),'^|*\s*','','e'))
 "    call Decho("treedir<".treedir.">",'~'.expand("<slnum>"))
    else
 "    call Decho("do not extract tree subdirectory from current line and set treedir to empty",'~'.expand("<slnum>"))
@@ -9501,7 +9501,6 @@ fun! s:NetrwTreeDir(islocal)
 "  call Decho("COMBAK#23 : mod=".&mod." win#".winnr())
 
 "   call Decho("islocal=".a:islocal." curline<".curline.">",'~'.expand("<slnum>"))
-   let potentialdir= s:NetrwFile(substitute(curline,'^'.s:treedepthstring.'\+ \(.*\)@$','\1',''))
 "   call Decho("potentialdir<".potentialdir."> isdir=".isdirectory(potentialdir),'~'.expand("<slnum>"))
 "  call Decho("COMBAK#24 : mod=".&mod." win#".winnr())
 
@@ -9514,8 +9513,15 @@ fun! s:NetrwTreeDir(islocal)
 " "   call Decho("newdir <".newdir.">",'~'.expand("<slnum>"))
 "   else
 "    call Decho("apply NetrwTreePath to treetop<".w:netrw_treetop.">",'~'.expand("<slnum>"))
-    let treedir = s:NetrwTreePath(w:netrw_treetop)
-"   endif
+    if a:islocal && curline =~ '@$'
+      if isdirectory(s:NetrwFile(potentialdir))
+        let treedir = w:netrw_treetop.'/'.potentialdir.'/'
+        let w:netrw_treetop = treedir
+      endif
+    else
+      let potentialdir= s:NetrwFile(substitute(curline,'^'.s:treedepthstring.'\+ \(.*\)@$','\1',''))
+      let treedir = s:NetrwTreePath(w:netrw_treetop)
+    endif
   endif
 "  call Decho("COMBAK#25 : mod=".&mod." win#".winnr())