Básicamente tienes problemas en los delimitadores y en que la función
completar_soluciones es mas bien una maquina de estados.
#!/usr/bin/python
# -*- coding: utf-8 -*
import readline
soluciones = ['Mtto al portafusible', 'Mtto al cable de alimentacion',
'Cambio de Cabezal', 'Cambio de TCF', 'Cambio de Antena',
'Cambio de Conector', 'Equipo OK', 'Cambio de fusible',
]
def completar_soluciones(text, state):
text = readline.get_line_buffer()
opciones = [i for i in soluciones if i.startswith(text)]
if state < len(opciones):
return opciones[state]
readline.parse_and_bind("tab: complete")
readline.set_completer(completar_soluciones)
readline.set_completer_delims('\n\r')
solucion = raw_input("Solucion:")
El 11 de junio de 2013 18:33, MSc. Ing. Nestor Alonso Torres <
[email protected]> escribió:
> Hola a todos:
>
> Estoy tratando de implementar el autocompletamiento con Tab en un
> script, sin embargo no logro el comportamiento "intuitivo".
>
> Por ejemplo, si tecleo "Ca"<Tab> la función completa hasta "Cambio de
> " (todo bien hasta aquí) y si a continuación tecleo "Ca" y presiono
> <Tab>, el comportamiento esperado es que autocompletara con "Cambio de
> Cabezal" sin embargo completa con "Cambio de Cambio de".
>
> Según parece, el tema es que readline solamente está capturando lo
> último que tecleo y eso es lo que pasa al completador en la variable
> "text". Naturalmente, la función "completar_soluciones" busca a su vez
> al comienzo de las cadenas almacenadas en la lista y eso es lo que
> provoca el comportamiento raro, solo que no se me ocurre como puedo
> hacer para que la función "completar_soluciones" reciba toda la línea y
> no solamente lo último tecleado.
>
> A continuación un código de ejemplo que reproduce el fallo (en Python
> 2.X).
>
> Agradeciendo su ayuda de antemano,
>
> nat
>
>
> #!/usr/bin/python
> # -*- coding: utf-8 -*
>
> import readline
>
> soluciones = ['Mtto al portafusible', 'Mtto al cable de alimentacion',
> 'Cambio de Cabezal', 'Cambio de TCF', 'Cambio de Antena',
> 'Cambio de Conector', 'Equipo OK', 'Cambio de fusible',
> ]
>
> def completar_soluciones(text, state):
> for reparacion in soluciones:
> if reparacion.startswith(text):
> if not state:
> return reparacion
> else:
> state -= 1
>
> readline.parse_and_bind("tab: complete")
> readline.set_completer(completar_soluciones)
> solucion = raw_input("Solucion:")
>
> _______________________________________________
> Python-es mailing list
> [email protected]
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/