1

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

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

1 ответ1

2

Вам понадобится обертка вокруг ls чтобы сделать это.

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

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

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

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

#!/usr/bin/env perl
# by Kevin Grant (kevingrant.engineer@gmail.com)
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;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .