2011-08-18 10 views
8

Acabo de empezar a aprender Python y estoy escribiendo mi propia función de completar pestañas para práctica/diversión (para que nadie nos diga rlcompleter). Sin embargo, estoy teniendo problemas para conseguir que python llame a la función. Mi código:Python: enlace una función a una clave

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

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

la salida esperada es que cuando pulso la tecla de tabulación se imprimiría lo que cada vez que había escrito, cómo cada vez esto no es lo que está sucediendo realmente, algún consejo?

+0

Necesita detallar lo que está sucediendo realmente. –

+0

No ocurre nada, algo está vinculado al botón de tabulación (porque ya no contiene pestañas), pero no ejecuta la función. Todo lo que sucede es que escucho ruido como si hubiera presionado una tecla inválida. – Trcx

Respuesta

2

Prueba esto:

import readline 

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

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

La pregunta Tab completion in Python's raw_input() (que era mi referencia) puede ayudar también.

+0

Voy a intentar esto en solo un minuto. – Trcx

+0

¡Eso funcionó perfectamente! Gracias. Solo una pregunta, ¿por qué necesita usar la línea readline.set_completer (tab_completer)? Pensé que la sintaxis parse_and_bind era ": " – Trcx

+1

Supongo que: creo que es el nombre de la tecla presionada, y es la rutina GNU readline. La línea parse_and_bind() indica a la línea de lectura de GNU que invoque su propia rutina "completa" cuando se presiona la tecla TAB. La línea set_completer especifica la rutina de Python a la que llama esa rutina completa. Consulte la FICHA: complete la línea en este ejemplo, archivo de inicio de lectura http://www.gnu.org/s/bash/manual/html_node/Sample-Init-File.html#Sample-Init-File para obtener evidencia de que el ": La sintaxis "es específica de la línea de lectura de GNU. –

Cuestiones relacionadas