Coloree nombres de archivos específicos (no extensiones) en la salida `ls` como Makefile o CMakeLists.txt

Coloree nombres de archivos específicos (no extensiones) en la salida `ls` como Makefile o CMakeLists.txt

Actualmente estoy trabajando en un proyecto de C++. Estoy usando CMake como sistema de compilación y me encantaría que todos los archivos relacionados con CMake (como CMakeLists.txt) tengan colores diferentes en la lssalida del comando. De esta manera podría distinguirlos fácilmente de los archivos de código fuente.

Estaba intentando usar dircolorsy editar directamente $LS_COLORSenv var. Fallé en ambos casos. Parece que esas soluciones sólo proporcionan una forma de colorear algunos archivos específicos de Linux (por ejemplo, enlaces) o extensiones seleccionadas.

Para resumir, esto es lo que hice:

OLD_LS_COLORS=$LS_COLORS # Backup
export LS_COLORS="${LS_COLORS}CMakeLists.txt=00;36:" # Adding it at the beginning of the list also fails
ls # No colors at all
export LS_COLORS=$OLD_LS_COLORS # Cleanup
dircolors -p > ~/.dir_colors
echo "CMakeLists.txt 01;33" >> ~/.dir_colors
eval `dircolors ~/.dir_colors` # Throws "unrecognized keyword CMakeLists.txt"

La solución alternativa a mi problema sería colorear los archivos fuente ( .hxx, .cxx), pero me gustaría seguir coloreando solo los archivos CMake. Por otro lado, podría simplemente colorear .txty .cmakearchivos, pero luego todos los archivos de texto se colorearían de esa manera.

Colorear un Makefile (un archivo sin extensión) en lsla salida sería una buena ventaja.

Estoy usando Debian 9 con bash4.4.12 y ls8.26.

Gracias de antemano.

Respuesta1

Puedes hacer eso con ls.

*Makefile       38;5;155
*CMakeLists.txt 48;5;89;38;5;197;1;3;4;7

Verhttps://github.com/trapd00r/LS_COLORS/blob/master/LS_COLORS

Respuesta2

No sé si puedes hacerlo lsdirectamente. (Pero podría ser...)

Mi idea sería canalizar la salida de lssed, que puede colorear sus coincidencias de expresiones regulares.

Hay un bonito fragmento que hace esto:https://github.com/kepkin/dev-shell-essentials/blob/master/highlight.sh

Podría escribir una cadena de tuberías que coincida con todos los archivos cmake: ls | highlight blue CMakeLists.txt | highlight blue foobar.baz ...(y crear un alias para esto)

Pero esta es, por supuesto, una solución.

Mi elección personal sería utilizar compilaciones externas y mantener los archivos cmake separados hasta cierto punto. Pero esto no es una respuesta a su pregunta y podría no ser posible en la estructura de su proyecto...

información relacionada