Beispiel #1
0
def all_preceding_lines(mode, row=None):
    # In normal mode, generates (ROW, LEVEL) backwards for all non-empty lines
    # before ROW; a first line of the file is never considered empty for this
    # purpose, as it is then the root topic.  In visual mode, generates (ROW,
    # LEVEL) for all non-empty selected lines from last to first.
    buffer = vim.current.buffer
    if 'n' in mode:
        if row is None:
            row, col = vim.current.window.cursor
        row = int(vim.eval('prevnonblank(%d)' % (row - 1)))
        first = 1
    elif 'v' in mode:
        assert row is None, row
        row, col = buffer.mark('>')
        if not buffer[row-1]:
            row = int(vim.eval('prevnonblank(%d)' % (row - 1)))
        first, col = buffer.mark('<')
    if 's' in mode:
        while first <= row:
            skip = int(vim.eval('foldclosed(%d)' % row))
            if skip < 0:
                yield row_and_level(row)
            else:
                row = skip
            row = int(vim.eval('prevnonblank(%d)' % (row - 1)))
    else:
        while first <= row:
            yield row_and_level(row)
            row = int(vim.eval('prevnonblank(%d)' % (row - 1)))
    if 'n' in mode and len(buffer) > 0 and not buffer[0]:
        if not ('s' in mode and is_invisible(1)):
            yield 1, 0
Beispiel #2
0
def all_following_lines(mode, row=None):
    # In normal mode, generates (ROW, LEVEL) forward for all non-empty lines
    # after ROW.  In visual mode, generates (ROW, LEVEL) for all non-empty
    # selected lines from first to last.
    buffer = vim.current.buffer
    if 'n' in mode:
        if row is None:
            row, col = vim.current.window.cursor
        row = int(vim.eval('nextnonblank(%d)' % (row + 1)))
        last = len(buffer)
    elif 'v' in mode:
        assert row is None, row
        row, col = buffer.mark('<')
        if not buffer[row-1]:
            row = int(vim.eval('nextnonblank(%d)' % (row + 1)))
        last, col = buffer.mark('>')
    if 's' in mode:
        while 0 < row <= last:
            skip = int(vim.eval('foldclosedend(%d)' % row))
            if skip < 0:
                yield row_and_level(row)
            else:
                row = skip
            row = int(vim.eval('nextnonblank(%d)' % (row + 1)))
    else:
        while 0 < row <= last:
            yield row_and_level(row)
            row = int(vim.eval('nextnonblank(%d)' % (row + 1)))
Beispiel #3
0
def is_invisible(row=None):
    # Tells if the line at ROW is within a currently closed fold.
    if row is None:
        row, col = vim.current.window.cursor
    return int(vim.eval('foldclosed(%d)' % row)) >= 0