summaryrefslogtreecommitdiff
path: root/runtime/autoload
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2005-07-27 21:13:01 +0000
committerBram Moolenaar <Bram@vim.org>2005-07-27 21:13:01 +0000
commit87e25fdf80c7b45deee9c59389b51503e906d93b (patch)
treee477f86746245499e324e1d1e9ccada6aed035e9 /runtime/autoload
parent231334e6efbf3a7f89183f8257e09492534a5f8c (diff)
downloadvim-git-87e25fdf80c7b45deee9c59389b51503e906d93b.tar.gz
updated for version 7.0117v7.0117
Diffstat (limited to 'runtime/autoload')
-rw-r--r--runtime/autoload/README.txt6
-rw-r--r--runtime/autoload/gzip.vim173
-rw-r--r--runtime/autoload/tar.vim130
3 files changed, 309 insertions, 0 deletions
diff --git a/runtime/autoload/README.txt b/runtime/autoload/README.txt
new file mode 100644
index 000000000..038199554
--- /dev/null
+++ b/runtime/autoload/README.txt
@@ -0,0 +1,6 @@
+The autoload directory is for standard Vim autoload scripts.
+
+These are functions used by plugins and for general use. They will be loaded
+automatically when the function is invoked. See ":help autoload".
+
+gzip.vim for editing compressed files
diff --git a/runtime/autoload/gzip.vim b/runtime/autoload/gzip.vim
new file mode 100644
index 000000000..a6467b8f6
--- /dev/null
+++ b/runtime/autoload/gzip.vim
@@ -0,0 +1,173 @@
+" Vim autoload file for editing compressed files.
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2005 Jul 26
+
+" These functions are used by the gzip plugin.
+
+" Function to check that executing "cmd [-f]" works.
+" The result is cached in s:have_"cmd" for speed.
+fun s:check(cmd)
+ let name = substitute(a:cmd, '\(\S*\).*', '\1', '')
+ if !exists("s:have_" . name)
+ let e = executable(name)
+ if e < 0
+ let r = system(name . " --version")
+ let e = (r !~ "not found" && r != "")
+ endif
+ exe "let s:have_" . name . "=" . e
+ endif
+ exe "return s:have_" . name
+endfun
+
+" Set b:gzip_comp_arg to the gzip argument to be used for compression, based on
+" the flags in the compressed file.
+" The only compression methods that can be detected are max speed (-1) and max
+" compression (-9).
+fun s:set_compression(line)
+ " get the Compression Method
+ let l:cm = char2nr(a:line[2])
+ " if it's 8 (DEFLATE), we can check for the compression level
+ if l:cm == 8
+ " get the eXtra FLags
+ let l:xfl = char2nr(a:line[8])
+ " max compression
+ if l:xfl == 2
+ let b:gzip_comp_arg = "-9"
+ " min compression
+ elseif l:xfl == 4
+ let b:gzip_comp_arg = "-1"
+ endif
+ endif
+endfun
+
+
+" After reading compressed file: Uncompress text in buffer with "cmd"
+fun gzip#read(cmd)
+ " don't do anything if the cmd is not supported
+ if !s:check(a:cmd)
+ return
+ endif
+
+ " for gzip check current compression level and set b:gzip_comp_arg.
+ silent! unlet b:gzip_comp_arg
+ if a:cmd[0] == 'g'
+ call s:set_compression(getline(1))
+ endif
+
+ " make 'patchmode' empty, we don't want a copy of the written file
+ let pm_save = &pm
+ set pm=
+ " remove 'a' and 'A' from 'cpo' to avoid the alternate file changes
+ let cpo_save = &cpo
+ set cpo-=a cpo-=A
+ " set 'modifiable'
+ let ma_save = &ma
+ setlocal ma
+ " when filtering the whole buffer, it will become empty
+ let empty = line("'[") == 1 && line("']") == line("$")
+ let tmp = tempname()
+ let tmpe = tmp . "." . expand("<afile>:e")
+ " write the just read lines to a temp file "'[,']w tmp.gz"
+ execute "silent '[,']w " . tmpe
+ " uncompress the temp file: call system("gzip -dn tmp.gz")
+ call system(a:cmd . " " . tmpe)
+ if !filereadable(tmp)
+ " uncompress didn't work! Keep the compressed file then.
+ echoerr "Error: Could not read uncompressed file"
+ return
+ endif
+ " delete the compressed lines; remember the line number
+ let l = line("'[") - 1
+ if exists(":lockmarks")
+ lockmarks '[,']d _
+ else
+ '[,']d _
+ endif
+ " read in the uncompressed lines "'[-1r tmp"
+ setlocal nobin
+ if exists(":lockmarks")
+ execute "silent lockmarks " . l . "r " . tmp
+ else
+ execute "silent " . l . "r " . tmp
+ endif
+
+ " if buffer became empty, delete trailing blank line
+ if empty
+ silent $delete _
+ 1
+ endif
+ " delete the temp file and the used buffers
+ call delete(tmp)
+ silent! exe "bwipe " . tmp
+ silent! exe "bwipe " . tmpe
+ let &pm = pm_save
+ let &cpo = cpo_save
+ let &l:ma = ma_save
+ " When uncompressed the whole buffer, do autocommands
+ if empty
+ if &verbose >= 8
+ execute "doau BufReadPost " . expand("%:r")
+ else
+ execute "silent! doau BufReadPost " . expand("%:r")
+ endif
+ endif
+endfun
+
+" After writing compressed file: Compress written file with "cmd"
+fun gzip#write(cmd)
+ " don't do anything if the cmd is not supported
+ if s:check(a:cmd)
+ " Rename the file before compressing it.
+ let nm = resolve(expand("<afile>"))
+ let nmt = s:tempname(nm)
+ if rename(nm, nmt) == 0
+ if exists("b:gzip_comp_arg")
+ call system(a:cmd . " " . b:gzip_comp_arg . " " . nmt)
+ else
+ call system(a:cmd . " " . nmt)
+ endif
+ call rename(nmt . "." . expand("<afile>:e"), nm)
+ endif
+ endif
+endfun
+
+" Before appending to compressed file: Uncompress file with "cmd"
+fun gzip#appre(cmd)
+ " don't do anything if the cmd is not supported
+ if s:check(a:cmd)
+ let nm = expand("<afile>")
+
+ " for gzip check current compression level and set b:gzip_comp_arg.
+ silent! unlet b:gzip_comp_arg
+ if a:cmd[0] == 'g'
+ call s:set_compression(readfile(nm, "b", 1)[0])
+ endif
+
+ " Rename to a weird name to avoid the risk of overwriting another file
+ let nmt = expand("<afile>:p:h") . "/X~=@l9q5"
+ let nmte = nmt . "." . expand("<afile>:e")
+ if rename(nm, nmte) == 0
+ if &patchmode != "" && getfsize(nm . &patchmode) == -1
+ " Create patchmode file by creating the decompressed file new
+ call system(a:cmd . " -c " . nmte . " > " . nmt)
+ call rename(nmte, nm . &patchmode)
+ else
+ call system(a:cmd . " " . nmte)
+ endif
+ call rename(nmt, nm)
+ endif
+ endif
+endfun
+
+" find a file name for the file to be compressed. Use "name" without an
+" extension if possible. Otherwise use a weird name to avoid overwriting an
+" existing file.
+fun s:tempname(name)
+ let fn = fnamemodify(a:name, ":r")
+ if !filereadable(fn) && !isdirectory(fn)
+ return fn
+ endif
+ return fnamemodify(a:name, ":p:h") . "/X~=@l9q5"
+endfun
+
+" vim: set sw=2 :
diff --git a/runtime/autoload/tar.vim b/runtime/autoload/tar.vim
new file mode 100644
index 000000000..25203d06b
--- /dev/null
+++ b/runtime/autoload/tar.vim
@@ -0,0 +1,130 @@
+" vim:set ts=8 sts=4 sw=4:
+"
+" tar.vim -- a Vim plugin for browsing tarfiles
+" Copyright (c) 2002, Michael C. Toren <mct@toren.net>
+" Distributed under the GNU General Public License.
+"
+" Version: 1.01
+" Last Change: 2005 Jul 26
+"
+" Updates are available from <http://michael.toren.net/code/>. If you
+" find this script useful, or have suggestions for improvements, please
+" let me know.
+" Also look there for further comments and documentation.
+"
+" This part defines the functions. The autocommands are in plugin/tar.vim.
+
+let s:version = "1.01"
+
+function! tar#Write(argument)
+ echo "ERROR: Sorry, no write support for tarfiles yet"
+endfunction
+
+function! tar#Read(argument, cleanup)
+ let l:argument = a:argument
+ let l:argument = substitute(l:argument, '^tarfile:', '', '')
+ let l:argument = substitute(l:argument, '^\~', $HOME, '')
+
+ let l:tarfile = l:argument
+ while 1
+ if (l:tarfile == "" || l:tarfile == "/")
+ echo "ERROR: Could not find a readable tarfile in path:" l:argument
+ return
+ endif
+
+ if filereadable(l:tarfile) " found it!
+ break
+ endif
+
+ let l:tarfile = fnamemodify(l:tarfile, ":h")
+ endwhile
+
+ let l:toextract = strpart(l:argument, strlen(l:tarfile) + 1)
+
+ if (l:toextract == "")
+ return
+ endif
+
+ let l:cat = s:TarCatCommand(l:tarfile)
+ execute "r !" . l:cat . " < '" . l:tarfile . "'"
+ \ " | tar OPxf - '" . l:toextract . "'"
+
+ if (a:cleanup)
+ 0d "blank line
+ execute "doautocmd BufReadPost " . expand("%")
+ setlocal readonly
+ silent preserve
+ endif
+endfunction
+
+function! tar#Browse(tarfile)
+ setlocal noswapfile
+ setlocal buftype=nofile
+ setlocal bufhidden=hide
+ setlocal filetype=
+ setlocal nobuflisted
+ setlocal buftype=nofile
+ setlocal wrap
+ setlocal syntax=tar
+
+ let l:tarfile = a:tarfile
+ let b:tarfile = l:tarfile
+ let l:cat = s:TarCatCommand(l:tarfile)
+
+ if ! filereadable(l:tarfile)
+ let l:tarfile = substitute(l:tarfile, '^tarfile:', '', '')
+ endif
+
+ if ! filereadable(l:tarfile)
+ echo "ERROR: File not readable:" l:tarfile
+ return
+ endif
+
+ call s:Say("\" tar.vim version " . s:version)
+ call s:Say("\" Browsing tarfile " . l:tarfile)
+ call s:Say("\" Hit ENTER to view a file in a new window")
+ call s:Say("")
+
+ silent execute "r!" . l:cat . "<'" . l:tarfile . "'| tar Ptf - "
+ 0d "blank line
+ /^$/1
+
+ setlocal readonly
+ setlocal nomodifiable
+ noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr>
+endfunction
+
+function! s:TarBrowseSelect()
+ let l:line = getline(".")
+
+ if (l:line =~ '^" ')
+ return
+ endif
+
+ if (l:line =~ '/$')
+ echo "Please specify a file, not a directory"
+ return
+ endif
+
+ let l:selection = "tarfile:" . b:tarfile . "/" . l:line
+ new
+ wincmd _
+ execute "e " . l:selection
+endfunction
+
+" kludge to deal with compressed archives
+function! s:TarCatCommand(tarfile)
+ if a:tarfile =~# '\.\(gz\|tgz\|Z\)$'
+ let l:cat = "gzip -d -c"
+ elseif a:tarfile =~# '\.bz2$'
+ let l:cat = "bzip2 -d -c"
+ else
+ let l:cat = "cat"
+ endif
+ return l:cat
+endfunction
+
+function! s:Say(string)
+ let @" = a:string
+ $ put
+endfunction