¿Por qué la configuración de 'mi' en LS_COLORS afecta la finalización de las pestañas postgresql y python?

Aug 18 2020

Entonces tengo una LS_COLORSconfiguración personalizada , y en eso tengo lo siguiente:

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

mies para archivos faltantes en la columna de la derecha cuando está en la vista de lista de ls, y ores para archivos faltantes en modo ls normal, o en la izquierda en modo de lista. Lo anterior lo configura para que ambos parpadeen en amarillo brillante. Lo configuré así porque pensé que tenerlo parpadeando sería la forma más obvia de alertarme sobre un eslabón perdido, lo cual funciona muy bien.

Pero el problema es cuando ejecuto Python en modo interactivo y solicito completar la pestaña, por ejemplo, import reentonces re.[tab key]. En lugar de simplemente obtener una lista normal de lo que está en mien LS_COLORSobtiene aplicado a las sugerencias. Así que termino con una pantalla llena de texto parpadeante que hace que sea casi imposible de leer a un ritmo razonable.

Lo mismo sucede cuando uso la finalización de tabulación en la consola de modo interactivo de postgresql. Exactamente lo mismo que Python. Sin embargo, la mayoría de los otros programas o similares están bien, y la finalización de bash está bien.

¿Están usando estos programas lspara formatear su salida? Actualmente, he cambiado de minuevo a otra cosa para solucionar el problema, y ​​realmente no importa porque todavía puedo ver enlaces rotos a través de or. Pero tendría mucha curiosidad por saber por qué está sucediendo esto y si puedo detenerlo.

Respuestas

1 Quasímodo Aug 18 2020 at 23:24

Se está utilizando la línea de lectura GNU , como se puede confirmar enumerando los módulos predeterminados :

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

Readline, a su vez, utiliza LS_COLORS. desde man 3 readline,

color-stats (Off)
Si se establece en On, readline muestra posibles finalizaciones usando diferentes colores para indicar su tipo de archivo. Las definiciones de color se toman del valor de la variable de entorno LS_COLORS.

Si no está convencido, vuelva a la sesión interactiva de Python y escriba

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

Después de desactivar-estadísticas de colores, las terminaciones sugeridos ( bs(, ll(, etc.) deben estar en color normal de la terminal. El prefijo aaún hereda el color de LS_COLORSy también puede deshabilitarlo con

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