Pourquoi définir 'mi' dans LS_COLORS affecte-t-il la complétion des onglets postgresql et python?
J'ai donc une LS_COLORS
configuration personnalisée , et en cela j'ai ce qui suit:
mi=05;01;33:
or=05;01;33:
mi
est pour les fichiers manquants dans la colonne de droite dans la vue liste de ls, et or
pour les fichiers manquants en mode ls normal, ou à gauche en mode liste. Ce qui précède le règle pour que les deux clignotent en jaune vif. Je l'ai réglé comme ça parce que je pensais que le faire clignoter serait le moyen le plus évident de me prévenir d'un lien manquant, ce qui fonctionne très bien.
Mais le problème est quand je lance le python en mode interactif et demande à la complétion, par exemple , import re
puis re.[tab key]
. Au lieu de simplement obtenir une liste normale dans tout ce qui est mi
en LS_COLORS
soit appliquée aux suggestions. Je me retrouve donc avec un écran plein de texte clignotant qui le rend à la limite impossible à lire à un rythme raisonnable.
La même chose se produit lorsque j'utilise la complétion par tabulation dans la console en mode interactif postgresql. Exactement la même chose que python. La plupart des autres programmes ou similaires fonctionnent bien, et l'achèvement bash est bien.
Ces programmes utilisent-ils ls
pour formater leur sortie? Je viens de passer mi
à autre chose pour contourner le problème, et cela n'a pas vraiment d'importance car je peux toujours voir des liens rompus via or
. Mais je serais vraiment curieux de savoir pourquoi cela se produit et si je peux l'arrêter.
Réponses
GNU readline est utilisé, comme cela peut être confirmé en listant les modules par défaut :
$ python3
>>> import sys
>>> sys.modules.keys()
dict_keys([...,'readline', 'atexit', 'rlcompleter'])
Readline, à son tour, utilise LS_COLORS
. De man 3 readline
,
colour-stats (Off)
Si réglé sur On, readline affiche les complétions possibles en utilisant différentes couleurs pour indiquer leur type de fichier. Les définitions de couleur sont tirées de la valeur de la variable d'environnement LS_COLORS.
Si vous n'êtes pas convaincu, revenez à la session python interactive et tapez
>>> a<TAB><TAB>
abs( all( and any( as ascii( assert async await
>>> import readline
>>> readline.parse_and_bind("set colored-stats off")
>>> a<TAB><TAB>
abs( all( and any( as ascii( assert async await
Après avoir désactivé les statistiques-couleurs, les finitions proposées ( bs(
, ll(
, etc.) devraient être sur la couleur normale du terminal. Le préfixe a
hérite toujours de la couleur LS_COLORS
et vous pouvez également le désactiver avec
readline.parse_and_bind("set colored-completion-prefix off")