summaryrefslogtreecommitdiffstats
path: root/runtime/autoload/zip.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2005-09-16 21:55:43 +0000
committerBram Moolenaar <Bram@vim.org>2005-09-16 21:55:43 +0000
commit60a795aad6ade281146a5343b416f21825af5364 (patch)
treef38bf3d5e39bd321b2ff7b4d9bdf0367c8bec00b /runtime/autoload/zip.vim
parent6b730e111c329caccbb16f08c5b6bbc41d3b5690 (diff)
updated for version 7.0148v7.0148
Diffstat (limited to 'runtime/autoload/zip.vim')
-rw-r--r--runtime/autoload/zip.vim226
1 files changed, 226 insertions, 0 deletions
diff --git a/runtime/autoload/zip.vim b/runtime/autoload/zip.vim
new file mode 100644
index 0000000000..751b1a1dcc
--- /dev/null
+++ b/runtime/autoload/zip.vim
@@ -0,0 +1,226 @@
+" zip.vim: Handles browsing zipfiles
+" AUTOLOAD PORTION
+" Date: Sep 16, 2005
+" Version: 2
+" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
+" License: Vim License (see vim's :help license)
+" Copyright: Copyright (C) 2005 Charles E. Campbell, Jr. {{{1
+" Permission is hereby granted to use and distribute this code,
+" with or without modifications, provided that this copyright
+" notice is copied with it. Like anything else that's free,
+" zipPlugin.vim is provided *as is* and comes with no warranty
+" of any kind, either expressed or implied. By using this
+" plugin, you agree that in no event will the copyright
+" holder be liable for any damages resulting from the use
+" of this software.
+
+" ---------------------------------------------------------------------
+" Initialization: {{{1
+let s:keepcpo= &cpo
+set cpo&vim
+if exists("g:loaded_zip")
+ finish
+endif
+
+let g:loaded_zip= "v2"
+
+" ----------------
+" Functions: {{{1
+" ----------------
+
+" ---------------------------------------------------------------------
+" zip#Browse: {{{2
+fun! zip#Browse(zipfile)
+" call Dfunc("zip#Browse(zipfile<".a:zipfile.">)")
+
+ " sanity checks
+ if !executable("unzip")
+ echohl Error | echo "***error*** (zip#Browse) unzip not available on your system"
+ call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+" call Dret("zip#Browse")
+ return
+ endif
+ if !filereadable(a:zipfile)
+ echohl Error | echo "***error*** (zip#Browse) File not readable<".a:zipfile.">" | echohl None
+ call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+" call Dret("zip#Browse")
+ return
+ endif
+ if &ma != 1
+ set ma
+ endif
+ let w:zipfile= a:zipfile
+
+ setlocal noswapfile
+ setlocal buftype=nofile
+ setlocal bufhidden=hide
+ setlocal nobuflisted
+ setlocal nowrap
+ set ft=tar
+
+ " give header
+ exe "$put ='".'\"'." zip.vim version ".g:loaded_zip."'"
+ exe "$put ='".'\"'." Browsing zipfile ".a:zipfile."'"
+ exe "$put ='".'\"'." Select a file with cursor and press ENTER"."'"
+ $put =''
+ 0d
+ $
+
+ exe "silent r! unzip -l ".a:zipfile
+ $d
+ silent 4,$v/^\s\+\d\+\s\{0,5}\d/d
+ silent 4,$s/^\%(.*\)\s\+\(\S\)/\1/
+
+ setlocal noma nomod ro
+ noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr>
+
+" call Dret("zip#Browse")
+endfun
+
+" ---------------------------------------------------------------------
+" ZipBrowseSelect: {{{2
+fun! s:ZipBrowseSelect()
+" call Dfunc("ZipBrowseSelect() zipfile<".w:zipfile.">")
+ let fname= getline(".")
+
+ " sanity check
+ if fname =~ '^"'
+" call Dret("ZipBrowseSelect")
+ return
+ endif
+ if fname =~ '/$'
+ echohl Error | echo "***error*** (zip#Browse) Please specify a file, not a directory" | echohl None
+ call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+" call Dret("ZipBrowseSelect")
+ return
+ endif
+
+" call Decho("fname<".fname.">")
+
+ " get zipfile to the new-window
+ let zipfile= substitute(w:zipfile,'.zip$','','e')
+
+ new
+ wincmd _
+ exe "e zipfile:".zipfile.':'.fname
+ filetype detect
+
+" call Dret("ZipBrowseSelect")
+endfun
+
+" ---------------------------------------------------------------------
+" zip#Read: {{{2
+fun! zip#Read(fname,mode)
+" call Dfunc("zip#Read(fname<".a:fname.">,mode=".a:mode.")")
+ let zipfile = substitute(a:fname,'zipfile:\(.\{-}\):.*$','\1','')
+ let fname = substitute(a:fname,'zipfile:.\{-}:\(.*\)$','\1','')
+" call Decho("zipfile<".zipfile."> fname<".fname.">")
+
+ exe "r! unzip -p ".zipfile." ".fname
+
+ " cleanup
+ 0d
+ set nomod
+
+" call Dret("zip#Read")
+endfun
+
+" ---------------------------------------------------------------------
+" zip#Write: {{{2
+fun! zip#Write(fname)
+" call Dfunc("zip#Write(fname<".a:fname.")")
+
+ " sanity checks
+ if !executable("zip")
+ echohl Error | echo "***error*** (zip#Write) sorry, your system doesn't appear to have the zip pgm" | echohl None
+ call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+" call Dret("zip#Write")
+ return
+ endif
+ if !exists("*mkdir")
+ echohl Error | echo "***error*** (zip#Write) sorry, mkdir() doesn't work on your system" | echohl None
+ call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+" call Dret("zip#Write")
+ return
+ endif
+
+ let curdir= getcwd()
+ let tmpdir= tempname()
+" call Decho("orig tempname<".tmpdir.">")
+ if tmpdir =~ '\.'
+ let tmpdir= substitute(tmpdir,'\.[^.]*$','','e')
+ endif
+" call Decho("tmpdir<".tmpdir.">")
+ call mkdir(tmpdir,"p")
+
+ " attempt to change to the indicated directory
+ try
+ exe "cd ".escape(tmpdir,' \')
+ catch /^Vim\%((\a\+)\)\=:E344/
+ echohl Error | echo "***error*** (zip#Write) cannot cd to temporary directory" | Echohl None
+ call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+" call Dret("zip#Write")
+ return
+ endtry
+" call Decho("current directory now: ".getcwd())
+
+ " place temporary files under .../_ZIPVIM_/
+ if isdirectory("_ZIPVIM_")
+ call s:Rmdir("_ZIPVIM_")
+ endif
+ call mkdir("_ZIPVIM_")
+ cd _ZIPVIM_
+" call Decho("current directory now: ".getcwd())
+
+ let zipfile = substitute(a:fname,'zipfile:\(.\{-}\):.*$','\1','')
+ let fname = substitute(a:fname,'zipfile:.\{-}:\(.*\)$','\1','')
+ let dirpath = substitute(fname,'/[^/]\+$','','e')
+ if zipfile !~ '/'
+ let zipfile= curdir.'/'.zipfile
+ endif
+" call Decho("zipfile<".zipfile."> fname<".fname.">")
+
+ call mkdir(dirpath,"p")
+ exe "w! ".fname
+ if executable("cygpath")
+ let dirpath = substitute(system("cygpath ".dirpath),'\n','','e')
+ let zipfile = substitute(system("cygpath ".zipfile),'\n','','e')
+ endif
+
+" call Decho("zip -u ".zipfile.".zip ".fname)
+ call system("zip -u ".zipfile.".zip ".fname)
+ if v:shell_error != 0
+ echohl Error | echo "***error*** (zip#Write) sorry, unable to update ".zipfile." with ".fname | echohl None
+ call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+ endif
+
+ " cleanup and restore current directory
+ cd ..
+ call s:Rmdir("_ZIPVIM_")
+ exe "cd ".escape(curdir,' \')
+ setlocal nomod
+
+" call Dret("zip#Write")
+endfun
+
+" ---------------------------------------------------------------------
+" Rmdir: {{{2
+fun! s:Rmdir(fname)
+" call Dfunc("Rmdir(fname<".a:fname.">)")
+ if has("unix")
+ call system("/bin/rm -rf ".a:fname)
+ elseif has("win32") || has("win95") || has("win64") || has("win16")
+ if &shell =~? "sh$"
+ call system("/bin/rm -rf ".a:fname)
+ else
+ call system("del /S ".a:fname)
+ endif
+ endif
+" call Dret("Rmdir")
+endfun
+
+" ------------------------------------------------------------------------
+" Modelines And Restoration: {{{1
+let &cpo= s:keepcpo
+unlet s:keepcpo
+" vim:ts=8 fdm=marker