2011-08-18 18 views
8

Właśnie rozpoczął naukę Python i piszę własną funkcję Zakładka uzupełniania dla praktyki/zabawy (tak nikt mi powiedzieć nam rlcompleter). Mam kłopot z uzyskaniem pytona, aby zadzwonił do tej funkcji. Mój kod:Python: powiązać funkcję klucza

import readline 
def tab_completer(): 
    print readline.get_line_buffer() 

readline.parse_and_bind("tab: tab_completer") 
while True: 
    raw_input("Prompt") 

oczekiwany wynik jest, że kiedy nacisnąć klawisz tabulatora byłoby wydrukować to, co kiedykolwiek miałem wpisane, jak nigdy nie jest to, co się rzeczywiście dzieje, jakieś rady?

+0

Musisz szczegółowo opisać, co się naprawdę dzieje. –

+0

Nic się nie dzieje, coś jest powiązane z przyciskiem tabulacji (ponieważ nie ma już tabulatorów), ale nie uruchamia tej funkcji. Wszystko, co się dzieje, to słyszę hałas, jakbym naciskał nieważny klucz. – Trcx

Odpowiedz

2

Spróbuj tego:

import readline 

def tab_completer(text, state): 
    print "\ntext:", text 

readline.parse_and_bind("tab: complete") 
readline.set_completer(tab_completer) 
raw_input('Prompt: ') 

Pytanie Tab completion in Python's raw_input() (który był moim odniesienia) również może pomóc.

+0

Spróbuję to za chwilę. – Trcx

+0

To zadziałało idealnie! Dziękuję Ci. Tylko jedno pytanie, dlaczego musisz użyć linii readline.set_completer (tab_completer)? Myślałem, że składnia parse_and_bind była „: ” – Trcx

+1

Zgaduję: Wierzę, że to nazwa klucza wciśnięty, a jest readline rutyna GNU. Linia parse_and_bind() instruuje linię poleceń GNU, aby wywoływała swoją własną "pełną" procedurę, gdy wciśnięty jest klawisz TAB. Linia set_completer określa procedurę Pythona, która jest wywoływana przez tę kompletną procedurę. Patrz zakładka: kompletną linię w tym przykładzie readline pliku inicjującego http://www.gnu.org/s/bash/manual/html_node/Sample-Init-File.html#Sample-Init-File za dowód, że ": Składnia "jest specyficzna dla readline GNU. –

Powiązane problemy