Pinte nomes de arquivos específicos (não extensões) na saída `ls` como Makefile ou CMakeLists.txt

Pinte nomes de arquivos específicos (não extensões) na saída `ls` como Makefile ou CMakeLists.txt

Atualmente estou trabalhando em um projeto C++. Estou usando o CMake como um sistema de compilação e adoraria que todos os arquivos relacionados ao CMake (como CMakeLists.txt) tivessem cores diferentes na lssaída do comando. Dessa forma, pude distingui-los facilmente dos arquivos de código-fonte.

Eu estava tentando usar dircolorse editar diretamente $LS_COLORSenv var. Eu falhei em ambos os casos. Parece que essas soluções fornecem apenas uma maneira de colorir alguns arquivos específicos do Linux (por exemplo, links) ou extensões selecionadas.

Para resumir, foi isso que eu fiz:

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"

A solução alternativa para o meu problema seria colorir os arquivos de origem ( .hxx, .cxx), mas eu gostaria de continuar colorindo apenas os arquivos CMake. Por outro lado, eu poderia apenas colorir .txte .cmakearquivos, mas todos os arquivos de texto seriam coloridos dessa maneira.

Colorir um Makefile (um arquivo sem extensão) na lssaída seria um ótimo bônus.

Estou usando o Debian 9 com bash4.4.12 e ls8.26.

Desde já, obrigado.

Responder1

Você pode fazer isso com 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

Responder2

Não sei se você pode fazer isso lsdiretamente. (Mas pode ser...)

Minha ideia seria canalizar a saída lspara sed, que pode colorir suas correspondências de regex.

Existe um trecho legal que faz isso:https://github.com/kepkin/dev-shell-essentials/blob/master/highlight.sh

Você poderia escrever uma cadeia de pipes que correspondesse a todos os arquivos cmake: ls | highlight blue CMakeLists.txt | highlight blue foobar.baz ...(e criar um alias para isso)

Mas é claro que isso é uma solução alternativa.

Minha escolha pessoal seria usar compilações fora do código-fonte e manter os arquivos cmake separados até certo ponto. Mas isso não é uma resposta à sua pergunta e pode não ser possível na estrutura do seu projeto ...

informação relacionada