]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(netrw): update netrw's decompress logic
authorChristian Brabandt <cb@256bit.org>
Sat, 23 Nov 2024 12:28:01 +0000 (13:28 +0100)
committerChristian Brabandt <cb@256bit.org>
Sat, 23 Nov 2024 12:28:01 +0000 (13:28 +0100)
Detect a few more default archive types, correctly handle file
extensions with digits in it.

fixes: #16099
closes: #16104

Signed-off-by: Konfekt <Konfekt@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/autoload/netrw.vim
runtime/doc/pi_netrw.txt

index 89aad816f8c39c4ae35ae2931a67504a906b5afc..629d35ea07128058d45b48855e5b8eea7ab6b968 100644 (file)
@@ -36,6 +36,7 @@
 "   2024 Nov 07 by Vim Project: fix a few issues with netrw tree listing (#15996)
 "   2024 Nov 10 by Vim Project: directory symlink not resolved in tree view (#16020)
 "   2024 Nov 14 by Vim Project: small fixes to netrw#BrowseX (#16056)
+"   2024 Nov 23 by Vim Project: update decompress defaults (#16104)
 "   }}}
 " Former Maintainer:   Charles E Campbell
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
@@ -365,7 +366,39 @@ call s:NetrwInit("g:netrw_cygdrive","/cygdrive")
 " Default values - d-g ---------- {{{3
 call s:NetrwInit("s:didstarstar",0)
 call s:NetrwInit("g:netrw_dirhistcnt"      , 0)
-call s:NetrwInit("g:netrw_decompress"       , '{ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf", ".xz" : "unxz" }')
+let s:xz_opt = has('unix') ? "XZ_OPT=-T0" :
+               \ (has("win32") && &shell =~? '\vcmd(\.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").."'"
+            \ .."}")
+unlet s:xz_opt
 call s:NetrwInit("g:netrw_dirhistmax"       , 10)
 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$')
@@ -6510,7 +6543,6 @@ fun! s:NetrwMarkFileArgList(islocal,tomflist)
     NetrwKeepj call winrestview(svpos)
    endif
   endif
-
 endfun
 
 " ---------------------------------------------------------------------
@@ -6536,7 +6568,7 @@ fun! s:NetrwMarkFileCompress(islocal)
 
    " for every filename in the marked list
    for fname in s:netrwmarkfilelist_{curbufnr}
-    let sfx= substitute(fname,'^.\{-}\(\.\a\+\)$','\1','')
+    let sfx= substitute(fname,'^.\{-}\(\.[[:alnum:]]\+\)$','\1','')
     if exists("g:netrw_decompress['".sfx."']")
      " fname has a suffix indicating that its compressed; apply associated decompression routine
      let exe= g:netrw_decompress[sfx]
index a783fe9ac30e79b95e57c5bc8b9e8da6fb5a9cab..c22aad354455fa8d9540128a652de3f5850c9eaf 100644 (file)
@@ -1,10 +1,9 @@
-*pi_netrw.txt*  For Vim version 9.1.  Last change: 2024 Nov 12
+*pi_netrw.txt*  For Vim version 9.1.  Last change: 2024 Nov 23
 
            ------------------------------------------------
            NETRW REFERENCE MANUAL    by Charles E. Campbell
            ------------------------------------------------
-Author:  Charles E. Campbell  <NcampObell@SdrPchip.AorgM-NOSPAM>
-         (remove NOSPAM from Campbell's email first)
+Original Author:  Charles E. Campbell
 
 Copyright: Copyright (C) 2017 Charles E Campbell    *netrw-copyright*
        The VIM LICENSE applies to the files in this package, including
@@ -2659,10 +2658,34 @@ your browsing preferences.  (see also: |netrw-settings|)
                                  netrw last saw |g:netrw_cursor| >= 5 or when
                                  netrw was initially run.
 
-  *g:netrw_decompress*         = { ".gz"  : "gunzip" ,
-                                   ".bz2" : "bunzip2" ,
-                                   ".zip" : "unzip" ,
-                                   ".tar" : "tar -xf"}
+  *g:netrw_decompress*         = { '.lz4':      'lz4 -d',
+                                   '.lzo':      'lzop -d',
+                                   '.lz':       'lzip -dk',
+                                   '.7z':       '7za x',
+                                   '.001':      '7za x',
+                                   '.tar.bz':   'tar -xvjf',
+                                   '.tar.bz2':  'tar -xvjf',
+                                   '.tbz':      'tar -xvjf',
+                                   '.tbz2':     'tar -xvjf',
+                                   '.tar.gz':   'tar -xvzf',
+                                   '.tgz':      'tar -xvzf',
+                                   '.tar.zst':  'tar --use-compress-program=unzstd -xvf',
+                                   '.tzst':     'tar --use-compress-program=unzstd -xvf',
+                                   '.tar':      'tar -xvf',
+                                   '.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',
+                                   '.rar':      'unrar x -ad',
+                                   '.tar.lzma': 'tar --lzma -xvf',
+                                   '.tlz':      'tar --lzma -xvf',
+                                   '.tar.xz':   'tar -xvJf',
+                                   '.txz':      'tar -xvJf'}
+
                                  A dictionary mapping suffices to
                                  decompression programs.