Existe uma maneira de obter a lista de pastas controladas pelo SVN com cores diferentes no terminal? Como um apelido para "ls". Então, quando digitamos "ls", todas as pastas com uma subpasta ".svn" devem ser amarelas, por exemplo?
Obrigado. (Desculpe se essa é uma pergunta estúpida.)
Responder1
Você precisaria de um invólucro ls
para fazer isso.
Eu escrevi um invólucro abaixo ...
Como basicamente funciona:
ls -F
é forçado porque é garantido que os diretórios tenham um/
sufixo que pode ser detectado.- Para resolver o nome de um diretório para sua localização, o diretório atual é usado ou o primeiro argumento sem traço (presume-se que seja um diretório de destino).
- As cores de primeiro plano/fundo são obtidas usando os primeiros conjuntos de números de cada linha. Os números no estilo XTerm são trigêmeos, então o terceiro e o sexto números são as cores (19 e 85 no meu exemplo). É claro que as cores podem ser alteradas para o que você quiser.
- Isso depende das versões originais de
svn
onde.svn
estava presente em cada subdiretório. Se você estiver usando a versão mais recente, onde.svn
está presente apenas na parte superior, o script deve mudar para "drill up" de "$root/$dir" até encontrar um diretório pai contendo.svn
.
Aqui está todo o meu script (use em vez de ls
diretamente):
#!/usr/bin/env perl
# by Kevin Grant ([email protected])
use FileHandle;
my $term = (exists $ENV{'TERM'} && defined $ENV{'TERM'}) ? $ENV{'TERM'} : 'vt100';
my $is_xterm = ($term =~ /xterm/);
my $ifh = new FileHandle("ls -F @ARGV|");
(defined $ifh) or die;
my $root = '.';
foreach (@ARGV) {
(! /^\-/) and $root = $_; # assume bare argument is the directory being listed
}
foreach (<$ifh>) {
# 1st is for "ls -l" output (no spaces supported), 2nd is normal "ls" output
if (m|\s(\S+)/| or m|^([^/]+/)|) {
my $dir = $1;
if (-e "$root/$dir/.svn") {
# has a ".svn" subdirectory; colorize it
if ($is_xterm) {
s/\Q${dir}\E/\033[48;5;19;38;5;85m${dir}\033[0m/;
} else {
s/\Q${dir}\E/\033[44;36m${dir}\033[0m/;
}
}
}
print;
}