Как раскрасить папки, управляемые SVN в терминале?

Как раскрасить папки, управляемые SVN в терминале?

Есть ли способ получить список папок, контролируемых SVN, с разными цветами в терминале? Например, псевдоним для "ls". Так что когда мы вводим "ls", все папки с подпапкой ".svn" должны быть желтыми, например?

Спасибо. (Извините, если это глупый вопрос.)

решение1

lsДля этого вам понадобится обертка .

Я написал такую ​​обертку ниже...

Как это работает в принципе:

  • ls -Fявляется принудительным, поскольку в этом случае каталоги гарантированно имеют /суффикс, который можно обнаружить.
  • Для определения местоположения каталога по его имени используется либо текущий каталог, либо первый аргумент без дефиса (предполагается, что это целевой каталог).
  • Цвета переднего плана/фона достигаются с помощью первых наборов чисел каждой строки. Числа в стиле XTerm являются триплетами, поэтому 3-е и 6-е числа — это цвета (19 и 85 в моем примере). Цвета, конечно, можно изменить на любые, которые вы хотите.
  • Это основано на исходных версиях svnwhere .svn, которые присутствовали в каждом подкаталоге. Если вы используете последнюю версию where, .svnкоторая присутствует только наверху, скрипт должен измениться на "drill up" из "$root/$dir", пока не найдет родительский каталог, содержащий .svn.

Вот мой полный скрипт (используйте вместо него lsнапрямую):

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

Связанный контент