annotate runtime/autoload/gzip.vim @ 49:000769ce6c9d default tip

Added tag v7-3-618 for changeset 67300faee616
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 01 Aug 2012 18:08:37 +0900 (2012-08-01)
parents e170173ecb68
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
1 " Vim autoload file for editing compressed files.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
2 " Maintainer: Bram Moolenaar <Bram@vim.org>
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
3 " Last Change: 2008 Jul 04
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
4
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
5 " These functions are used by the gzip plugin.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
6
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
7 " Function to check that executing "cmd [-f]" works.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
8 " The result is cached in s:have_"cmd" for speed.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
9 fun s:check(cmd)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
10 let name = substitute(a:cmd, '\(\S*\).*', '\1', '')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
11 if !exists("s:have_" . name)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
12 let e = executable(name)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
13 if e < 0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
14 let r = system(name . " --version")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
15 let e = (r !~ "not found" && r != "")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
16 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
17 exe "let s:have_" . name . "=" . e
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
18 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
19 exe "return s:have_" . name
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
20 endfun
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
21
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
22 " Set b:gzip_comp_arg to the gzip argument to be used for compression, based on
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
23 " the flags in the compressed file.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
24 " The only compression methods that can be detected are max speed (-1) and max
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
25 " compression (-9).
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
26 fun s:set_compression(line)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
27 " get the Compression Method
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
28 let l:cm = char2nr(a:line[2])
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
29 " if it's 8 (DEFLATE), we can check for the compression level
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
30 if l:cm == 8
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
31 " get the eXtra FLags
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
32 let l:xfl = char2nr(a:line[8])
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
33 " max compression
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
34 if l:xfl == 2
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
35 let b:gzip_comp_arg = "-9"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
36 " min compression
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
37 elseif l:xfl == 4
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
38 let b:gzip_comp_arg = "-1"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
39 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
40 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
41 endfun
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
42
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
43
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
44 " After reading compressed file: Uncompress text in buffer with "cmd"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
45 fun gzip#read(cmd)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
46 " don't do anything if the cmd is not supported
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
47 if !s:check(a:cmd)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
48 return
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
49 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
50
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
51 " for gzip check current compression level and set b:gzip_comp_arg.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
52 silent! unlet b:gzip_comp_arg
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
53 if a:cmd[0] == 'g'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
54 call s:set_compression(getline(1))
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
55 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
56
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
57 " make 'patchmode' empty, we don't want a copy of the written file
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
58 let pm_save = &pm
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
59 set pm=
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
60 " remove 'a' and 'A' from 'cpo' to avoid the alternate file changes
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
61 let cpo_save = &cpo
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
62 set cpo-=a cpo-=A
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
63 " set 'modifiable'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
64 let ma_save = &ma
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
65 setlocal ma
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
66 " Reset 'foldenable', otherwise line numbers get adjusted.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
67 if has("folding")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
68 let fen_save = &fen
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
69 setlocal nofen
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
70 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
71
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
72 " when filtering the whole buffer, it will become empty
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
73 let empty = line("'[") == 1 && line("']") == line("$")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
74 let tmp = tempname()
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
75 let tmpe = tmp . "." . expand("<afile>:e")
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
76 if exists('*fnameescape')
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
77 let tmp_esc = fnameescape(tmp)
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
78 let tmpe_esc = fnameescape(tmpe)
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
79 else
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
80 let tmp_esc = escape(tmp, ' ')
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
81 let tmpe_esc = escape(tmpe, ' ')
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
82 endif
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
83 " write the just read lines to a temp file "'[,']w tmp.gz"
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
84 execute "silent '[,']w " . tmpe_esc
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
85 " uncompress the temp file: call system("gzip -dn tmp.gz")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
86 call system(a:cmd . " " . s:escape(tmpe))
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
87 if !filereadable(tmp)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
88 " uncompress didn't work! Keep the compressed file then.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
89 echoerr "Error: Could not read uncompressed file"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
90 let ok = 0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
91 else
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
92 let ok = 1
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
93 " delete the compressed lines; remember the line number
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
94 let l = line("'[") - 1
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
95 if exists(":lockmarks")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
96 lockmarks '[,']d _
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
97 else
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
98 '[,']d _
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
99 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
100 " read in the uncompressed lines "'[-1r tmp"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
101 " Use ++edit if the buffer was empty, keep the 'ff' and 'fenc' options.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
102 setlocal nobin
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
103 if exists(":lockmarks")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
104 if empty
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
105 execute "silent lockmarks " . l . "r ++edit " . tmp_esc
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
106 else
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
107 execute "silent lockmarks " . l . "r " . tmp_esc
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
108 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
109 else
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
110 execute "silent " . l . "r " . tmp_esc
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
111 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
112
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
113 " if buffer became empty, delete trailing blank line
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
114 if empty
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
115 silent $delete _
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
116 1
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
117 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
118 " delete the temp file and the used buffers
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
119 call delete(tmp)
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
120 silent! exe "bwipe " . tmp_esc
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
121 silent! exe "bwipe " . tmpe_esc
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
122 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
123
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
124 " Restore saved option values.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
125 let &pm = pm_save
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
126 let &cpo = cpo_save
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
127 let &l:ma = ma_save
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
128 if has("folding")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
129 let &l:fen = fen_save
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
130 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
131
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
132 " When uncompressed the whole buffer, do autocommands
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
133 if ok && empty
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
134 if exists('*fnameescape')
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
135 let fname = fnameescape(expand("%:r"))
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
136 else
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
137 let fname = escape(expand("%:r"), " \t\n*?[{`$\\%#'\"|!<")
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
138 endif
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
139 if &verbose >= 8
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
140 execute "doau BufReadPost " . fname
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
141 else
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
142 execute "silent! doau BufReadPost " . fname
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
143 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
144 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
145 endfun
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
146
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
147 " After writing compressed file: Compress written file with "cmd"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
148 fun gzip#write(cmd)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
149 " don't do anything if the cmd is not supported
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
150 if s:check(a:cmd)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
151 " Rename the file before compressing it.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
152 let nm = resolve(expand("<afile>"))
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
153 let nmt = s:tempname(nm)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
154 if rename(nm, nmt) == 0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
155 if exists("b:gzip_comp_arg")
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
156 call system(a:cmd . " " . b:gzip_comp_arg . " -- " . s:escape(nmt))
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
157 else
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
158 call system(a:cmd . " -- " . s:escape(nmt))
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
159 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
160 call rename(nmt . "." . expand("<afile>:e"), nm)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
161 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
162 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
163 endfun
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
164
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
165 " Before appending to compressed file: Uncompress file with "cmd"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
166 fun gzip#appre(cmd)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
167 " don't do anything if the cmd is not supported
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
168 if s:check(a:cmd)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
169 let nm = expand("<afile>")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
170
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
171 " for gzip check current compression level and set b:gzip_comp_arg.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
172 silent! unlet b:gzip_comp_arg
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
173 if a:cmd[0] == 'g'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
174 call s:set_compression(readfile(nm, "b", 1)[0])
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
175 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
176
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
177 " Rename to a weird name to avoid the risk of overwriting another file
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
178 let nmt = expand("<afile>:p:h") . "/X~=@l9q5"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
179 let nmte = nmt . "." . expand("<afile>:e")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
180 if rename(nm, nmte) == 0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
181 if &patchmode != "" && getfsize(nm . &patchmode) == -1
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
182 " Create patchmode file by creating the decompressed file new
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
183 call system(a:cmd . " -c -- " . s:escape(nmte) . " > " . s:escape(nmt))
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
184 call rename(nmte, nm . &patchmode)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
185 else
34
e170173ecb68 before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
186 call system(a:cmd . " -- " . s:escape(nmte))
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
187 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
188 call rename(nmt, nm)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
189 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
190 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
191 endfun
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
192
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
193 " find a file name for the file to be compressed. Use "name" without an
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
194 " extension if possible. Otherwise use a weird name to avoid overwriting an
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
195 " existing file.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
196 fun s:tempname(name)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
197 let fn = fnamemodify(a:name, ":r")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
198 if !filereadable(fn) && !isdirectory(fn)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
199 return fn
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
200 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
201 return fnamemodify(a:name, ":p:h") . "/X~=@l9q5"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
202 endfun
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
203
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
204 fun s:escape(name)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
205 " shellescape() was added by patch 7.0.111
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
206 if exists("*shellescape")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
207 return shellescape(a:name)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
208 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
209 return "'" . a:name . "'"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
210 endfun
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
211
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
212 " vim: set sw=2 :