¿Hay alguna manera de obtener la lista de carpetas controladas por SVN con diferentes colores en la terminal? Como un alias para "ls". Entonces, cuando escribimos "ls", ¿todas las carpetas con una subcarpeta ".svn" deberían ser amarillas, por ejemplo?
Gracias. (Lo siento si es una pregunta estúpida).
Respuesta1
Necesitarías un envoltorio ls
para hacer esto.
Escribí un envoltorio de este tipo a continuación...
Cómo funciona básicamente:
ls -F
es forzado porque se garantiza que los directorios tendrán un/
sufijo que pueda detectarse.- Para resolver el nombre de un directorio en su ubicación, se utiliza el directorio actual o el primer argumento que no es un guión (se supone que es un directorio de destino).
- Los colores de primer plano y fondo se logran utilizando los primeros conjuntos de números de cada línea. Los números de estilo XTerm son tripletes, por lo que los números tercero y sexto son los colores (19 y 85 en mi ejemplo). Por supuesto, los colores se pueden cambiar a lo que quieras.
- Esto se basa en las versiones originales de
svn
dónde.svn
estaba presente en cada subdirectorio. Si está utilizando la última versión que.svn
solo está presente en la parte superior, el script debería cambiar a "profundizar hacia arriba" desde "$root/$dir" hasta que encuentre un directorio principal que contenga.svn
.
Aquí está mi script completo (úselo en lugar de ls
directamente):
#!/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;
}