Patch: plugin/gzip.vim, maintain compression levels

Bram Moolenaar Bram@moolenaar.net
Wed, 18 May 2005 20:31:06 +0200


This is a MIME encoded message.  Decode it with "munpack"
or any other MIME reading software.  Mpack/munpack is available
via anonymous FTP in ftp.andrew.cmu.edu:pub/mpack/
---=_NextPart_84627.1116440513

James -

> On Mon, May 16, 2005 at 05:11:42PM +0200, Bram Moolenaar wrote:
> > > The patch adds support for maintaining the compression level when
> > > editing a .gz file.  If the gzip file was compressed using "max speed"
> > > or "max compression", Vim will detect and use that compression level.
> > > Otherwise, the default compression level is used (as before).
> >
> > Using an external command is a weird solution, the text is right there
> > in the Vim buffer.  You can use Vim commands to get the byte.
> 
> Thanks for pointing out the (now obvious) idea of using Vim to get the
> correct bytes.  I've attached an updated patch which does this.

I'm afraid I have given you a wrong hint.  When appending the compressed
file is not in a buffer, thus then it doesn't work.  And that's when it
would be most useful.

For Vim 7 we can use the readfile() function.  I don't know a simple,
portable solution for Vim 6.3.

There would be an error when using ":w file.gz", b:compression would not
be set.  It's easy to add a check for that:

      if exists("b:compression")
	call system(a:cmd . " " . b:compression . " " . nmt)
      else
	call system(a:cmd . " " . nmt)
      endif

Attached is my modified version of the plugin.  It seems to work OK for
writing and appending with Vim 7.

- Bram

- 
To the optimist, the glass is half full.
To the pessimist, the glass is half empty.
To the engineer, the glass is twice as big as it needs to be.

 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
 \\\     Buy LOTR 3 and help AIDS victims -- http://ICCF.nl/lotr.html   ///

---=_NextPart_84627.1116440513
Content-Type: application/octet-stream; name="gzip.vim"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="gzip.vim"
Content-MD5: 9dLGsMg2Be/DxiNiQsVT3A==

IiBWaW0gcGx1Z2luIGZvciBlZGl0aW5nIGNvbXByZXNzZWQgZmlsZXMuCiIgTWFpbnRhaW5l
cjogQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KIiBMYXN0IENoYW5nZTogMjAwNSBN
YXkgMTgKCiIgRXhpdCBxdWlja2x5IHdoZW46CiIgLSB0aGlzIHBsdWdpbiB3YXMgYWxyZWFk
eSBsb2FkZWQKIiAtIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldAoiIC0gc29tZSBhdXRvY29t
bWFuZHMgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgY29tcHJlc3NlZCBmaWxlcwppZiBl
eGlzdHMoImxvYWRlZF9nemlwIikgfHwgJmNwIHx8IGV4aXN0cygiI0J1ZlJlYWRQcmUjKi5n
eiIpCiAgZmluaXNoCmVuZGlmCmxldCBsb2FkZWRfZ3ppcCA9IDEKCmF1Z3JvdXAgZ3ppcAog
ICIgUmVtb3ZlIGFsbCBnemlwIGF1dG9jb21tYW5kcwogIGF1IQoKICAiIEVuYWJsZSBlZGl0
aW5nIG9mIGd6aXBwZWQgZmlsZXMKICAiIHNldCBiaW5hcnkgbW9kZSBiZWZvcmUgcmVhZGlu
ZyB0aGUgZmlsZQogICIgdXNlICJnemlwIC1kIiwgZ3VuemlwIGlzbid0IGFsd2F5cyBhdmFp
bGFibGUKICBhdXRvY21kIEJ1ZlJlYWRQcmUsRmlsZVJlYWRQcmUJKi5neiwqLmJ6MiwqLlog
c2V0bG9jYWwgYmluCiAgYXV0b2NtZCBCdWZSZWFkUG9zdCxGaWxlUmVhZFBvc3QJKi5neiAg
Y2FsbCBzOnJlYWQoImd6aXAgLWRuIikKICBhdXRvY21kIEJ1ZlJlYWRQb3N0LEZpbGVSZWFk
UG9zdAkqLmJ6MiBjYWxsIHM6cmVhZCgiYnppcDIgLWQiKQogIGF1dG9jbWQgQnVmUmVhZFBv
c3QsRmlsZVJlYWRQb3N0CSouWiAgIGNhbGwgczpyZWFkKCJ1bmNvbXByZXNzIikKICBhdXRv
Y21kIEJ1ZldyaXRlUG9zdCxGaWxlV3JpdGVQb3N0CSouZ3ogIGNhbGwgczp3cml0ZSgiZ3pp
cCIpCiAgYXV0b2NtZCBCdWZXcml0ZVBvc3QsRmlsZVdyaXRlUG9zdAkqLmJ6MiBjYWxsIHM6
d3JpdGUoImJ6aXAyIikKICBhdXRvY21kIEJ1ZldyaXRlUG9zdCxGaWxlV3JpdGVQb3N0CSou
WiAgIGNhbGwgczp3cml0ZSgiY29tcHJlc3MgLWYiKQogIGF1dG9jbWQgRmlsZUFwcGVuZFBy
ZQkJCSouZ3ogIGNhbGwgczphcHByZSgiZ3ppcCAtZG4iKQogIGF1dG9jbWQgRmlsZUFwcGVu
ZFByZQkJCSouYnoyIGNhbGwgczphcHByZSgiYnppcDIgLWQiKQogIGF1dG9jbWQgRmlsZUFw
cGVuZFByZQkJCSouWiAgIGNhbGwgczphcHByZSgidW5jb21wcmVzcyIpCiAgYXV0b2NtZCBG
aWxlQXBwZW5kUG9zdAkJKi5neiAgY2FsbCBzOndyaXRlKCJnemlwIikKICBhdXRvY21kIEZp
bGVBcHBlbmRQb3N0CQkqLmJ6MiBjYWxsIHM6d3JpdGUoImJ6aXAyIikKICBhdXRvY21kIEZp
bGVBcHBlbmRQb3N0CQkqLlogICBjYWxsIHM6d3JpdGUoImNvbXByZXNzIC1mIikKYXVncm91
cCBFTkQKCiIgRnVuY3Rpb24gdG8gY2hlY2sgdGhhdCBleGVjdXRpbmcgImNtZCBbLWZdIiB3
b3Jrcy4KIiBUaGUgcmVzdWx0IGlzIGNhY2hlZCBpbiBzOmhhdmVfImNtZCIgZm9yIHNwZWVk
LgpmdW4gczpjaGVjayhjbWQpCiAgbGV0IG5hbWUgPSBzdWJzdGl0dXRlKGE6Y21kLCAnXChc
UypcKS4qJywgJ1wxJywgJycpCiAgaWYgIWV4aXN0cygiczpoYXZlXyIgLiBuYW1lKQogICAg
bGV0IGUgPSBleGVjdXRhYmxlKG5hbWUpCiAgICBpZiBlIDwgMAogICAgICBsZXQgciA9IHN5
c3RlbShuYW1lIC4gIiAtLXZlcnNpb24iKQogICAgICBsZXQgZSA9IChyICF+ICJub3QgZm91
bmQiICYmIHIgIT0gIiIpCiAgICBlbmRpZgogICAgZXhlICJsZXQgczpoYXZlXyIgLiBuYW1l
IC4gIj0iIC4gZQogIGVuZGlmCiAgZXhlICJyZXR1cm4gczpoYXZlXyIgLiBuYW1lCmVuZGZ1
bgoKIiBTZXQgYjpnemlwX2NvbXBfYXJnIHRvIHRoZSBnemlwIGFyZ3VtZW50IHRvIGJlIHVz
ZWQgZm9yIGNvbXByZXNzaW9uLCBiYXNlZCBvbgoiIHRoZSBmbGFncyBpbiB0aGUgY29tcHJl
c3NlZCBmaWxlLgoiIFRoZSBvbmx5IGNvbXByZXNzaW9uIG1ldGhvZHMgdGhhdCBjYW4gYmUg
ZGV0ZWN0ZWQgYXJlIG1heCBzcGVlZCAoLTEpIGFuZCBtYXgKIiBjb21wcmVzc2lvbiAoLTkp
LgpmdW4gczpzZXRfY29tcHJlc3Npb24obGluZSkKICAiIGdldCB0aGUgQ29tcHJlc3Npb24g
TWV0aG9kCiAgbGV0IGw6Y20gPSBjaGFyMm5yKGE6bGluZVsyXSkKICAiIGlmIGl0J3MgOCAo
REVGTEFURSksIHdlIGNhbiBjaGVjayBmb3IgdGhlIGNvbXByZXNzaW9uIGxldmVsCiAgaWYg
bDpjbSA9PSA4CiAgICAiIGdldCB0aGUgZVh0cmEgRkxhZ3MKICAgIGxldCBsOnhmbCA9IGNo
YXIybnIoYTpsaW5lWzhdKQogICAgIiBtYXggY29tcHJlc3Npb24KICAgIGlmIGw6eGZsID09
IDIKICAgICAgbGV0IGI6Z3ppcF9jb21wX2FyZyA9ICItOSIKICAgICIgbWluIGNvbXByZXNz
aW9uCiAgICBlbHNlaWYgbDp4ZmwgPT0gNAogICAgICBsZXQgYjpnemlwX2NvbXBfYXJnID0g
Ii0xIgogICAgZW5kaWYKICBlbmRpZgplbmRmdW4KCgoiIEFmdGVyIHJlYWRpbmcgY29tcHJl
c3NlZCBmaWxlOiBVbmNvbXByZXNzIHRleHQgaW4gYnVmZmVyIHdpdGggImNtZCIKZnVuIHM6
cmVhZChjbWQpCiAgIiBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgY21kIGlzIG5vdCBzdXBw
b3J0ZWQKICBpZiAhczpjaGVjayhhOmNtZCkKICAgIHJldHVybgogIGVuZGlmCgogICIgZm9y
IGd6aXAgY2hlY2sgY3VycmVudCBjb21wcmVzc2lvbiBsZXZlbCBhbmQgc2V0IGI6Z3ppcF9j
b21wX2FyZy4KICBzaWxlbnQhIHVubGV0IGI6Z3ppcF9jb21wX2FyZwogIGlmIGE6Y21kWzBd
ID09ICdnJwogICAgY2FsbCBzOnNldF9jb21wcmVzc2lvbihnZXRsaW5lKDEpKQogIGVuZGlm
CgogICIgbWFrZSAncGF0Y2htb2RlJyBlbXB0eSwgd2UgZG9uJ3Qgd2FudCBhIGNvcHkgb2Yg
dGhlIHdyaXR0ZW4gZmlsZQogIGxldCBwbV9zYXZlID0gJnBtCiAgc2V0IHBtPQogICIgcmVt
b3ZlICdhJyBhbmQgJ0EnIGZyb20gJ2NwbycgdG8gYXZvaWQgdGhlIGFsdGVybmF0ZSBmaWxl
IGNoYW5nZXMKICBsZXQgY3BvX3NhdmUgPSAmY3BvCiAgc2V0IGNwby09YSBjcG8tPUEKICAi
IHNldCAnbW9kaWZpYWJsZScKICBsZXQgbWFfc2F2ZSA9ICZtYQogIHNldGxvY2FsIG1hCiAg
IiB3aGVuIGZpbHRlcmluZyB0aGUgd2hvbGUgYnVmZmVyLCBpdCB3aWxsIGJlY29tZSBlbXB0
eQogIGxldCBlbXB0eSA9IGxpbmUoIidbIikgPT0gMSAmJiBsaW5lKCInXSIpID09IGxpbmUo
IiQiKQogIGxldCB0bXAgPSB0ZW1wbmFtZSgpCiAgbGV0IHRtcGUgPSB0bXAgLiAiLiIgLiBl
eHBhbmQoIjxhZmlsZT46ZSIpCiAgIiB3cml0ZSB0aGUganVzdCByZWFkIGxpbmVzIHRvIGEg
dGVtcCBmaWxlICInWywnXXcgdG1wLmd6IgogIGV4ZWN1dGUgInNpbGVudCAnWywnXXcgIiAu
IHRtcGUKICAiIHVuY29tcHJlc3MgdGhlIHRlbXAgZmlsZTogY2FsbCBzeXN0ZW0oImd6aXAg
LWRuIHRtcC5neiIpCiAgY2FsbCBzeXN0ZW0oYTpjbWQgLiAiICIgLiB0bXBlKQogIGlmICFm
aWxlcmVhZGFibGUodG1wKQogICAgIiB1bmNvbXByZXNzIGRpZG4ndCB3b3JrISAgS2VlcCB0
aGUgY29tcHJlc3NlZCBmaWxlIHRoZW4uCiAgICBlY2hvZXJyICJFcnJvcjogQ291bGQgbm90
IHJlYWQgdW5jb21wcmVzc2VkIGZpbGUiCiAgICByZXR1cm4KICBlbmRpZgogICIgZGVsZXRl
IHRoZSBjb21wcmVzc2VkIGxpbmVzOyByZW1lbWJlciB0aGUgbGluZSBudW1iZXIKICBsZXQg
bCA9IGxpbmUoIidbIikgLSAxCiAgaWYgZXhpc3RzKCI6bG9ja21hcmtzIikKICAgIGxvY2tt
YXJrcyAnWywnXWQgXwogIGVsc2UKICAgICdbLCddZCBfCiAgZW5kaWYKICAiIHJlYWQgaW4g
dGhlIHVuY29tcHJlc3NlZCBsaW5lcyAiJ1stMXIgdG1wIgogIHNldGxvY2FsIG5vYmluCiAg
aWYgZXhpc3RzKCI6bG9ja21hcmtzIikKICAgIGV4ZWN1dGUgInNpbGVudCBsb2NrbWFya3Mg
IiAuIGwgLiAiciAiIC4gdG1wCiAgZWxzZQogICAgZXhlY3V0ZSAic2lsZW50ICIgLiBsIC4g
InIgIiAuIHRtcAogIGVuZGlmCgogICIgaWYgYnVmZmVyIGJlY2FtZSBlbXB0eSwgZGVsZXRl
IHRyYWlsaW5nIGJsYW5rIGxpbmUKICBpZiBlbXB0eQogICAgc2lsZW50ICRkZWxldGUgXwog
ICAgMQogIGVuZGlmCiAgIiBkZWxldGUgdGhlIHRlbXAgZmlsZSBhbmQgdGhlIHVzZWQgYnVm
ZmVycwogIGNhbGwgZGVsZXRlKHRtcCkKICBzaWxlbnQhIGV4ZSAiYndpcGUgIiAuIHRtcAog
IHNpbGVudCEgZXhlICJid2lwZSAiIC4gdG1wZQogIGxldCAmcG0gPSBwbV9zYXZlCiAgbGV0
ICZjcG8gPSBjcG9fc2F2ZQogIGxldCAmbDptYSA9IG1hX3NhdmUKICAiIFdoZW4gdW5jb21w
cmVzc2VkIHRoZSB3aG9sZSBidWZmZXIsIGRvIGF1dG9jb21tYW5kcwogIGlmIGVtcHR5CiAg
ICBpZiAmdmVyYm9zZSA+PSA4CiAgICAgIGV4ZWN1dGUgImRvYXUgQnVmUmVhZFBvc3QgIiAu
IGV4cGFuZCgiJTpyIikKICAgIGVsc2UKICAgICAgZXhlY3V0ZSAic2lsZW50ISBkb2F1IEJ1
ZlJlYWRQb3N0ICIgLiBleHBhbmQoIiU6ciIpCiAgICBlbmRpZgogIGVuZGlmCmVuZGZ1bgoK
IiBBZnRlciB3cml0aW5nIGNvbXByZXNzZWQgZmlsZTogQ29tcHJlc3Mgd3JpdHRlbiBmaWxl
IHdpdGggImNtZCIKZnVuIHM6d3JpdGUoY21kKQogICIgZG9uJ3QgZG8gYW55dGhpbmcgaWYg
dGhlIGNtZCBpcyBub3Qgc3VwcG9ydGVkCiAgaWYgczpjaGVjayhhOmNtZCkKICAgICIgUmVu
YW1lIHRoZSBmaWxlIGJlZm9yZSBjb21wcmVzc2luZyBpdC4KICAgIGxldCBubSA9IHJlc29s
dmUoZXhwYW5kKCI8YWZpbGU+IikpCiAgICBsZXQgbm10ID0gczp0ZW1wbmFtZShubSkKICAg
IGlmIHJlbmFtZShubSwgbm10KSA9PSAwCiAgICAgIGlmIGV4aXN0cygiYjpnemlwX2NvbXBf
YXJnIikKCWNhbGwgc3lzdGVtKGE6Y21kIC4gIiAiIC4gYjpnemlwX2NvbXBfYXJnIC4gIiAi
IC4gbm10KQogICAgICBlbHNlCgljYWxsIHN5c3RlbShhOmNtZCAuICIgIiAuIG5tdCkKICAg
ICAgZW5kaWYKICAgICAgY2FsbCByZW5hbWUobm10IC4gIi4iIC4gZXhwYW5kKCI8YWZpbGU+
OmUiKSwgbm0pCiAgICBlbmRpZgogIGVuZGlmCmVuZGZ1bgoKIiBCZWZvcmUgYXBwZW5kaW5n
IHRvIGNvbXByZXNzZWQgZmlsZTogVW5jb21wcmVzcyBmaWxlIHdpdGggImNtZCIKZnVuIHM6
YXBwcmUoY21kKQogICIgZG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGNtZCBpcyBub3Qgc3Vw
cG9ydGVkCiAgaWYgczpjaGVjayhhOmNtZCkKICAgIGxldCBubSA9IGV4cGFuZCgiPGFmaWxl
PiIpCgogICAgIiBmb3IgZ3ppcCBjaGVjayBjdXJyZW50IGNvbXByZXNzaW9uIGxldmVsIGFu
ZCBzZXQgYjpnemlwX2NvbXBfYXJnLgogICAgc2lsZW50ISB1bmxldCBiOmd6aXBfY29tcF9h
cmcKICAgIGlmIGE6Y21kWzBdID09ICdnJwogICAgICBjYWxsIHM6c2V0X2NvbXByZXNzaW9u
KHJlYWRmaWxlKG5tLCAiYiIsIDEpWzBdKQogICAgZW5kaWYKCiAgICAiIFJlbmFtZSB0byBh
IHdlaXJkIG5hbWUgdG8gYXZvaWQgdGhlIHJpc2sgb2Ygb3ZlcndyaXRpbmcgYW5vdGhlciBm
aWxlCiAgICBsZXQgbm10ID0gZXhwYW5kKCI8YWZpbGU+OnA6aCIpIC4gIi9Yfj1AbDlxNSIK
ICAgIGxldCBubXRlID0gbm10IC4gIi4iIC4gZXhwYW5kKCI8YWZpbGU+OmUiKQogICAgaWYg
cmVuYW1lKG5tLCBubXRlKSA9PSAwCiAgICAgIGlmICZwYXRjaG1vZGUgIT0gIiIgJiYgZ2V0
ZnNpemUobm0gLiAmcGF0Y2htb2RlKSA9PSAtMQoJIiBDcmVhdGUgcGF0Y2htb2RlIGZpbGUg
YnkgY3JlYXRpbmcgdGhlIGRlY29tcHJlc3NlZCBmaWxlIG5ldwoJY2FsbCBzeXN0ZW0oYTpj
bWQgLiAiIC1jICIgLiBubXRlIC4gIiA+ICIgLiBubXQpCgljYWxsIHJlbmFtZShubXRlLCBu
bSAuICZwYXRjaG1vZGUpCiAgICAgIGVsc2UKCWNhbGwgc3lzdGVtKGE6Y21kIC4gIiAiIC4g
bm10ZSkKICAgICAgZW5kaWYKICAgICAgY2FsbCByZW5hbWUobm10LCBubSkKICAgIGVuZGlm
CiAgZW5kaWYKZW5kZnVuCgoiIGZpbmQgYSBmaWxlIG5hbWUgZm9yIHRoZSBmaWxlIHRvIGJl
IGNvbXByZXNzZWQuICBVc2UgIm5hbWUiIHdpdGhvdXQgYW4KIiBleHRlbnNpb24gaWYgcG9z
c2libGUuICBPdGhlcndpc2UgdXNlIGEgd2VpcmQgbmFtZSB0byBhdm9pZCBvdmVyd3JpdGlu
ZyBhbgoiIGV4aXN0aW5nIGZpbGUuCmZ1biBzOnRlbXBuYW1lKG5hbWUpCiAgbGV0IGZuID0g
Zm5hbWVtb2RpZnkoYTpuYW1lLCAiOnIiKQogIGlmICFmaWxlcmVhZGFibGUoZm4pICYmICFp
c2RpcmVjdG9yeShmbikKICAgIHJldHVybiBmbgogIGVuZGlmCiAgcmV0dXJuIGZuYW1lbW9k
aWZ5KGE6bmFtZSwgIjpwOmgiKSAuICIvWH49QGw5cTUiCmVuZGZ1bgoKIiB2aW06IHNldCBz
dz0yIDoK

---=_NextPart_84627.1116440513--