按特定顺序完成关键字的选项卡

时间:2017-08-31 05:50:27

标签: python readline tab-completion

我在程序中使用以下代码完成标签

import readline
import logging
import sys

LOG_FILENAME = '/tmp/completer.log'
logging.basicConfig(filename=LOG_FILENAME,
                    level=logging.DEBUG,
                    )

class SimpleCompleter(object):

    def __init__(self, options):
        self.options = sorted(options)
        return

    def complete(self, text, state):
        response = None
        if state == 0:
            # This is the first time for this text, so build a match list.
            if text:
                self.matches = [s
                                for s in self.options
                                if s and s.startswith(text)]
                logging.debug('Text: %s', text)
                logging.debug('%s matches: %s', repr(text), self.matches)
            else:
                self.matches = self.options[:]
                logging.debug('(empty input) matches: %s', self.matches)

        # Return the state'th item from the match list,
        # if we have that many.
        try:
            response = self.matches[state]
        except IndexError:
            response = None
        logging.debug('complete(%s, %s) => %s',
                      repr(text), state, repr(response))
        return response

def input_loop():
    line = ''
    while line != 'stop':
        line = input('>')
        print('Dispatch %s' % line)

# Register our completer function
readline.set_completer(SimpleCompleter(['CREATE', 'INPUT', 'USERNAME', 'VIEW']+ [account_names]).complete)

# Use the tab key for completion
readline.parse_and_bind('tab: complete')

# Prompt the user for text
input_loop()

但是代码接受任何顺序的关键字,如何更改它以便按特定顺序处理关键字。例如,如果第一个关键字是CREATE next标签,则完成不应找到任何匹配项并允许用户输入帐户名称。同样,如果第一个关键字是INPUT,则它应匹配USERNAME或PASSWORD,然后匹配帐户名称。是否可以使用readline执行此操作?

1 个答案:

答案 0 :(得分:0)

readline.get_line_buffer()获取整个缓冲文本,您可以根据需要从中创建匹配项。