[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