Pourquoi définir 'mi' dans LS_COLORS affecte-t-il la complétion des onglets postgresql et python?

Aug 18 2020

J'ai donc une LS_COLORSconfiguration personnalisée , et en cela j'ai ce qui suit:

mi=05;01;33:
or=05;01;33:

miest pour les fichiers manquants dans la colonne de droite dans la vue liste de ls, et orpour 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 repuis re.[tab key]. Au lieu de simplement obtenir une liste normale dans tout ce qui est mien LS_COLORSsoit 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 lspour 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

1 Quasímodo Aug 18 2020 at 23:24

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 ahérite toujours de la couleur LS_COLORSet vous pouvez également le désactiver avec

readline.parse_and_bind("set colored-completion-prefix off")