Por que definir 'mi' em LS_COLORS afeta o postgresql e a conclusão da guia python?

Aug 18 2020

Portanto, tenho uma LS_COLORSconfiguração personalizada e, nela, tenho o seguinte:

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

mié para arquivos ausentes na coluna direita quando na visualização de lista do ls, e oré para arquivos ausentes no modo ls normal, ou à esquerda no modo de lista. A configuração acima define que ambos pisquem em amarelo brilhante. Eu defini assim porque pensei que ter o flash seria a maneira mais óbvia de me alertar sobre um elo perdido, o que funciona muito bem.

Mas o problema é quando executo o python no modo interativo e peço o preenchimento da guia, por exemplo, import reentão re.[tab key]. Em vez de ficar apenas uma lista normal, o que está em miem LS_COLORSé aplicado às sugestões. Então, acabo com uma tela cheia de texto piscando, o que torna quase impossível ler a qualquer taxa razoável.

A mesma coisa acontece quando eu uso o preenchimento de tabulação no console do modo interativo do postgresql. Exatamente o mesmo que python. A maioria dos outros programas ou similares funcionam, e a conclusão do bash também.

Esses programas estão usando lspara formatar sua saída? No momento, acabei de mudar de mivolta para outra coisa para contornar o problema, e isso realmente não importa porque ainda posso ver links quebrados via or. Mas estou muito curioso para saber por que isso está acontecendo e se posso impedir.

Respostas

1 Quasímodo Aug 18 2020 at 23:24

GNU readline está sendo usado, como pode ser confirmado listando os módulos padrão :

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

Readline, por sua vez, usa LS_COLORS. De man 3 readline,

colored-stats (Off)
Se definido como On, readline exibe as conclusões possíveis usando cores diferentes para indicar o tipo de arquivo. As definições de cores são tiradas do valor da variável de ambiente LS_COLORS.

Se você não está convencido, volte para a sessão Python interativa e digite

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

Depois de desactivar coloridas-estatísticas, as conclusões sugeridas ( bs(, ll(, etc.) deve ser em cor normal do terminal. O prefixo aainda herda a cor de LS_COLORSe você também pode desativá-lo com

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