Pregunta

Estoy escribiendo un poco de CLI en Python (como una extensión de Mercurial) y me gustaría apoyar para rellenar la ficha. En concreto, me gustaría lengüetas de sujeción en el símbolo y mostrar una lista de opciones de juego (al igual que bash).

Ejemplo: Introduzca nombre de sección:

 ext*TAB*  
 extensions  
 extras

El problema es que no estoy seguro de cómo atrapar a los Eventos de la pestaña. Estoy usando la API de Mercurial ui.prompt(), que simplemente está llamando raw_input() bajo el capó.

Por lo que yo sé, raw_input() sólo devuelve en 'entrar' y si un usuario entra en una pestaña, la cadena devuelta simplemente incluye una "\t".

¿Fue útil?

Solución

Para que utilice el readline módulo.

código más simple que puedo pensar en:

import readline
COMMANDS = ['extra', 'extension', 'stuff', 'errors',
            'email', 'foobar', 'foo']

def complete(text, state):
    for cmd in COMMANDS:
        if cmd.startswith(text):
            if not state:
                return cmd
            else:
                state -= 1

readline.parse_and_bind("tab: complete")
readline.set_completer(complete)
raw_input('Enter section name: ')

Ejemplo de uso:

Enter section name: <tab>
email      errors     extension  extra      foo        foobar    stuff
Enter section name: e<tab>
email      errors     extension  extra      
Enter section name: ext<tab>
extension  extra      

Además de la terminación, readline te ofrece:

  • edición de línea
  • combinación de teclas de configuración (emacs y modos VI incluidos)
  • Historia (flecha hacia arriba para recordar los valores anteriores)
  • Historia búsqueda, guardar y cargar

Otros consejos

Un excelente ejemplo de cómo hacer para rellenar la ficha en cooperación con readline se suministra en la biblioteca estándar como el rlcompleter módulo - no se puede utilizarlo como-se (que completa basa en nombres definidos actualmente en el pitón de principal y orden interna), pero muestra cómo hacer la tarea general y cómo conectarlo hasta readline.

Usted debe casi con toda seguridad a utilizar el cmd módulo , que ya implementa la implementación del tabulador y así sucesivamente, y probablemente otras partes de lo que estás tratando de hacer, utilizando el módulo readline y así sucesivamente. No tiene sentido reinventar la rueda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top