53 votes

achèvement de l'onglet python Mac OSX 10.7 (Lion)

Avant de passer à lion, j'ai eu l'onglet de travail complète dans un python shell via un terminal. Suivant ces instructions, il était possible d'avoir onglet de travail complet.

Depuis la mise à jour de Lion, je suis maintenant incapable d'obtenir de l'onglet de travail complète dans une session de terminal de Python. J'ai suivi les instructions ci-dessus à la lettre, et il ne fonctionne toujours pas.

Est-il une différence avec la readline module dans le Lion? L'accrochage dans l'onglet:complet sur l'option " ne semble plus fonctionner. Je me demande si c'est la borne qui est ignorant readline, ou si c'est le python lui-même.

Python version: 2.7.1

Edit:

Par onglet complet, je veux dire que je pouvais faire quelque chose comme ce qui suit:

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

117voto

Ned Deily Points 40248

Apple ne fait pas d'envoi GNU readline avec OS X. Il n'navire BSD libedit qui comprend un readline de compatibilité de l'interface. Le système de Pythons livré par Apple et 64 bits/32 bits Pythons de python.org les installateurs sont construits avec de l' libedit. Le problème est que les commandes prises en charge par libedit sont complètement différentes de celles de l' readline (voir par exemple la discussion ici). Le traditionnel 32 bits uniquement python.org les installateurs de n'utiliser GNU readline comme le font certains autres de la 3e partie des distributeurs de Python pour OS X, comme MacPorts. Les Chances sont que vous avez déjà été en utilisant par exemple un Python et pas un Apple ces dernières une. Vous avez quelques options, en plus de la modification de Django: vous pouvez installer le remplacement de tiers readline module; ou vous pouvez utiliser un autre Python qui vient avec GNU readline. Cependant, vous ne devez pas utiliser l'python.org 32-bit seulement Pythons sur 10.7 parce que, malheureusement, Xcode 4 sur 10.7 ne comprend plus gcc-4.0 , et l'OS X 10.4 u SDK qui ces Pythons besoin pour construire et installer des paquets avec C modules d'extension.

Mettre la suite dans le python fichier de démarrage va activer la saisie semi-automatique pour le libedit de l'interface et de la readline module. Pour plus d'informations sur le python fichier de démarrage, voir ici

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

16voto

Camille Points 91

Comme elle utilise libedit / editline, la syntaxe permettant d'activer l'auto-complétion est un peu différente. Vous pouvez d’abord forcer les liaisons emacs (comme avec readline si je ne me trompe pas) en tapant:

readline.parse_and_bind("bind -e")

Ensuite, vous pouvez ajouter la complétion automatique liée à votre bouton TAB (man editrc):

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

Et si vous voulez supporter l'indentation et a une histoire (trouvée sur internet), ça devrait ressembler à ça (à moins que je ne me suis trompé):

 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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X