finalización de la pestaña de Python Mac OSX 10.7 (Lion)

Antes de actualizar a Lion, tenía la pestaña completa trabajando en un shell de Python a través de la terminal. Siguiendo estas instrucciones , fue posible tener la pestaña completa trabajando.

Desde que me actualicé a Lion, ahora no puedo obtener la pestaña completa trabajando en una sesión de terminal de Python. He seguido las instrucciones anteriores a la carta, y todavía no funciona.

¿Hay alguna diferencia con el módulo readline en Lion? Conectarse a la opción ‘tab: completar’ ya no parece funcionar. Me pregunto si es un terminal que está ignorando readline, o si es python.

Versión de Python: 2.7.1

Editar:

Por tabulación completa, quiero decir que podría hacer algo como lo siguiente:

# django import MyModel MyModel.objects.a[TAB] # will complete to all() 

Apple no entrega la línea de lectura GNU con OS X. Se entrega BSD libedit que incluye una interfaz de compatibilidad de línea de lectura . El sistema Pythons enviado por Apple y los pitones de 64 bits / 32 bits de los instaladores de python.org se crean con libedit . El problema es que los comandos admitidos por libedit son completamente diferentes de los de readline (consulte, por ejemplo, la discusión aquí ). Los instaladores tradicionales de python.org de solo 32 bits utilizan GNL readline igual que otros distribuidores externos de Python para OS X, como MacPorts. Lo más probable es que anteriormente estuviera usando un Python de este tipo y no uno de Apple reciente. Tiene algunas opciones, además de modificar Django: puede instalar el módulo readline de reemplazo de terceros; o puede usar otro Python que viene con la línea de lectura de GNU. Sin embargo, no debe usar Pythons de solo 32 bits de python.org en 10.7 porque, desafortunadamente, Xcode 4 en 10.7 ya no incluye gcc-4.0 y el OS X 10.4u SDK que esos Pythons necesitan para construir e instalar paquetes con C módulos de extensión.

Al colocar lo siguiente en el archivo de inicio de python, se habilitará la finalización de las tabs tanto para la interfaz libedit como para el módulo típico de línea de lectura. Para obtener más información sobre el archivo de inicio de python, consulte aquí

 import readline import rlcompleter if 'libedit' in readline.__doc__: readline.parse_and_bind("bind ^I rl_complete") else: readline.parse_and_bind("tab: complete") 

Como utiliza libedit / editline, la syntax para habilitar el autocompletado es un poco diferente. Primero puede forzar los enlaces de emacs (como ocurre con readline si no estoy equivocado) escribiendo:

readline.parse_and_bind("bind -e")

Luego puede agregar autocompletado vinculado a su botón TAB (man editrc):

readline.parse_and_bind("bind '\t' rl_complete")

Y si desea admitir el sangrado y tiene un historial (que se encuentra en Internet), debería tener ese aspecto (a menos que haya cometido un error):

 import readline,rlcompleter ### Indenting class TabCompleter(rlcompleter.Completer): """Completer that supports indenting""" def complete(self, text, state): if not text: return (' ', None)[state] else: return rlcompleter.Completer.complete(self, text, state) readline.set_completer(TabCompleter().complete) ### Add autocompletion if 'libedit' in readline.__doc__: readline.parse_and_bind("bind -e") readline.parse_and_bind("bind '\t' rl_complete") else: readline.parse_and_bind("tab: complete") ### Add history import os histfile = os.path.join(os.environ["HOME"], ".pyhist") try: readline.read_history_file(histfile) except IOError: pass import atexit atexit.register(readline.write_history_file, histfile) del histfile