[Python-es] Problema con función para autocompletado
Ricardo Azpeitia Pimentel
razpeitia en gmail.com
Mie Jun 12 02:25:03 CEST 2013
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 <
nalonso en getrans.cu> 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
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20130611/dba199ff/attachment.html>
Más información sobre la lista de distribución Python-es