'Return the next possible completion for \'text\'.
If a command has not been entered, then complete against command list.
Otherwise try to call complete_<command> to get list of completions.'

def complete(self, text, state):

    if (state == 0):
        original_line = readline.get_line_buffer()
        line = original_line.lstrip()
        stripped = (len(original_line) - len(line))
        start_index = (readline.get_begidx() - stripped)
        end_index = (readline.get_endidx() - stripped)
        if (start_index > 0):
            (cmd, args) = self.parse_line(line)
            if (cmd == ''):
                complete_function = self.default_completer
            else:
                try:
                    complete_function = getattr(self, ('complete_' + cmd))
                except AttributeError:
                    complete_function = self.default_completer
        else:
            complete_function = self.raw_command_completer
        self.completion_matches = complete_function(text, line, start_index, end_index)
    try:
        return self.completion_matches[state]
    except IndexError:
        return None
