Wie färbt man im Terminal von SVN gesteuerte Ordner ein?

Wie färbt man im Terminal von SVN gesteuerte Ordner ein?

Gibt es eine Möglichkeit, die SVN-gesteuerte Ordnerliste in verschiedenen Farben im Terminal anzuzeigen? Wie ein Alias ​​für „ls“. Wenn wir also „ls“ eingeben, sollten alle Ordner mit einem Unterordner „.svn“ beispielsweise gelb sein?

Danke. (Tut mir leid, wenn das eine dumme Frage ist.)

Antwort1

lsHierzu benötigen Sie einen Wrapper .

Ich habe unten einen solchen Wrapper geschrieben ...

Und so funktioniert es grundsätzlich:

  • ls -F/wird erzwungen, da Verzeichnisse dann garantiert ein erkennbares Suffix haben .
  • Um den Namen eines Verzeichnisses in seinen Speicherort aufzulösen, wird entweder das aktuelle Verzeichnis oder das erste Argument außer einem Bindestrich verwendet (vermutlich ein Zielverzeichnis).
  • Die Vordergrund-/Hintergrundfarben werden durch die ersten Zahlensätze jeder Zeile erreicht. Die Zahlen im XTerm-Stil sind Drillinge, daher sind die 3. und 6. Zahl die Farben (in meinem Beispiel 19 und 85). Die Farben können natürlich beliebig geändert werden.
  • Dies basiert auf den Originalversionen von svnwhere .svn, die in jedem Unterverzeichnis vorhanden waren. Wenn Sie die neueste Version verwenden, die .svnnur ganz oben vorhanden ist, sollte das Skript so geändert werden, dass es von „$root/$dir“ aus „nach oben bohrt“, bis es ein übergeordnetes Verzeichnis findet, das enthält .svn.

Hier ist mein gesamtes Skript (verwenden Sie anstelle von lsdirekt):

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

verwandte Informationen