On Mar 7, 9:31 am, mmarko <[email protected]> wrote:
> Since Vim supports Python on multiple platforms, it could be used
> to add support for multiple archive types. The functions below can
> pack/unpack gz, bz2 and zip (files can only be added "incrementally").
> The code is just a proof of concept and may be the starting point
> for a real vim-packer.
>
> Marko

Below is an untested piece of code that implements a file interface
that could be used to unpack files directly into vim buffers:

Marko

import vim

class VimBufferStream:
    def __init__(self, bufnr, mode):
        self.vimbuf = vim.buffers[bufnr]
        self.lastline = None
        if mode == 'w': del self.vimbuf[:]
        elif mode == 'a': pass
        else: pass # unknown mode, raise error

    def __del__(self):
        self.close()

    def close(self):
        if self.lastline != None:
        self.vimbuf.append(self.lastline)

    def write(self, data):
        if len(data) < 1: return
        EOL = "\n" #TODO: system dependant
        lines = data.split(EOL)
        if self.lastline != None:
            lines[0] = self.lastline + lines[0]
            self.lastline = None
        if not data.endswith(EOL):
            self.lastline = lines[-1]
            lines = lines[:-1]
        for line in lines: self.vimbuf.append(line + EOL)

To use:

def gzip_expand_to_buffer(fname, bufnr):
    fin = gzip.GzipFile(fname, 'rb')
    fout = VimBufferStream(bufnr, 'w')
    copyfile(fin, fout)
    fin.close()
    fout.close()

-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Reply via email to