我正在使用以下代码完成文本:
class MyCompleter(object): # Custom completer
def __init__(self, options):
self.options = sorted(options)
def complete(self, text, state):
if state == 0: # on first trigger, build possible matches
if text: # cache matches (entries that start with entered text)
self.matches = [s for s in self.options
if s and s.startswith(text)]
else: # no text entered, all matches possible
self.matches = self.options[:]
# return match indexed by state
try:
return self.matches[state]
except IndexError:
return None
def setCompleter(listOfItems):
readline.parse_and_bind('tab: complete')
readline.parse_and_bind('set editing-mode vi')
completer = MyCompleter(listOfItems)
readline.set_completer(completer.complete)
选项取自数据库。当我需要完成它 提供的选项不包含diacritic的国际字符。 我可以自定义代码以提供包含变音符号的选项吗?
答案 0 :(得分:1)
我怀疑你使用的是Python2;在Python3中,这可能“正常”。
您的数据库正在返回unicode
个对象,readline
库在使用前将其转换为字符串。默认情况下,此转换使用ascii编解码器,适用于u"Name"
,但u"Näme"
失败。
可能有助于替换此行:
completer = MyCompleter([item.encode('utf-8') for item in listOfItems])