¿Cómo colorear carpetas controladas por SVN en la terminal?

¿Cómo colorear carpetas controladas por SVN en la terminal?

¿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 lspara hacer esto.

Escribí un envoltorio de este tipo a continuación...

Cómo funciona básicamente:

  • ls -Fes 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 svndónde .svnestaba presente en cada subdirectorio. Si está utilizando la última versión que .svnsolo 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 lsdirectamente):

#!/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;
}

información relacionada