Perché l'impostazione di "mi" in LS_COLORS influisce sul completamento con le schede postgresql e python?
Quindi ho una LS_COLORS
configurazione 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 re
allora re.[tab key]
. Invece di ottenere semplicemente un elenco normale, tutto ciò che è mi
contenuto LS_COLORS
viene 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 ls
per formattare il loro output? Al momento sono appena mi
tornato 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
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 a
eredita ancora il colore da LS_COLORS
e puoi anche disabilitarlo con
readline.parse_and_bind("set colored-completion-prefix off")