如何在終端機中為SVN控制的資料夾著色?

如何在終端機中為SVN控制的資料夾著色?

有沒有辦法在終端機中取得不同顏色的SVN控制的資料夾清單?像是「ls」的別名。那麼,當我們輸入“ls”時,所有帶有“.svn”子資料夾的資料夾都應該是黃色的嗎?

謝謝。 (抱歉,如果這是一個愚蠢的問題。)

答案1

你需要一個包裝器來ls做到這一點。

我在下面寫了這樣的包裝...

它的基本運作原理是:

  • ls -F是強制的,因為目錄可以保證具有/可偵測到的後綴。
  • 若要將目錄的名稱解析為其位置,請使用目前目錄或第一個非破折號參數(假定為目標目錄)。
  • 前景色/背景色是使用每行的第一個數字組來實現的。 XTerm 樣式的數字是三元組,因此第三個和第六個數字是顏色(在我的範例中為 19 和 85)。顏色當然可以更改為您想要的任何顏色。
  • 這依賴於每個子目錄中存在的svn原始版本。.svn如果您使用的是僅出現在頂部的最新版本.svn,則腳本應更改為從“$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;
}

相關內容