Perché l'impostazione di "mi" in LS_COLORS influisce sul completamento con le schede postgresql e python?

Aug 18 2020

Quindi ho una LS_COLORSconfigurazione personalizzata e in quella ho quanto segue:

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

miè per i file mancanti nella colonna di destra quando si è nella visualizzazione elenco di ls, ed orè per i file mancanti nella normale modalità ls, oppure a sinistra in modalità elenco. Quanto sopra lo imposta in modo che entrambi lampeggino in giallo brillante. L'ho impostato così perché pensavo che averlo lampeggiato sarebbe stato il modo più ovvio per avvisarmi di un collegamento mancante, il che funziona alla grande.

Ma il problema è quando eseguo il python in modalità interattiva e chiedo il completamento della scheda, ad esempio import reallora re.[tab key]. Invece di ottenere semplicemente un elenco normale, tutto ciò che è micontenuto LS_COLORSviene applicato ai suggerimenti. Quindi mi ritrovo con uno schermo pieno di testo lampeggiante che lo rende impossibile da leggere a qualsiasi velocità ragionevole.

La stessa cosa accade quando utilizzo il completamento tramite tabulazione nella console in modalità interattiva postgresql. Esattamente lo stesso di Python. La maggior parte degli altri programmi o simili vanno bene, e il completamento di bash va bene.

Questi programmi utilizzano lsper formattare il loro output? Al momento sono appena mitornato a qualcos'altro per aggirare il problema, e non importa perché posso ancora vedere i collegamenti interrotti tramite or. Ma sarei davvero curioso di sapere perché sta succedendo e se posso fermarlo.

Risposte

1 Quasímodo Aug 18 2020 at 23:24

Viene utilizzata la readline GNU , come si può confermare elencando i moduli predefiniti :

$ python3
>>> import sys
>>> sys.modules.keys()
dict_keys([...,'readline', 'atexit', 'rlcompleter'])

Readline, a sua volta, utilizza LS_COLORS. da man 3 readline,

colored-stats (Off)
Se impostato su On, readline mostra i possibili completamenti utilizzando colori diversi per indicare il tipo di file. Le definizioni dei colori sono prese dal valore della variabile d'ambiente LS_COLORS.

Se non sei convinto, torna alla sessione interattiva di Python e digita

>>> 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

Dopo disattivare colorati-previsti, i completamenti suggeriti ( bs(, ll(ecc) dovrebbero essere su colore normale del terminale. Il prefisso aeredita ancora il colore da LS_COLORSe puoi anche disabilitarlo con

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