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 < nalo...@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@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ >
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/