2011-08-18 29 views
8

我剛開始學習python,並正在編寫自己的tab-completion函數來練習/樂趣(所以沒有人告訴我們rlcompleter)。我有一些麻煩,但實際上讓python來調用函數。我的代碼:Python:將一個函數綁定到一個鍵

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

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

預期的輸出是,當我按下TAB鍵,將打印什麼都我輸入了,怎麼過,這不是什麼是真正發生的事情,有什麼建議?

+0

您需要詳細說明實際發生的情況。 –

+0

什麼也沒有發生,某些東西被綁定到標籤按鈕(因爲它不再是標籤),但它不運行該功能。發生的一切就是我聽到像按下無效鍵那樣的噪音。 – Trcx

回答

2

試試這個:

import readline 

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

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

問題Tab completion in Python's raw_input() (這是我自己參考)可能也有幫助。

+0

我會在一分鐘內嘗試。 – Trcx

+0

完美的工作!謝謝。只有一個問題,爲什麼你需要使用readline.set_completer(tab_completer)行?我認爲parse_and_bind語法是「」 – Trcx

+1

我猜測:我認爲是按下的鍵的名稱,是GNU readline例程。當按下TAB鍵時,parse_and_bind()行指示GNU readline調用它自己的「完成」例程。 set_completer行指定由該完整例程調用的Python例程。請參閱本示例readline init文件中的TAB:complete行http://www.gnu.org/s/bash/manual/html_node/Sample-Init-File.html#Sample-Init-File以證明「「語法特定於GNU readline。 –

相關問題