터미널에서 SVN으로 제어되는 폴더의 색상을 지정하는 방법은 무엇입니까?

터미널에서 SVN으로 제어되는 폴더의 색상을 지정하는 방법은 무엇입니까?

터미널에서 SVN 제어 폴더 목록을 다양한 색상으로 가져오는 방법이 있습니까? "ls"의 별칭과 같습니다. 예를 들어 "ls"를 입력하면 ".svn" 하위 폴더가 있는 모든 폴더가 노란색이어야 합니까?

감사해요. (멍청한 질문이었다면 죄송합니다.)

답변1

ls이를 위해서는 래퍼가 필요합니다 .

아래에 그런 래퍼를 썼는데 ...

기본적으로 작동하는 방법:

  • ls -F디렉토리에 감지할 수 있는 접미사가 있음이 보장되기 때문에 강제됩니다 /.
  • 디렉터리 이름을 해당 위치로 확인하려면 현재 디렉터리가 사용되거나 대시가 아닌 첫 번째 인수(대상 디렉터리로 추정됨)가 사용됩니다.
  • 전경색/배경색은 각 줄의 첫 번째 숫자 집합을 사용하여 구현됩니다. XTerm 스타일 숫자는 세 개의 숫자이므로 세 번째와 여섯 번째 숫자는 색상입니다(예제에서는 19와 85). 색상은 물론 원하는대로 변경 가능합니다.
  • 이는 모든 하위 디렉터리에 존재하는 svn원래 버전에 의존합니다 . 가 맨 위에만 있는 .svn최신 버전을 사용하는 경우 스크립트는 ..svn.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;
}

관련 정보