2013-05-15 2 views
2

Я пытаюсь написать функцию для отображения пользовательского представления, когда пользователи нажимают кнопку вкладки. По-видимому, функция «set_completion_display_matches_hook» - это то, что мне нужно, я могу отобразить пользовательское представление, но проблема в том, что я должен нажать Enter, чтобы снова получить приглашение.Python: правильное использование set_completion_display_matches_hook

Раствор в python2, кажется, что (solution here):

def match_display_hook(self, substitution, matches, longest_match_length): 
    print '' 
    for match in matches: 
     print match 
    print self.prompt.rstrip(), 
    print readline.get_line_buffer(), 
    readline.redisplay() 

Но она не работает с Python3. Я сделал эти синтаксические изменения:

def match_display_hook(self, substitution, matches, longest_match_length): 
     print('\n----------------------------------------------\n') 
     for match in matches: 
      print(match) 
     print(self.prompt.rstrip() + readline.get_line_buffer()) 
     readline.redisplay() 

Любые идеи, пожалуйста?

ответ

0

Во-первых, код Python 2 использует запятые, чтобы оставить строку незавершенной. В Python 3, это делается с помощью end ключевого слова:

print(self.prompt.rstrip(), readline.get_line_buffer(), sep='', end='') 

Затем вровень требуется на самом деле отображать незавершенные линии (из-за линии буферизация):

sys.stdout.flush() 

redisplay() вызов не кажется быть нужным.

Окончательный код:

def match_display_hook(self, substitution, matches, longest_match_length): 
    print() 
    for match in matches: 
     print(match) 
    print(self.prompt.rstrip(), readline.get_line_buffer(), sep='', end='') 
    sys.stdout.flush() 
Смежные вопросы