On Tuesday 24 March 2009 12:05:21 Pádraig Brady wrote:
> Kamil Dudka wrote:
> >> p.s. you forgot the '* ' on front of the filenames in the changelog
> >
> > Good catch. Thanks!
>
> Could you resubmit a patch with an addition to "NEWS \** Changes in
> behavior" that mentions one can disable coloring of hardlinks, and maybe
> mention how to do it.
>
> I'll then check it in ASAP.

Improved patch is attached. I am not sure with the advice in NEWS. It works 
only for bash and only if sed is available. In other cases it needs a little 
adjustment.

Kamil
From d43a52f6d27112889fd30bcca5a5ebdab8030c1b Mon Sep 17 00:00:00 2001
From: Kamil Dudka <kdu...@redhat.com>
Date: Tue, 24 Mar 2009 12:16:20 +0100
Subject: [PATCH] ls: make possible to disable hard links highlighting

* src/ls.c (print_color_indicator): Skip hard link checking if not colored.
* tests/ls/hardlink: Add test case for disabled hard link highlighting.
* NEWS: Mention the change.
---
 NEWS              |    4 ++++
 src/ls.c          |    2 +-
 tests/ls/hardlink |   22 +++++++++++++++++++---
 3 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index 766f271..c659303 100644
--- a/NEWS
+++ b/NEWS
@@ -38,6 +38,10 @@ GNU coreutils NEWS                                    -*- outline -*-
   cp -a now tries to preserve extended attributes (xattr), but does not
   diagnose xattr-preservation failure.  However, cp --preserve=all still does.
 
+  ls --color: hard links highlighting can be now disabled by changing LS_COLORS
+  variable. To disable it you can add something like this to your profile:
+    eval `dircolors -b | sed s/hl=[^:]*:/hl=:/`
+
 
 * Noteworthy changes in release 7.1 (2009-02-21) [stable]
 
diff --git a/src/ls.c b/src/ls.c
index fa6a59a..d30e5a0 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -4008,7 +4008,7 @@ print_color_indicator (const char *name, mode_t mode, int linkok,
 	    type = C_CAP;
 	  else if ((mode & S_IXUGO) != 0)
 	    type = C_EXEC;
-	  else if (1 < nlink)
+	  else if (is_colored (C_HARDLINK) && (1 < nlink))
 	    type = C_HARDLINK;
 	}
       else if (S_ISDIR (mode))
diff --git a/tests/ls/hardlink b/tests/ls/hardlink
index d65bb7a..b120914 100755
--- a/tests/ls/hardlink
+++ b/tests/ls/hardlink
@@ -26,19 +26,35 @@ working_umask_or_skip_
 
 touch file file1 || framework_failure
 ln file1 file2 || skip_test_ "can't create hard link"
-code='44;37'
+code_hl='44;37'
+code_png='01;35'
 fail=0
 
 # regular file - not hard linked
-LS_COLORS="hl=$code" ls -U1 --color=always file > out || fail=1
+LS_COLORS="hl=$code_hl" ls -U1 --color=always file > out || fail=1
 printf "file\n" > out_ok || fail=1
 compare out out_ok || fail=1
 
 # hard links
-LS_COLORS="hl=$code" ls -U1 --color=always file1 file2 > out || fail=1
+LS_COLORS="hl=$code_hl" ls -U1 --color=always file1 file2 > out || fail=1
 printf "\033[0m\033[44;37mfile1\033[0m
 \033[44;37mfile2\033[0m
 \033[m" > out_ok || fail=1
 compare out out_ok || fail=1
 
+# hard links and png
+mv file2 file2.png || framework_failure
+LS_COLORS="hl=$code_hl:*.png=$code_png" ls -U1 --color=always file1 file2.png > out || fail=1
+printf "\033[0m\033[44;37mfile1\033[0m
+\033[44;37mfile2.png\033[0m
+\033[m" > out_ok || fail=1
+compare out out_ok || fail=1
+
+# hard links and png (hard links highlighting disabled)
+LS_COLORS="hl=:*.png=$code_png" ls -U1 --color=always file1 file2.png > out || fail=1
+printf "file1
+\033[0m\033[01;35mfile2.png\033[0m
+\033[m" > out_ok || fail=1
+compare out out_ok || fail=1
+
 Exit $fail
-- 
1.6.1.2

_______________________________________________
Bug-coreutils mailing list
Bug-coreutils@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-coreutils

Reply via email to