[Python-es] Problema con función para autocompletado

MSc. Ing. Nestor Alonso Torres nalonso en getrans.cu
Mie Jun 12 01:33:45 CEST 2013


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:")



Más información sobre la lista de distribución Python-es