Есть ли способ получить список папок, контролируемых SVN, с разными цветами в терминале? Например, псевдоним для "ls". Так что когда мы вводим "ls", все папки с подпапкой ".svn" должны быть желтыми, например?
Спасибо. (Извините, если это глупый вопрос.)
решение1
ls
Для этого вам понадобится обертка .
Я написал такую обертку ниже...
Как это работает в принципе:
ls -F
является принудительным, поскольку в этом случае каталоги гарантированно имеют/
суффикс, который можно обнаружить.- Для определения местоположения каталога по его имени используется либо текущий каталог, либо первый аргумент без дефиса (предполагается, что это целевой каталог).
- Цвета переднего плана/фона достигаются с помощью первых наборов чисел каждой строки. Числа в стиле XTerm являются триплетами, поэтому 3-е и 6-е числа — это цвета (19 и 85 в моем примере). Цвета, конечно, можно изменить на любые, которые вы хотите.
- Это основано на исходных версиях
svn
where.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;
}