Mercurial > vim
annotate runtime/autoload/tar.vim @ 34571:fdd232ab72ea v9.1.0184
patch 9.1.0184: Cursor pos wrong when clicking with conceal and wrap
Commit: https://github.com/vim/vim/commit/d0c1b7723f7e73763597af2f97a53d94ab7ed020
Author: zeertzjq <zeertzjq@outlook.com>
Date: Sat Mar 16 15:03:33 2024 +0100
patch 9.1.0184: Cursor pos wrong when clicking with conceal and wrap
Problem: Cursor position wrong when clicking with conceal and wrap.
Solution: Use the virtual column of the last char for ScreenCols[] in
boguscols. Remove use of MAXCOL in ScreenCols[]. Rename
third argument of wlv_screen_line() to "clear_end" as that's
clearer what it does (zeertzjq).
related: 14192
closes: #14200
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 16 Mar 2024 15:15:04 +0100 |
parents | 02bd0fe77c68 |
children |
rev | line source |
---|---|
557 | 1 " tar.vim: Handles browsing tarfiles |
2 " AUTOLOAD PORTION | |
33771
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
3 " Date: Nov 14, 2023 |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
4 " Version: 32b (with modifications from the Vim Project) |
34375
02bd0fe77c68
runtime(misc): announce adoption of various runtime files
Christian Brabandt <cb@256bit.org>
parents:
34102
diff
changeset
|
5 " Maintainer: This runtime file is looking for a new maintainer. |
02bd0fe77c68
runtime(misc): announce adoption of various runtime files
Christian Brabandt <cb@256bit.org>
parents:
34102
diff
changeset
|
6 " Former Maintainer: Charles E Campbell |
19099 | 7 " License: Vim License (see vim's :help license) |
446 | 8 " |
557 | 9 " Contains many ideas from Michael Toren's <tar.vim> |
446 | 10 " |
19099 | 11 " Copyright: Copyright (C) 2005-2017 Charles E. Campbell {{{1 |
557 | 12 " Permission is hereby granted to use and distribute this code, |
13 " with or without modifications, provided that this copyright | |
14 " notice is copied with it. Like anything else that's free, | |
1624 | 15 " tar.vim and tarPlugin.vim are provided *as is* and comes |
16 " with no warranty of any kind, either expressed or implied. | |
17 " By using this plugin, you agree that in no event will the | |
18 " copyright holder be liable for any damages resulting from | |
19 " the use of this software. | |
2034 | 20 " call inputsave()|call input("Press <cr> to continue")|call inputrestore() |
557 | 21 " --------------------------------------------------------------------- |
1125 | 22 " Load Once: {{{1 |
2034 | 23 if &cp || exists("g:loaded_tar") |
24 finish | |
25 endif | |
33722
ccde95a374dd
runtime(tar): improve the error detection
Christian Brabandt <cb@256bit.org>
parents:
25773
diff
changeset
|
26 let g:loaded_tar= "v32a" |
2034 | 27 if v:version < 702 |
28 echohl WarningMsg | |
29 echo "***warning*** this version of tar needs vim 7.2" | |
30 echohl Normal | |
31 finish | |
32 endif | |
557 | 33 let s:keepcpo= &cpo |
34 set cpo&vim | |
4339 | 35 "DechoTabOn |
819 | 36 "call Decho("loading autoload/tar.vim") |
557 | 37 |
38 " --------------------------------------------------------------------- | |
39 " Default Settings: {{{1 | |
40 if !exists("g:tar_browseoptions") | |
41 let g:tar_browseoptions= "Ptf" | |
42 endif | |
43 if !exists("g:tar_readoptions") | |
44 let g:tar_readoptions= "OPxf" | |
45 endif | |
819 | 46 if !exists("g:tar_cmd") |
47 let g:tar_cmd= "tar" | |
48 endif | |
557 | 49 if !exists("g:tar_writeoptions") |
50 let g:tar_writeoptions= "uf" | |
51 endif | |
19099 | 52 if !exists("g:tar_delfile") |
53 let g:tar_delfile="--delete -f" | |
54 endif | |
2908 | 55 if !exists("g:netrw_cygwin") |
56 if has("win32") || has("win95") || has("win64") || has("win16") | |
57 if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$' | |
58 let g:netrw_cygwin= 1 | |
59 else | |
60 let g:netrw_cygwin= 0 | |
61 endif | |
62 else | |
63 let g:netrw_cygwin= 0 | |
64 endif | |
65 endif | |
2034 | 66 if !exists("g:tar_copycmd") |
67 if !exists("g:netrw_localcopycmd") | |
68 if has("win32") || has("win95") || has("win64") || has("win16") | |
69 if g:netrw_cygwin | |
70 let g:netrw_localcopycmd= "cp" | |
71 else | |
72 let g:netrw_localcopycmd= "copy" | |
73 endif | |
74 elseif has("unix") || has("macunix") | |
75 let g:netrw_localcopycmd= "cp" | |
76 else | |
77 let g:netrw_localcopycmd= "" | |
78 endif | |
79 endif | |
80 let g:tar_copycmd= g:netrw_localcopycmd | |
81 endif | |
82 if !exists("g:tar_extractcmd") | |
83 let g:tar_extractcmd= "tar -xf" | |
84 endif | |
1624 | 85 |
86 " set up shell quoting character | |
1125 | 87 if !exists("g:tar_shq") |
4339 | 88 if exists("+shq") && exists("&shq") && &shq != "" |
1624 | 89 let g:tar_shq= &shq |
90 elseif has("win32") || has("win95") || has("win64") || has("win16") | |
91 if exists("g:netrw_cygwin") && g:netrw_cygwin | |
92 let g:tar_shq= "'" | |
93 else | |
94 let g:tar_shq= '"' | |
95 endif | |
96 else | |
1125 | 97 let g:tar_shq= "'" |
98 endif | |
1624 | 99 " call Decho("g:tar_shq<".g:tar_shq.">") |
1125 | 100 endif |
557 | 101 |
102 " ---------------- | |
103 " Functions: {{{1 | |
104 " ---------------- | |
446 | 105 |
527 | 106 " --------------------------------------------------------------------- |
557 | 107 " tar#Browse: {{{2 |
108 fun! tar#Browse(tarfile) | |
109 " call Dfunc("tar#Browse(tarfile<".a:tarfile.">)") | |
569 | 110 let repkeep= &report |
111 set report=10 | |
446 | 112 |
557 | 113 " sanity checks |
819 | 114 if !executable(g:tar_cmd) |
1125 | 115 redraw! |
19099 | 116 " call Decho('***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system') |
819 | 117 echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system' |
569 | 118 let &report= repkeep |
557 | 119 " call Dret("tar#Browse") |
120 return | |
121 endif | |
122 if !filereadable(a:tarfile) | |
819 | 123 " call Decho('a:tarfile<'.a:tarfile.'> not filereadable') |
557 | 124 if a:tarfile !~# '^\a\+://' |
19116 | 125 " if it's an url, don't complain, let url-handlers such as vim do its thing |
1125 | 126 redraw! |
19099 | 127 " call Decho("***error*** (tar#Browse) File not readable<".a:tarfile.">") |
557 | 128 echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None |
129 endif | |
569 | 130 let &report= repkeep |
557 | 131 " call Dret("tar#Browse : file<".a:tarfile."> not readable") |
132 return | |
133 endif | |
134 if &ma != 1 | |
135 set ma | |
136 endif | |
2535
31e51111bd14
Runtime file updates. Fix tar plugin window split.
Bram Moolenaar <bram@vim.org>
parents:
2426
diff
changeset
|
137 let b:tarfile= a:tarfile |
446 | 138 |
557 | 139 setlocal noswapfile |
140 setlocal buftype=nofile | |
141 setlocal bufhidden=hide | |
142 setlocal nobuflisted | |
143 setlocal nowrap | |
144 set ft=tar | |
446 | 145 |
557 | 146 " give header |
819 | 147 " call Decho("printing header") |
1624 | 148 let lastline= line("$") |
149 call setline(lastline+1,'" tar.vim version '.g:loaded_tar) | |
150 call setline(lastline+2,'" Browsing tarfile '.a:tarfile) | |
151 call setline(lastline+3,'" Select a file with cursor and press ENTER') | |
2908 | 152 keepj $put ='' |
3281 | 153 keepj sil! 0d |
2908 | 154 keepj $ |
446 | 155 |
819 | 156 let tarfile= a:tarfile |
4339 | 157 if has("win32unix") && executable("cygpath") |
819 | 158 " assuming cygwin |
2034 | 159 let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e') |
819 | 160 endif |
19099 | 161 let curlast= line("$") |
14668 | 162 |
19099 | 163 if tarfile =~# '\.\(gz\)$' |
2034 | 164 " call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ") |
19099 | 165 exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - " |
166 | |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
167 elseif tarfile =~# '\.\(tgz\)$' || tarfile =~# '\.\(tbz\)$' || tarfile =~# '\.\(txz\)$' || tarfile =~# '\.\(tzst\)$' |
19099 | 168 if has("unix") && executable("file") |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
169 let filekind= system("file ".shellescape(tarfile,1)) |
19099 | 170 else |
171 let filekind= "" | |
172 endif | |
173 | |
174 if filekind =~ "bzip2" | |
175 exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - " | |
176 elseif filekind =~ "XZ" | |
177 exe "sil! r! xz -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - " | |
23047 | 178 elseif filekind =~ "Zstandard" |
179 exe "sil! r! zstd --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - " | |
19099 | 180 else |
181 exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - " | |
182 endif | |
183 | |
1624 | 184 elseif tarfile =~# '\.lrp' |
2034 | 185 " call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ") |
14679
ba010fa2bcba
patch 8.1.0352: browsing compressed tar files does not always work
Christian Brabandt <cb@256bit.org>
parents:
14668
diff
changeset
|
186 exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - " |
3281 | 187 elseif tarfile =~# '\.\(bz2\|tbz\|tb2\)$' |
2034 | 188 " call Decho("3: exe silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ") |
2908 | 189 exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - " |
3281 | 190 elseif tarfile =~# '\.\(lzma\|tlz\)$' |
2034 | 191 " call Decho("3: exe silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ") |
2908 | 192 exe "sil! r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - " |
2426 | 193 elseif tarfile =~# '\.\(xz\|txz\)$' |
194 " call Decho("3: exe silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ") | |
2908 | 195 exe "sil! r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - " |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
196 elseif tarfile =~# '\.\(zst\|tzst\)$' |
23047 | 197 exe "sil! r! zstd --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - " |
557 | 198 else |
1702 | 199 if tarfile =~ '^\s*-' |
2034 | 200 " A file name starting with a dash is taken as an option. Prepend ./ to avoid that. |
1702 | 201 let tarfile = substitute(tarfile, '-', './-', '') |
202 endif | |
2034 | 203 " call Decho("4: exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,0)) |
2908 | 204 exe "sil! r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,1) |
557 | 205 endif |
819 | 206 if v:shell_error != 0 |
1125 | 207 redraw! |
857 | 208 echohl WarningMsg | echo "***warning*** (tar#Browse) please check your g:tar_browseoptions<".g:tar_browseoptions.">" |
209 " call Dret("tar#Browse : a:tarfile<".a:tarfile.">") | |
210 return | |
211 endif | |
33722
ccde95a374dd
runtime(tar): improve the error detection
Christian Brabandt <cb@256bit.org>
parents:
25773
diff
changeset
|
212 " |
33771
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
213 " The following should not be neccessary, since in case of errors the |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
214 " previous if statement should have caught the problem (because tar exited |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
215 " with a non-zero exit code). |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
216 " if line("$") == curlast || ( line("$") == (curlast + 1) && |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
217 " \ getline("$") =~# '\c\<\%(warning\|error\|inappropriate\|unrecognized\)\>' && |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
218 " \ getline("$") =~ '\s' ) |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
219 " redraw! |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
220 " echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
221 " keepj sil! %d |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
222 " let eikeep= &ei |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
223 " set ei=BufReadCmd,FileReadCmd |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
224 " exe "r ".fnameescape(a:tarfile) |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
225 " let &ei= eikeep |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
226 " keepj sil! 1d |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
227 " call Dret("tar#Browse : a:tarfile<".a:tarfile.">") |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
228 " return |
9968a3af7e7b
runtime(tar): comment out strange error condition check
Christian Brabandt <cb@256bit.org>
parents:
33722
diff
changeset
|
229 " endif |
446 | 230 |
19099 | 231 " set up maps supported for tar |
557 | 232 setlocal noma nomod ro |
19099 | 233 noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr> |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
234 noremap <silent> <buffer> x :call tar#Extract()<cr> |
19099 | 235 if &mouse != "" |
236 noremap <silent> <buffer> <leftmouse> <leftmouse>:call <SID>TarBrowseSelect()<cr> | |
237 endif | |
557 | 238 |
569 | 239 let &report= repkeep |
2535
31e51111bd14
Runtime file updates. Fix tar plugin window split.
Bram Moolenaar <bram@vim.org>
parents:
2426
diff
changeset
|
240 " call Dret("tar#Browse : b:tarfile<".b:tarfile.">") |
527 | 241 endfun |
242 | |
243 " --------------------------------------------------------------------- | |
557 | 244 " TarBrowseSelect: {{{2 |
245 fun! s:TarBrowseSelect() | |
2535
31e51111bd14
Runtime file updates. Fix tar plugin window split.
Bram Moolenaar <bram@vim.org>
parents:
2426
diff
changeset
|
246 " call Dfunc("TarBrowseSelect() b:tarfile<".b:tarfile."> curfile<".expand("%").">") |
569 | 247 let repkeep= &report |
248 set report=10 | |
557 | 249 let fname= getline(".") |
250 " call Decho("fname<".fname.">") | |
251 | |
1702 | 252 if !exists("g:tar_secure") && fname =~ '^\s*-\|\s\+-' |
253 redraw! | |
2034 | 254 echohl WarningMsg | echo '***warning*** (tar#BrowseSelect) rejecting tarfile member<'.fname.'> because of embedded "-"' |
1702 | 255 " call Dret('tar#BrowseSelect : rejecting tarfile member<'.fname.'> because of embedded "-"') |
256 return | |
257 endif | |
258 | |
557 | 259 " sanity check |
260 if fname =~ '^"' | |
569 | 261 let &report= repkeep |
557 | 262 " call Dret("TarBrowseSelect") |
263 return | |
264 endif | |
265 | |
2535
31e51111bd14
Runtime file updates. Fix tar plugin window split.
Bram Moolenaar <bram@vim.org>
parents:
2426
diff
changeset
|
266 " about to make a new window, need to use b:tarfile |
31e51111bd14
Runtime file updates. Fix tar plugin window split.
Bram Moolenaar <bram@vim.org>
parents:
2426
diff
changeset
|
267 let tarfile= b:tarfile |
557 | 268 let curfile= expand("%") |
4339 | 269 if has("win32unix") && executable("cygpath") |
819 | 270 " assuming cygwin |
2034 | 271 let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e') |
819 | 272 endif |
557 | 273 |
19099 | 274 " open a new window (tar#Read will read a file into it) |
275 noswapfile new | |
1624 | 276 if !exists("g:tar_nomax") || g:tar_nomax == 0 |
277 wincmd _ | |
278 endif | |
557 | 279 let s:tblfile_{winnr()}= curfile |
1624 | 280 call tar#Read("tarfile:".tarfile.'::'.fname,1) |
557 | 281 filetype detect |
4339 | 282 set nomod |
283 exe 'com! -buffer -nargs=? -complete=file TarDiff :call tar#Diff(<q-args>,"'.fnameescape(fname).'")' | |
557 | 284 |
569 | 285 let &report= repkeep |
557 | 286 " call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">") |
287 endfun | |
288 | |
289 " --------------------------------------------------------------------- | |
290 " tar#Read: {{{2 | |
291 fun! tar#Read(fname,mode) | |
292 " call Dfunc("tar#Read(fname<".a:fname.">,mode=".a:mode.")") | |
569 | 293 let repkeep= &report |
294 set report=10 | |
1624 | 295 let tarfile = substitute(a:fname,'tarfile:\(.\{-}\)::.*$','\1','') |
296 let fname = substitute(a:fname,'tarfile:.\{-}::\(.*\)$','\1','') | |
4339 | 297 if has("win32unix") && executable("cygpath") |
819 | 298 " assuming cygwin |
2034 | 299 let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e') |
819 | 300 endif |
301 " call Decho("tarfile<".tarfile.">") | |
302 " call Decho("fname<".fname.">") | |
557 | 303 |
2034 | 304 if fname =~ '\.bz2$' && executable("bzcat") |
305 let decmp= "|bzcat" | |
306 let doro = 1 | |
19099 | 307 elseif fname =~ '\.t\=gz$' && executable("zcat") |
1624 | 308 let decmp= "|zcat" |
309 let doro = 1 | |
2034 | 310 elseif fname =~ '\.lzma$' && executable("lzcat") |
311 let decmp= "|lzcat" | |
1624 | 312 let doro = 1 |
2426 | 313 elseif fname =~ '\.xz$' && executable("xzcat") |
314 let decmp= "|xzcat" | |
315 let doro = 1 | |
23047 | 316 elseif fname =~ '\.zst$' && executable("zstdcat") |
317 let decmp= "|zstdcat" | |
318 let doro = 1 | |
1624 | 319 else |
320 let decmp="" | |
321 let doro = 0 | |
2426 | 322 if fname =~ '\.bz2$\|\.gz$\|\.lzma$\|\.xz$\|\.zip$\|\.Z$' |
1624 | 323 setlocal bin |
324 endif | |
325 endif | |
326 | |
1702 | 327 if exists("g:tar_secure") |
328 let tar_secure= " -- " | |
329 else | |
330 let tar_secure= " " | |
331 endif | |
14668 | 332 |
2034 | 333 if tarfile =~# '\.bz2$' |
2908 | 334 exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp |
19099 | 335 elseif tarfile =~# '\.\(gz\)$' |
336 exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp | |
337 | |
338 elseif tarfile =~# '\(\.tgz\|\.tbz\|\.txz\)' | |
339 if has("unix") && executable("file") | |
340 let filekind= system("file ".shellescape(tarfile,1)) | |
341 else | |
342 let filekind= "" | |
343 endif | |
344 if filekind =~ "bzip2" | |
345 exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp | |
346 elseif filekind =~ "XZ" | |
347 exe "sil! r! xz -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp | |
23047 | 348 elseif filekind =~ "Zstandard" |
349 exe "sil! r! zstd --decompress --stdout -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp | |
19099 | 350 else |
351 exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp | |
352 endif | |
353 | |
1624 | 354 elseif tarfile =~# '\.lrp$' |
14679
ba010fa2bcba
patch 8.1.0352: browsing compressed tar files does not always work
Christian Brabandt <cb@256bit.org>
parents:
14668
diff
changeset
|
355 exe "sil! r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp |
2034 | 356 elseif tarfile =~# '\.lzma$' |
2908 | 357 exe "sil! r! lzma -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp |
2426 | 358 elseif tarfile =~# '\.\(xz\|txz\)$' |
2908 | 359 exe "sil! r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp |
557 | 360 else |
1702 | 361 if tarfile =~ '^\s*-' |
2034 | 362 " A file name starting with a dash is taken as an option. Prepend ./ to avoid that. |
1702 | 363 let tarfile = substitute(tarfile, '-', './-', '') |
364 endif | |
2034 | 365 " call Decho("8: exe silent r! ".g:tar_cmd." -".g:tar_readoptions.tar_secure.shellescape(tarfile,1)." ".shellescape(fname,1).decmp) |
366 exe "silent r! ".g:tar_cmd." -".g:tar_readoptions.shellescape(tarfile,1)." ".tar_secure.shellescape(fname,1).decmp | |
557 | 367 endif |
1624 | 368 |
369 if doro | |
370 " because the reverse process of compressing changed files back into the tarball is not currently supported | |
371 setlocal ro | |
372 endif | |
373 | |
2535
31e51111bd14
Runtime file updates. Fix tar plugin window split.
Bram Moolenaar <bram@vim.org>
parents:
2426
diff
changeset
|
374 let b:tarfile= a:fname |
1668 | 375 exe "file tarfile::".fnameescape(fname) |
557 | 376 |
377 " cleanup | |
2908 | 378 keepj sil! 0d |
557 | 379 set nomod |
380 | |
569 | 381 let &report= repkeep |
2535
31e51111bd14
Runtime file updates. Fix tar plugin window split.
Bram Moolenaar <bram@vim.org>
parents:
2426
diff
changeset
|
382 " call Dret("tar#Read : b:tarfile<".b:tarfile.">") |
557 | 383 endfun |
384 | |
385 " --------------------------------------------------------------------- | |
386 " tar#Write: {{{2 | |
387 fun! tar#Write(fname) | |
2535
31e51111bd14
Runtime file updates. Fix tar plugin window split.
Bram Moolenaar <bram@vim.org>
parents:
2426
diff
changeset
|
388 " call Dfunc("tar#Write(fname<".a:fname.">) b:tarfile<".b:tarfile."> tblfile_".winnr()."<".s:tblfile_{winnr()}.">") |
569 | 389 let repkeep= &report |
390 set report=10 | |
557 | 391 |
1702 | 392 if !exists("g:tar_secure") && a:fname =~ '^\s*-\|\s\+-' |
393 redraw! | |
2034 | 394 echohl WarningMsg | echo '***warning*** (tar#Write) rejecting tarfile member<'.a:fname.'> because of embedded "-"' |
1702 | 395 " call Dret('tar#Write : rejecting tarfile member<'.fname.'> because of embedded "-"') |
396 return | |
397 endif | |
398 | |
527 | 399 " sanity checks |
819 | 400 if !executable(g:tar_cmd) |
1125 | 401 redraw! |
19099 | 402 " call Decho('***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system') |
569 | 403 let &report= repkeep |
527 | 404 " call Dret("tar#Write") |
405 return | |
406 endif | |
407 if !exists("*mkdir") | |
1125 | 408 redraw! |
19099 | 409 " call Decho("***error*** (tar#Write) sorry, mkdir() doesn't work on your system") |
557 | 410 echohl Error | echo "***error*** (tar#Write) sorry, mkdir() doesn't work on your system" | echohl None |
569 | 411 let &report= repkeep |
527 | 412 " call Dret("tar#Write") |
413 return | |
414 endif | |
415 | |
416 let curdir= getcwd() | |
417 let tmpdir= tempname() | |
418 " call Decho("orig tempname<".tmpdir.">") | |
419 if tmpdir =~ '\.' | |
420 let tmpdir= substitute(tmpdir,'\.[^.]*$','','e') | |
421 endif | |
422 " call Decho("tmpdir<".tmpdir.">") | |
423 call mkdir(tmpdir,"p") | |
424 | |
425 " attempt to change to the indicated directory | |
426 try | |
1624 | 427 exe "cd ".fnameescape(tmpdir) |
527 | 428 catch /^Vim\%((\a\+)\)\=:E344/ |
1125 | 429 redraw! |
19099 | 430 " call Decho("***error*** (tar#Write) cannot cd to temporary directory") |
557 | 431 echohl Error | echo "***error*** (tar#Write) cannot cd to temporary directory" | Echohl None |
569 | 432 let &report= repkeep |
527 | 433 " call Dret("tar#Write") |
434 return | |
435 endtry | |
436 " call Decho("current directory now: ".getcwd()) | |
446 | 437 |
557 | 438 " place temporary files under .../_ZIPVIM_/ |
439 if isdirectory("_ZIPVIM_") | |
440 call s:Rmdir("_ZIPVIM_") | |
527 | 441 endif |
557 | 442 call mkdir("_ZIPVIM_") |
443 cd _ZIPVIM_ | |
527 | 444 " call Decho("current directory now: ".getcwd()) |
445 | |
2535
31e51111bd14
Runtime file updates. Fix tar plugin window split.
Bram Moolenaar <bram@vim.org>
parents:
2426
diff
changeset
|
446 let tarfile = substitute(b:tarfile,'tarfile:\(.\{-}\)::.*$','\1','') |
31e51111bd14
Runtime file updates. Fix tar plugin window split.
Bram Moolenaar <bram@vim.org>
parents:
2426
diff
changeset
|
447 let fname = substitute(b:tarfile,'tarfile:.\{-}::\(.*\)$','\1','') |
557 | 448 |
449 " handle compressed archives | |
2034 | 450 if tarfile =~# '\.bz2' |
451 call system("bzip2 -d -- ".shellescape(tarfile,0)) | |
452 let tarfile = substitute(tarfile,'\.bz2','','e') | |
453 let compress= "bzip2 -- ".shellescape(tarfile,0) | |
454 " call Decho("compress<".compress.">") | |
455 elseif tarfile =~# '\.gz' | |
19099 | 456 call system("gzip -d -- ".shellescape(tarfile,0)) |
557 | 457 let tarfile = substitute(tarfile,'\.gz','','e') |
2034 | 458 let compress= "gzip -- ".shellescape(tarfile,0) |
459 " call Decho("compress<".compress.">") | |
557 | 460 elseif tarfile =~# '\.tgz' |
19099 | 461 call system("gzip -d -- ".shellescape(tarfile,0)) |
557 | 462 let tarfile = substitute(tarfile,'\.tgz','.tar','e') |
2034 | 463 let compress= "gzip -- ".shellescape(tarfile,0) |
557 | 464 let tgz = 1 |
1702 | 465 " call Decho("compress<".compress.">") |
2426 | 466 elseif tarfile =~# '\.xz' |
467 call system("xz -d -- ".shellescape(tarfile,0)) | |
468 let tarfile = substitute(tarfile,'\.xz','','e') | |
469 let compress= "xz -- ".shellescape(tarfile,0) | |
470 " call Decho("compress<".compress.">") | |
23047 | 471 elseif tarfile =~# '\.zst' |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
472 call system("zstd --decompress --rm -- ".shellescape(tarfile,0)) |
23047 | 473 let tarfile = substitute(tarfile,'\.zst','','e') |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
474 let compress= "zstd --rm -- ".shellescape(tarfile,0) |
2426 | 475 elseif tarfile =~# '\.lzma' |
476 call system("lzma -d -- ".shellescape(tarfile,0)) | |
477 let tarfile = substitute(tarfile,'\.lzma','','e') | |
478 let compress= "lzma -- ".shellescape(tarfile,0) | |
479 " call Decho("compress<".compress.">") | |
527 | 480 endif |
1624 | 481 " call Decho("tarfile<".tarfile.">") |
527 | 482 |
483 if v:shell_error != 0 | |
1125 | 484 redraw! |
19099 | 485 " call Decho("***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname) |
557 | 486 echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None |
527 | 487 else |
557 | 488 |
489 " call Decho("tarfile<".tarfile."> fname<".fname.">") | |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
490 |
624 | 491 if fname =~ '/' |
492 let dirpath = substitute(fname,'/[^/]\+$','','e') | |
4339 | 493 if has("win32unix") && executable("cygpath") |
2034 | 494 let dirpath = substitute(system("cygpath ".shellescape(dirpath, 0)),'\n','','e') |
624 | 495 endif |
496 call mkdir(dirpath,"p") | |
497 endif | |
557 | 498 if tarfile !~ '/' |
499 let tarfile= curdir.'/'.tarfile | |
500 endif | |
1702 | 501 if tarfile =~ '^\s*-' |
502 " A file name starting with a dash may be taken as an option. Prepend ./ to avoid that. | |
503 let tarfile = substitute(tarfile, '-', './-', '') | |
504 endif | |
557 | 505 " call Decho("tarfile<".tarfile."> fname<".fname.">") |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
506 |
1702 | 507 if exists("g:tar_secure") |
508 let tar_secure= " -- " | |
509 else | |
510 let tar_secure= " " | |
511 endif | |
1624 | 512 exe "w! ".fnameescape(fname) |
4339 | 513 if has("win32unix") && executable("cygpath") |
2034 | 514 let tarfile = substitute(system("cygpath ".shellescape(tarfile,0)),'\n','','e') |
557 | 515 endif |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
516 |
557 | 517 " delete old file from tarfile |
19099 | 518 " call Decho("system(".g:tar_cmd." ".g:tar_delfile." ".shellescape(tarfile,0)." -- ".shellescape(fname,0).")") |
519 call system(g:tar_cmd." ".g:tar_delfile." ".shellescape(tarfile,0).tar_secure.shellescape(fname,0)) | |
557 | 520 if v:shell_error != 0 |
1125 | 521 redraw! |
19099 | 522 " call Decho("***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname)) |
1624 | 523 echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None |
557 | 524 else |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
525 |
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
526 " update tarfile with new file |
2034 | 527 " call Decho(g:tar_cmd." -".g:tar_writeoptions." ".shellescape(tarfile,0).tar_secure.shellescape(fname,0)) |
528 call system(g:tar_cmd." -".g:tar_writeoptions." ".shellescape(tarfile,0).tar_secure.shellescape(fname,0)) | |
557 | 529 if v:shell_error != 0 |
1125 | 530 redraw! |
19099 | 531 " call Decho("***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname)) |
1624 | 532 echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None |
557 | 533 elseif exists("compress") |
534 " call Decho("call system(".compress.")") | |
535 call system(compress) | |
536 if exists("tgz") | |
537 " call Decho("rename(".tarfile.".gz,".substitute(tarfile,'\.tar$','.tgz','e').")") | |
538 call rename(tarfile.".gz",substitute(tarfile,'\.tar$','.tgz','e')) | |
539 endif | |
540 endif | |
541 endif | |
542 | |
543 " support writing tarfiles across a network | |
544 if s:tblfile_{winnr()} =~ '^\a\+://' | |
545 " call Decho("handle writing <".tarfile."> across network to <".s:tblfile_{winnr()}.">") | |
546 let tblfile= s:tblfile_{winnr()} | |
19099 | 547 1split|noswapfile enew |
2034 | 548 let binkeep= &l:binary |
557 | 549 let eikeep = &ei |
550 set binary ei=all | |
19099 | 551 exe "noswapfile e! ".fnameescape(tarfile) |
557 | 552 call netrw#NetWrite(tblfile) |
2034 | 553 let &ei = eikeep |
554 let &l:binary = binkeep | |
557 | 555 q! |
556 unlet s:tblfile_{winnr()} | |
557 endif | |
527 | 558 endif |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
559 |
527 | 560 " cleanup and restore current directory |
561 cd .. | |
557 | 562 call s:Rmdir("_ZIPVIM_") |
1668 | 563 exe "cd ".fnameescape(curdir) |
527 | 564 setlocal nomod |
565 | |
569 | 566 let &report= repkeep |
527 | 567 " call Dret("tar#Write") |
568 endfun | |
569 | |
570 " --------------------------------------------------------------------- | |
4339 | 571 " tar#Diff: {{{2 |
572 fun! tar#Diff(userfname,fname) | |
573 " call Dfunc("tar#Diff(userfname<".a:userfname."> fname<".a:fname.")") | |
574 let fname= a:fname | |
575 if a:userfname != "" | |
576 let fname= a:userfname | |
577 endif | |
578 if filereadable(fname) | |
579 " sets current file (from tarball) for diff'ing | |
580 " splits window vertically | |
581 " opens original file, sets it for diff'ing | |
582 " sets up b:tardiff_otherbuf variables so each buffer knows about the other (for closing purposes) | |
583 diffthis | |
584 wincmd v | |
19099 | 585 exe "noswapfile e ".fnameescape(fname) |
4339 | 586 diffthis |
587 else | |
588 redraw! | |
589 echo "***warning*** unable to read file<".fname.">" | |
590 endif | |
591 " call Dret("tar#Diff") | |
592 endfun | |
593 | |
594 " --------------------------------------------------------------------- | |
19099 | 595 " tar#Extract: extract a file from a (possibly compressed) tar archive {{{2 |
596 fun! tar#Extract() | |
597 " call Dfunc("tar#Extract()") | |
598 | |
599 let repkeep= &report | |
600 set report=10 | |
601 let fname= getline(".") | |
602 " call Decho("fname<".fname.">") | |
603 | |
604 if !exists("g:tar_secure") && fname =~ '^\s*-\|\s\+-' | |
605 redraw! | |
606 echohl WarningMsg | echo '***warning*** (tar#BrowseSelect) rejecting tarfile member<'.fname.'> because of embedded "-"' | |
607 " call Dret('tar#BrowseSelect : rejecting tarfile member<'.fname.'> because of embedded "-"') | |
608 return | |
609 endif | |
610 | |
611 " sanity check | |
612 if fname =~ '^"' | |
613 let &report= repkeep | |
614 " call Dret("TarBrowseSelect") | |
615 return | |
616 endif | |
617 | |
618 let tarball = expand("%") | |
619 " call Decho("tarball<".tarball.">") | |
620 let tarbase = substitute(tarball,'\..*$','','') | |
621 " call Decho("tarbase<".tarbase.">") | |
622 | |
623 let extractcmd= netrw#WinPath(g:tar_extractcmd) | |
624 if filereadable(tarbase.".tar") | |
625 " call Decho("system(".extractcmd." ".shellescape(tarbase).".tar ".shellescape(fname).")") | |
626 call system(extractcmd." ".shellescape(tarbase).".tar ".shellescape(fname)) | |
627 if v:shell_error != 0 | |
628 echohl Error | echo "***error*** ".extractcmd." ".tarbase.".tar ".fname.": failed!" | echohl NONE | |
629 " call Decho("***error*** ".extractcmd." ".tarbase.".tar ".fname.": failed!") | |
630 else | |
631 echo "***note*** successfully extracted ".fname | |
632 endif | |
633 | |
634 elseif filereadable(tarbase.".tgz") | |
635 let extractcmd= substitute(extractcmd,"-","-z","") | |
636 " call Decho("system(".extractcmd." ".shellescape(tarbase).".tgz ".shellescape(fname).")") | |
637 call system(extractcmd." ".shellescape(tarbase).".tgz ".shellescape(fname)) | |
638 if v:shell_error != 0 | |
639 echohl Error | echo "***error*** ".extractcmd." ".tarbase.".tgz ".fname.": failed!" | echohl NONE | |
640 " call Decho("***error*** ".extractcmd."t ".tarbase.".tgz ".fname.": failed!") | |
641 else | |
642 echo "***note*** successfully extracted ".fname | |
643 endif | |
644 | |
645 elseif filereadable(tarbase.".tar.gz") | |
646 let extractcmd= substitute(extractcmd,"-","-z","") | |
647 " call Decho("system(".extractcmd." ".shellescape(tarbase).".tar.gz ".shellescape(fname).")") | |
648 call system(extractcmd." ".shellescape(tarbase).".tar.gz ".shellescape(fname)) | |
649 if v:shell_error != 0 | |
650 echohl Error | echo "***error*** ".extractcmd." ".tarbase.".tar.gz ".fname.": failed!" | echohl NONE | |
651 " call Decho("***error*** ".extractcmd." ".tarbase.".tar.gz ".fname.": failed!") | |
652 else | |
653 echo "***note*** successfully extracted ".fname | |
654 endif | |
655 | |
656 elseif filereadable(tarbase.".tbz") | |
657 let extractcmd= substitute(extractcmd,"-","-j","") | |
658 " call Decho("system(".extractcmd." ".shellescape(tarbase).".tbz ".shellescape(fname).")") | |
659 call system(extractcmd." ".shellescape(tarbase).".tbz ".shellescape(fname)) | |
660 if v:shell_error != 0 | |
661 echohl Error | echo "***error*** ".extractcmd."j ".tarbase.".tbz ".fname.": failed!" | echohl NONE | |
662 " call Decho("***error*** ".extractcmd."j ".tarbase.".tbz ".fname.": failed!") | |
663 else | |
664 echo "***note*** successfully extracted ".fname | |
665 endif | |
666 | |
667 elseif filereadable(tarbase.".tar.bz2") | |
668 let extractcmd= substitute(extractcmd,"-","-j","") | |
669 " call Decho("system(".extractcmd." ".shellescape(tarbase).".tar.bz2 ".shellescape(fname).")") | |
670 call system(extractcmd." ".shellescape(tarbase).".tar.bz2 ".shellescape(fname)) | |
671 if v:shell_error != 0 | |
672 echohl Error | echo "***error*** ".extractcmd."j ".tarbase.".tar.bz2 ".fname.": failed!" | echohl NONE | |
673 " call Decho("***error*** ".extractcmd."j ".tarbase.".tar.bz2 ".fname.": failed!") | |
674 else | |
675 echo "***note*** successfully extracted ".fname | |
676 endif | |
677 | |
678 elseif filereadable(tarbase.".txz") | |
679 let extractcmd= substitute(extractcmd,"-","-J","") | |
680 " call Decho("system(".extractcmd." ".shellescape(tarbase).".txz ".shellescape(fname).")") | |
681 call system(extractcmd." ".shellescape(tarbase).".txz ".shellescape(fname)) | |
682 if v:shell_error != 0 | |
683 echohl Error | echo "***error*** ".extractcmd." ".tarbase.".txz ".fname.": failed!" | echohl NONE | |
684 " call Decho("***error*** ".extractcmd." ".tarbase.".txz ".fname.": failed!") | |
685 else | |
686 echo "***note*** successfully extracted ".fname | |
687 endif | |
688 | |
689 elseif filereadable(tarbase.".tar.xz") | |
690 let extractcmd= substitute(extractcmd,"-","-J","") | |
691 " call Decho("system(".extractcmd." ".shellescape(tarbase).".tar.xz ".shellescape(fname).")") | |
692 call system(extractcmd." ".shellescape(tarbase).".tar.xz ".shellescape(fname)) | |
693 if v:shell_error != 0 | |
694 echohl Error | echo "***error*** ".extractcmd." ".tarbase.".tar.xz ".fname.": failed!" | echohl NONE | |
695 " call Decho("***error*** ".extractcmd." ".tarbase.".tar.xz ".fname.": failed!") | |
696 else | |
697 echo "***note*** successfully extracted ".fname | |
698 endif | |
23047 | 699 |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
700 elseif filereadable(tarbase.".tzst") |
23047 | 701 let extractcmd= substitute(extractcmd,"-","--zstd","") |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
702 " call Decho("system(".extractcmd." ".shellescape(tarbase).".tzst ".shellescape(fname).")") |
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
703 call system(extractcmd." ".shellescape(tarbase).".tzst ".shellescape(fname)) |
23047 | 704 if v:shell_error != 0 |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
705 echohl Error | echo "***error*** ".extractcmd." ".tarbase.".tzst ".fname.": failed!" | echohl NONE |
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
706 " call Decho("***error*** ".extractcmd." ".tarbase.".tzst ".fname.": failed!") |
23047 | 707 else |
708 echo "***note*** successfully extracted ".fname | |
709 endif | |
710 | |
711 elseif filereadable(tarbase.".tar.zst") | |
712 let extractcmd= substitute(extractcmd,"-","--zstd","") | |
713 " call Decho("system(".extractcmd." ".shellescape(tarbase).".tar.zst ".shellescape(fname).")") | |
34102
e003aedbf9e1
runtime(tar): fix a few problems with the tar plugin
Christian Brabandt <cb@256bit.org>
parents:
33771
diff
changeset
|
714 call system(extractcmd." ".shellescape(tarbase).".tar.zst ".shellescape(fname)) |
23047 | 715 if v:shell_error != 0 |
716 echohl Error | echo "***error*** ".extractcmd." ".tarbase.".tar.zst ".fname.": failed!" | echohl NONE | |
717 " call Decho("***error*** ".extractcmd." ".tarbase.".tar.zst ".fname.": failed!") | |
718 else | |
719 echo "***note*** successfully extracted ".fname | |
720 endif | |
19099 | 721 endif |
722 | |
723 " restore option | |
724 let &report= repkeep | |
725 | |
726 " call Dret("tar#Extract") | |
727 endfun | |
728 | |
729 " --------------------------------------------------------------------- | |
2034 | 730 " s:Rmdir: {{{2 |
527 | 731 fun! s:Rmdir(fname) |
732 " call Dfunc("Rmdir(fname<".a:fname.">)") | |
733 if has("unix") | |
2034 | 734 call system("/bin/rm -rf -- ".shellescape(a:fname,0)) |
527 | 735 elseif has("win32") || has("win95") || has("win64") || has("win16") |
736 if &shell =~? "sh$" | |
2034 | 737 call system("/bin/rm -rf -- ".shellescape(a:fname,0)) |
527 | 738 else |
2034 | 739 call system("del /S ".shellescape(a:fname,0)) |
527 | 740 endif |
741 endif | |
742 " call Dret("Rmdir") | |
743 endfun | |
744 | |
1624 | 745 " --------------------------------------------------------------------- |
2034 | 746 " tar#Vimuntar: installs a tarball in the user's .vim / vimfiles directory {{{2 |
747 fun! tar#Vimuntar(...) | |
748 " call Dfunc("tar#Vimuntar() a:0=".a:0." a:1<".(exists("a:1")? a:1 : "-n/a-").">") | |
749 let tarball = expand("%") | |
750 " call Decho("tarball<".tarball.">") | |
751 let tarbase = substitute(tarball,'\..*$','','') | |
752 " call Decho("tarbase<".tarbase.">") | |
753 let tarhome = expand("%:p") | |
754 if has("win32") || has("win95") || has("win64") || has("win16") | |
755 let tarhome= substitute(tarhome,'\\','/','g') | |
756 endif | |
757 let tarhome= substitute(tarhome,'/[^/]*$','','') | |
758 " call Decho("tarhome<".tarhome.">") | |
759 let tartail = expand("%:t") | |
760 " call Decho("tartail<".tartail.">") | |
761 let curdir = getcwd() | |
762 " call Decho("curdir <".curdir.">") | |
763 " set up vimhome | |
764 if a:0 > 0 && a:1 != "" | |
765 let vimhome= a:1 | |
766 else | |
767 let vimhome= vimball#VimballHome() | |
768 endif | |
769 " call Decho("vimhome<".vimhome.">") | |
770 | |
771 " call Decho("curdir<".curdir."> vimhome<".vimhome.">") | |
772 if simplify(curdir) != simplify(vimhome) | |
773 " copy (possibly compressed) tarball to .vim/vimfiles | |
774 " call Decho(netrw#WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome)) | |
775 call system(netrw#WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome)) | |
776 " call Decho("exe cd ".fnameescape(vimhome)) | |
777 exe "cd ".fnameescape(vimhome) | |
778 endif | |
779 " call Decho("getcwd<".getcwd().">") | |
780 | |
781 " if necessary, decompress the tarball; then, extract it | |
782 if tartail =~ '\.tgz' | |
19099 | 783 if executable("gunzip") |
2034 | 784 silent exe "!gunzip ".shellescape(tartail) |
785 elseif executable("gzip") | |
786 silent exe "!gzip -d ".shellescape(tartail) | |
1668 | 787 else |
25773 | 788 echoerr "unable to decompress<".tartail."> on this system" |
2034 | 789 if simplify(curdir) != simplify(tarhome) |
790 " remove decompressed tarball, restore directory | |
791 " call Decho("delete(".tartail.".tar)") | |
792 call delete(tartail.".tar") | |
793 " call Decho("exe cd ".fnameescape(curdir)) | |
794 exe "cd ".fnameescape(curdir) | |
795 endif | |
796 " call Dret("tar#Vimuntar") | |
797 return | |
1668 | 798 endif |
1624 | 799 else |
2034 | 800 call vimball#Decompress(tartail,0) |
1624 | 801 endif |
2034 | 802 let extractcmd= netrw#WinPath(g:tar_extractcmd) |
803 " call Decho("system(".extractcmd." ".shellescape(tarbase.".tar").")") | |
804 call system(extractcmd." ".shellescape(tarbase.".tar")) | |
805 | |
806 " set up help | |
807 if filereadable("doc/".tarbase.".txt") | |
808 " call Decho("exe helptags ".getcwd()."/doc") | |
809 exe "helptags ".getcwd()."/doc" | |
810 endif | |
811 | |
812 if simplify(tarhome) != simplify(vimhome) | |
813 " remove decompressed tarball, restore directory | |
814 call delete(vimhome."/".tarbase.".tar") | |
815 exe "cd ".fnameescape(curdir) | |
816 endif | |
817 | |
818 " call Dret("tar#Vimuntar") | |
1624 | 819 endfun |
820 | |
2034 | 821 " ===================================================================== |
557 | 822 " Modelines And Restoration: {{{1 |
823 let &cpo= s:keepcpo | |
824 unlet s:keepcpo | |
1624 | 825 " vim:ts=8 fdm=marker |