runtime(netrw): upstream snapshot of v182 Commit: https://github.com/vim/vim/commit/ef925556cbea4d54e73388da3b3e6c06a1bbcc02 Author: Luca Saccarola <github.e4...@aleeas.com> Date: Fri Jun 27 18:28:17 2025 +0200
runtime(netrw): upstream snapshot of v182 relevant commits: - refactor: cleanup netrw#BrowseX - fix: correctly handle symlinks in treeview - chore: add minimalrc for reproducing issues - refactor: simplify s:NetrwInit with the 'newer' assignment syntax - refactor: remove balloon functionality - Tune local file listing especially for Windows network drives - interim fix for browse open with multiple windows closes: #17616 Signed-off-by: Luca Saccarola <github.e4...@aleeas.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt index ad5bc2d9b..0a25f2d4c 100644 --- a/runtime/doc/pi_netrw.txt +++ b/runtime/doc/pi_netrw.txt @@ -2735,11 +2735,6 @@ your browsing preferences. (see also: |netrw-settings|) rightmouse : remove file/directory =0: disables mouse maps - *g:netrw_nobeval* doesn't exist (default) - If this variable exists, then balloon - evaluation will be suppressed - (see |'ballooneval'|) - *g:netrw_sizestyle* not defined: actual bytes (default) ="b" : actual bytes (default) ="h" : human-readable (ex. 5k, 4m, 3g) diff --git a/runtime/doc/tags b/runtime/doc/tags index a8a0804e4..2ec4979f6 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -7765,7 +7765,6 @@ g:netrw_maxfilenamelen pi_netrw.txt /*g:netrw_maxfilenamelen* g:netrw_menu pi_netrw.txt /*g:netrw_menu* g:netrw_mkdir_cmd pi_netrw.txt /*g:netrw_mkdir_cmd* g:netrw_mousemaps pi_netrw.txt /*g:netrw_mousemaps* -g:netrw_nobeval pi_netrw.txt /*g:netrw_nobeval* g:netrw_preview pi_netrw.txt /*g:netrw_preview* g:netrw_rcp_cmd pi_netrw.txt /*g:netrw_rcp_cmd* g:netrw_remote_mkdir pi_netrw.txt /*g:netrw_remote_mkdir* diff --git a/runtime/pack/dist/opt/netrw/autoload/netrw.vim b/runtime/pack/dist/opt/netrw/autoload/netrw.vim index 6bcefb1d5..a553c05b2 100644 --- a/runtime/pack/dist/opt/netrw/autoload/netrw.vim +++ b/runtime/pack/dist/opt/netrw/autoload/netrw.vim @@ -32,19 +32,11 @@ setl cpo&vim " Netrw Variables: {{{1 " s:NetrwInit: initializes variables if they haven't been defined {{{2 -" Loosely, varname = value. -function s:NetrwInit(varname,value) - if !exists(a:varname) - if type(a:value) == 0 - exe "let ".a:varname."=".a:value - elseif type(a:value) == 1 && a:value =~ '^[{[]' - exe "let ".a:varname."=".a:value - elseif type(a:value) == 1 - exe "let ".a:varname."="."'".a:value."'" - else - exe "let ".a:varname."=".a:value + +function s:NetrwInit(name, default) + if !exists(a:name) + let {a:name} = a:default endif - endif endfunction " Netrw Constants: {{{2 @@ -57,12 +49,6 @@ if !exists("s:LONGLIST") call s:NetrwInit("s:MAXLIST" ,4) endif -let s:has_balloon = !has('nvim') && - \ has("balloon_eval") && - \ has("syntax") && - \ exists("g:syntax_on") && - \ !exists("g:netrw_nobeval") - " Default option values: {{{2 call s:NetrwInit("g:netrw_localcopycmdopt","") call s:NetrwInit("g:netrw_localcopydircmdopt","") @@ -178,35 +164,35 @@ call s:NetrwInit("g:netrw_dirhistcnt" , 0) let s:xz_opt = has('unix') ? "XZ_OPT=-T0" : \ (has("win32") && &shell =~? ' cmd(\.exe)?$' ? \ "setx XZ_OPT=-T0 &&" : "") -call s:NetrwInit("g:netrw_decompress ", "{" - \ .."'.lz4': 'lz4 -d'," - \ .."'.lzo': 'lzop -d'," - \ .."'.lz': 'lzip -dk'," - \ .."'.7z': '7za x'," - \ .."'.001': '7za x'," - \ .."'.zip': 'unzip'," - \ .."'.bz': 'bunzip2 -k'," - \ .."'.bz2': 'bunzip2 -k'," - \ .."'.gz': 'gunzip -k'," - \ .."'.lzma': 'unlzma -T0 -k'," - \ .."'.xz': 'unxz -T0 -k'," - \ .."'.zst': 'zstd -T0 -d'," - \ .."'.Z': 'uncompress -k'," - \ .."'.tar': 'tar -xvf'," - \ .."'.tar.bz': 'tar -xvjf'," - \ .."'.tar.bz2': 'tar -xvjf'," - \ .."'.tbz': 'tar -xvjf'," - \ .."'.tbz2': 'tar -xvjf'," - \ .."'.tar.gz': 'tar -xvzf'," - \ .."'.tgz': 'tar -xvzf'," - \ .."'.tar.lzma': '"..s:xz_opt.." tar -xvf --lzma'," - \ .."'.tlz': '"..s:xz_opt.." tar -xvf --lzma'," - \ .."'.tar.xz': '"..s:xz_opt.." tar -xvfJ'," - \ .."'.txz': '"..s:xz_opt.." tar -xvfJ'," - \ .."'.tar.zst': '"..s:xz_opt.." tar -xvf --use-compress-program=unzstd'," - \ .."'.tzst': '"..s:xz_opt.." tar -xvf --use-compress-program=unzstd'," - \ .."'.rar': '"..(executable("unrar")?"unrar x -ad":"rar x -ad").."'" - \ .."}") +call s:NetrwInit("g:netrw_decompress", { + \ '.lz4': 'lz4 -d', + \ '.lzo': 'lzop -d', + \ '.lz': 'lzip -dk', + \ '.7z': '7za x', + \ '.001': '7za x', + \ '.zip': 'unzip', + \ '.bz': 'bunzip2 -k', + \ '.bz2': 'bunzip2 -k', + \ '.gz': 'gunzip -k', + \ '.lzma': 'unlzma -T0 -k', + \ '.xz': 'unxz -T0 -k', + \ '.zst': 'zstd -T0 -d', + \ '.Z': 'uncompress -k', + \ '.tar': 'tar -xvf', + \ '.tar.bz': 'tar -xvjf', + \ '.tar.bz2': 'tar -xvjf', + \ '.tbz': 'tar -xvjf', + \ '.tbz2': 'tar -xvjf', + \ '.tar.gz': 'tar -xvzf', + \ '.tgz': 'tar -xvzf', + \ '.tar.lzma': s:xz_opt .. ' tar -xvf --lzma', + \ '.tlz': s:xz_opt .. ' tar -xvf --lzma', + \ '.tar.xz': s:xz_opt .. ' tar -xvfJ', + \ '.txz': s:xz_opt .. ' tar -xvfJ', + \ '.tar.zst': s:xz_opt .. ' tar -xvf --use-compress-program=unzstd', + \ '.tzst': s:xz_opt .. ' tar -xvf --use-compress-program=unzstd', + \ '.rar': (executable("unrar")?"unrar x -ad":"rar x -ad"), + \ }) unlet s:xz_opt call s:NetrwInit("g:netrw_dirhistmax" , 10) call s:NetrwInit("g:netrw_fastbrowse" , 1) @@ -395,19 +381,13 @@ if has("gui_running") && (&enc == 'utf-8' || &enc == 'utf-16' || &enc == 'ucs-4' else let s:treedepthstring= "| " endif -call s:NetrwInit("s:netrw_posn",'{}') +call s:NetrwInit("s:netrw_posn", {}) " BufEnter event ignored by decho when following variable is true " Has a side effect that doau BufReadPost doesn't work, so " files read by network transfer aren't appropriately highlighted. " Netrw Initialization: {{{1 -if s:has_balloon - let &l:bexpr = "netrw#BalloonHelp()" - au FileType netrw setl beval - au WinLeave * if &ft == "netrw" && exists("s:initbeval") | let &beval = s:initbeval | endif - au VimEnter * let s:initbeval = &beval -endif au WinEnter * if &ft == "netrw" | call s:NetrwInsureWinVars() | endif @@ -419,48 +399,6 @@ else endif " Netrw Utility Functions: {{{1 - -" netrw#BalloonHelp: {{{2 - -if s:has_balloon - function netrw#BalloonHelp() - if exists("s:popuperr_id") && popup_getpos(s:popuperr_id) != {} - if exists("s:popuperr_text") && s:popuperr_text != "" && v:beval_text != s:popuperr_text - " text under mouse hasn't changed; only close window when it changes - call popup_close(s:popuperr_id) - unlet s:popuperr_text - else - let s:popuperr_text= v:beval_text - endif - return "" - - elseif v:beval_text == "Netrw" || v:beval_text == "Directory" || v:beval_text == "Listing" - return "i: thin-long-wide-tree gh: quick hide/unhide of dot-files qf: quick file info %:open new file" - - elseif getline(v:beval_lnum) =~ '^"\s*/' - return "<cr>: edit/enter o: edit/enter in horiz window t: edit/enter in new tab v:edit/enter in vert window" - - elseif v:beval_text == "Sorted" || v:beval_text == "by" - return 's: sort by name, time, file size, extension r: reverse sorting order mt: mark target' - - elseif v:beval_text == "Sort" || v:beval_text == "sequence" - return "S: edit sorting sequence" - - elseif v:beval_text == "Hiding" || v:beval_text == "Showing" - return "a: hiding-showing-all ctrl-h: editing hiding list mh: hide/show by suffix" - - elseif v:beval_text == "Quick" || v:beval_text == "Help" - return "Help: press <F1>" - - elseif v:beval_text == "Copy/Move" || v:beval_text == "Tgt" - return "mt: mark target mc: copy marked file to target mm: move marked file to target" - - endif - - return "" - endfunction -endif - " netrw#Explore: launch the local browser in the directory of the current file {{{2 " indx: == -1: Nexplore " == -2: Pexplore @@ -3242,11 +3180,6 @@ function s:NetrwBrowse(islocal,dirname) NetrwKeepj call s:SetRexDir(a:islocal,b:netrw_curdir) endif - if s:has_balloon && &beval == 0 && &l:bexpr == "" - let &l:bexpr= "netrw#BalloonHelp()" - setl beval - endif - " repoint t:netrw_lexbufnr if appropriate if exists("repointlexbufnr") let t:netrw_lexbufnr= bufnr("%") @@ -3818,7 +3751,7 @@ endfunction " cursor=0: newdir is relative to b:netrw_curdir " =1: newdir is relative to the path to the word under the cursor in " tree view -function s:NetrwBrowseChgDir(islocal,newdir,cursor,...) +function s:NetrwBrowseChgDir(islocal, newdir, cursor, ...) let ykeep= @@ if !exists("b:netrw_curdir") let @@= ykeep @@ -3831,29 +3764,22 @@ function s:NetrwBrowseChgDir(islocal,newdir,cursor,...) NetrwKeepj call s:NetrwOptionsSafe(a:islocal) let newdir = a:newdir - if a:cursor && exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treetop") + let dirname = b:netrw_curdir + + if a:cursor && w:netrw_liststyle == s:TREELIST " dirname is the path to the word under the cursor let dirname = s:NetrwTreePath(w:netrw_treetop) - " newdir resolves to a directory and points to a directory in dirname - " /tmp/test/folder_symlink/ -> /tmp/test/original_folder/ - if a:islocal && fnamemodify(dirname, ':t') == newdir && isdirectory(resolve(dirname)) && resolve(dirname) == resolve(newdir) - let dirname = fnamemodify(resolve(dirname), ':p:h:h') - let newdir = fnamemodify(resolve(newdir), ':t') - endif - " Remove trailing "/" - let dirname = substitute(dirname, "/$", "", "") - " If the word under the cursor is a directory (except for ../), NetrwTreePath " returns the full path, including the word under the cursor, remove it - if newdir =~ "/$" && newdir != "../" + if newdir != "../" let dirname = fnamemodify(dirname, ":h") endif - else - let dirname = b:netrw_curdir endif + if has("win32") - let dirname = substitute(dirname,'\','/','ge') + let dirname = substitute(dirname, '\', '/', 'ge') endif + let dolockout = 0 let dorestore = 1 @@ -3871,19 +3797,9 @@ function s:NetrwBrowseChgDir(islocal,newdir,cursor,...) endif " set up o/s-dependent directory recognition pattern - if has("amiga") - let dirpat= '[\/:]$' - else - let dirpat= '[\/]$' - endif - - if dirname !~ dirpat - " apparently vim is "recognizing" that it is in a directory and - " is removing the trailing "/". Bad idea, so let's put it back. - let dirname= dirname.'/' - endif + let dirpat = has("amiga") ? '[\/:]$' : '[\/]$' - if newdir !~ dirpat && !(a:islocal && isdirectory(s:NetrwFile(netrw#fs#ComposePath(dirname,newdir)))) + if newdir !~ dirpat && !(a:islocal && isdirectory(s:NetrwFile(netrw#fs#ComposePath(dirname, newdir)))) " ------------------------------ " NetrwBrowseChgDir: edit a file {{{3 " ------------------------------ @@ -3891,17 +3807,10 @@ function s:NetrwBrowseChgDir(islocal,newdir,cursor,...) " save position for benefit of Rexplore let s:rexposn_{bufnr("%")}= winsaveview() - if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\| :\)' - if dirname =~ '/$' - let dirname= dirname.newdir - else - let dirname= dirname."/".newdir - endif - elseif newdir =~ '^\(/\| :\)' - let dirname= newdir - else - let dirname= netrw#fs#ComposePath(dirname,newdir) - endif + let dirname = isabsolutepath(newdir) + \ ? netrw#fs#AbsPath(newdir) + \ : netrw#fs#ComposePath(dirname, newdir) + " this lets netrw#BrowseX avoid the edit if a:0 < 1 NetrwKeepj call s:NetrwOptionsRestore("s:") @@ -3974,6 +3883,7 @@ function s:NetrwBrowseChgDir(islocal,newdir,cursor,...) " if e the new file would fail due to &mod, then don't change any of the flags let dolockout= 1 endif + if a:islocal " some like c-^ to return to the last edited file " others like c-^ to return to the netrw buffer @@ -3985,7 +3895,6 @@ function s:NetrwBrowseChgDir(islocal,newdir,cursor,...) " file came from vim's hidden storage. Don't "restore" options with it. let dorestore= 0 endif - else endif " handle g:Netrw_funcref -- call external-to-netrw functions @@ -4026,6 +3935,8 @@ function s:NetrwBrowseChgDir(islocal,newdir,cursor,...) " NetrwBrowseChgDir: go up one directory {{{3 " -------------------------------------- + let dirname = netrw#fs#Dirname(dirname) + if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") " force a refresh setl noro ma @@ -4213,104 +4124,30 @@ endfunction " netrw#BrowseX: (implements "x") executes a special "viewer" script or program for the {{{2 " given filename; typically this means given their extension. -" 0=local, 1=remote -function netrw#BrowseX(fname,remote) - if a:remote == 1 && a:fname !~ '^https\=:' && a:fname =~ '/$' - " remote directory, not a webpage access, looks like an attempt to do a directory listing - norm! gf - endif - - if exists("g:netrw_browsex_viewer") && exists("g:netrw_browsex_support_remote") && !g:netrw_browsex_support_remote - let remote = a:remote - else - let remote = 0 - endif - - let ykeep = @@ - let screenposn = winsaveview() - - " need to save and restore aw setting as gx can invoke this function from non-netrw buffers - let awkeep = &aw - set noaw - +function netrw#BrowseX(fname) " special core dump handler - if a:fname =~ '/core\(\.\d\+\)\=$' - if exists("g:Netrw_corehandler") - if type(g:Netrw_corehandler) == 2 - " g:Netrw_corehandler is a function reference (see :help Funcref) - call g:Netrw_corehandler(s:NetrwFile(a:fname)) - elseif type(g:Netrw_corehandler) == 3 - " g:Netrw_corehandler is a List of function references (see :help Funcref) - for Fncref in g:Netrw_corehandler - if type(Fncref) == 2 - call Fncref(a:fname) - endif - endfor - endif - call winrestview(screenposn) - let @@= ykeep - let &aw= awkeep - return + if a:fname =~ '/core\(\.\d\+\)\=$' && exists("g:Netrw_corehandler") + if type(g:Netrw_corehandler) == v:t_func + " g:Netrw_corehandler is a function reference (see :help Funcref) + call g:Netrw_corehandler(s:NetrwFile(a:fname)) + elseif type(g:Netrw_corehandler) == v:t_list + " g:Netrw_corehandler is a List of function references (see :help Funcref) + for Fncref in g:Netrw_corehandler + if type(Fncref) == v:t_func + call Fncref(a:fname) + endif + endfor endif + return endif - " set up the filename - " (lower case the extension, make a local copy of a remote file) - let exten= substitute(a:fname,'.*\.\(.\{-}\)',' ','e') - if has("win32") - let exten= substitute(exten,'^.*$','\L&\E','') - endif - if exten =~ "[\/]" - let exten= "" - endif - - if remote == 1 - " create a local copy - setl bh=delete - call netrw#NetRead(3,a:fname) - " attempt to rename tempfile - let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$',' ','') - let newname = substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$',' /'.basename.'. ','') - if s:netrw_tmpfile != newname && newname != "" - if rename(s:netrw_tmpfile,newname) == 0 - " renaming succeeded - let fname= newname - else - " renaming failed - let fname= s:netrw_tmpfile - endif - else - let fname= s:netrw_tmpfile - endif - else - let fname= a:fname - " special ~ handler for local - if fname =~ '^\~' && expand("$HOME") != "" - let fname= s:NetrwFile(substitute(fname,'^\~',expand("$HOME"),'')) - endif + let fname = a:fname + " special ~ handler for local + if fname =~ '^\~' && expand("$HOME") != "" + let fname = substitute(fname, '^\~', expand("$HOME"), '') endif - call netrw#os#Open(fname) - - " cleanup: remove temporary file, - " delete current buffer if success with handler, - " return to prior buffer (directory listing) - " Feb 12, 2008: had to de-activate removal of - " temporary file because it wasn't getting seen. - " if remote == 1 && fname != a:fname - " call s:NetrwDelete(fname) - " endif - - if remote == 1 - setl bh=delete bt=nofile - if g:netrw_use_noswf - setl noswf - endif - exe "sil! NetrwKeepj norm! \<c-o>" - endif - call winrestview(screenposn) - let @@ = ykeep - let &aw= awkeep + call netrw#os#Open(s:NetrwFile(fname)) endfunction " s:NetrwBufRename: renames a buffer without the side effect of retaining an unlisted buffer having the old name {{{2 @@ -5050,7 +4887,7 @@ function s:NetrwMaps(islocal) nnoremap <buffer> <silent> <nowait> u :<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr> nnoremap <buffer> <silent> <nowait> U :<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr> nnoremap <buffer> <silent> <nowait> v :call <SID>NetrwSplit(5)<cr> - nnoremap <buffer> <silent> <nowait> x :<c-u>call netrw#BrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1,0),0)"<cr> + nnoremap <buffer> <silent> <nowait> x :<c-u>call netrw#BrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1,0))"<cr> nnoremap <buffer> <silent> <nowait> X :<c-u>call <SID>NetrwLocalExecute(expand("<cword>"))"<cr> nnoremap <buffer> <silent> <nowait> r :<c-u>let g:netrw_sort_direction= (g:netrw_sort_direction =~# 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./',0))<cr> @@ -5163,8 +5000,6 @@ function s:NetrwMaps(islocal) nnoremap <buffer> <silent> <nowait> u :<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr> nnoremap <buffer> <silent> <nowait> U :<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr> nnoremap <buffer> <silent> <nowait> v :call <SID>NetrwSplit(2)<cr> - nnoremap <buffer> <silent> <nowait> x :<c-u>call netrw#BrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord(),1),1)<cr> - nmap <buffer> <nowait> gx x if !hasmapto('<Plug>NetrwHideEdit') nmap <buffer> <c-h> <Plug>NetrwHideEdit endif @@ -6617,8 +6452,7 @@ function s:NetrwMenu(domenu) elseif !a:domenu let s:netrwcnt = 0 let curwin = winnr() - keepjumps windo if getline(2) =~# "Netrw" - let s:netrwcnt = s:netrwcnt + 1 + windo if getline(2) =~# "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif endif exe curwin."wincmd w" @@ -7766,7 +7600,9 @@ function s:PerformListing(islocal) " get list of files if a:islocal - NetrwKeepj call s:LocalListing() + let filelist = s:NetrwLocalListingList(b:netrw_curdir, 1) + call append(w:netrw_bannercnt - 1, filelist) + execute printf("setl ts=%d", g:netrw_maxfilenamelen + 1) else " remote NetrwKeepj let badresult= s:NetrwRemoteListing() if badresult @@ -8630,8 +8466,7 @@ function s:NetrwLocalListingList(dirname,setmaxfilenamelen) " get the list of files contained in the current directory let dirname = a:dirname let dirnamelen = strlen(dirname) - let filelist = netrw#fs#Glob(dirname,"*",0) - let filelist = filelist + netrw#fs#Glob(dirname,".*",0) + let filelist = map(['.', '..'] + readdir(dirname), 'netrw#fs#PathJoin(dirname, v:val)') if g:netrw_cygwin == 0 && has("win32") elseif index(filelist,'..') == -1 && dirname !~ '/' @@ -8647,19 +8482,20 @@ function s:NetrwLocalListingList(dirname,setmaxfilenamelen) let resultfilelist = [] for filename in filelist - if getftype(filename) == "link" + let ftype = getftype(filename) + if ftype ==# "link" " indicate a symbolic link let pfile= filename."@" - elseif getftype(filename) == "socket" + elseif ftype ==# "socket" " indicate a socket let pfile= filename."=" - elseif getftype(filename) == "fifo" + elseif ftype ==# "fifo" " indicate a fifo let pfile= filename."|" - elseif isdirectory(s:NetrwFile(filename)) + elseif ftype ==# "dir" " indicate a directory let pfile= filename."/" @@ -8728,21 +8564,6 @@ function s:NetrwLocalListingList(dirname,setmaxfilenamelen) return resultfilelist endfunction -" s:LocalListing: does the job of "ls" for local directories {{{2 -function s:LocalListing() - - let filelist = s:NetrwLocalListingList(b:netrw_curdir, 1) - for filename in filelist - sil! NetrwKeepj put =filename - endfor - - " cleanup any windows mess at end-of-line - sil! NetrwKeepj g/^$/d - sil! NetrwKeepj %s/ $//e - call histdel("/",-1) - exe "setl ts=".(g:netrw_maxfilenamelen+1) -endfunction - " s:NetrwLocalExecute: uses system() to execute command under cursor ("X" command support) {{{2 function s:NetrwLocalExecute(cmd) let ykeep= @@ @@ -9380,11 +9201,6 @@ function s:NetrwEnew(...) endif endif endif - - if s:has_balloon - let &l:bexpr = "netrw#BalloonHelp()" - endif - endfunction " s:NetrwInsureWinVars: insure that a netrw buffer has its w: variables in spite of a wincmd v or s {{{2 diff --git a/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim b/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim index 2bac9aa9f..5e530a8a5 100644 --- a/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim +++ b/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim @@ -72,18 +72,22 @@ endfunction " }}} " netrw#fs#AbsPath: returns the full path to a directory and/or file {{{ -function! netrw#fs#AbsPath(filename) - let filename = a:filename +function! netrw#fs#AbsPath(path) + let path = a:path->substitute(s:slash . '$', '', 'e') - if filename !~ '^/' - let filename = resolve(getcwd() . '/' . filename) + " Nothing to do + if isabsolutepath(path) + return path endif - if filename != "/" && filename =~ '/$' - let filename = substitute(filename, '/$', '', '') - endif + return path->fnamemodify(':p')->substitute(s:slash . '$', '', 'e') +endfunction + +" }}} +" netrw#fs#Dirname: {{{ - return filename +function netrw#fs#Dirname(path) + return netrw#fs#AbsPath(a:path)->fnamemodify(':h') endfunction " }}} diff --git a/runtime/pack/dist/opt/netrw/doc/netrw.txt b/runtime/pack/dist/opt/netrw/doc/netrw.txt index 59d1a2e3a..4464bd775 100644 --- a/runtime/pack/dist/opt/netrw/doc/netrw.txt +++ b/runtime/pack/dist/opt/netrw/doc/netrw.txt @@ -2735,11 +2735,6 @@ your browsing preferences. (see also: |netrw-settings|) rightmouse : remove file/directory =0: disables mouse maps - *g:netrw_nobeval* doesn't exist (default) - If this variable exists, then balloon - evaluation will be suppressed - (see |'ballooneval'|) - *g:netrw_sizestyle* not defined: actual bytes (default) ="b" : actual bytes (default) ="h" : human-readable (ex. 5k, 4m, 3g) -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1uVCCK-006kdM-MV%40256bit.org.