When using "ln=target" in LS_COLORS and having "colored-stats on",
I get "targetm" in front of every symlink when using tab-completion,
as well as indenting problems.
The implementation in lib/readline/colors.c just doesn't work.

I appended a small patch that shows the relevant parts and works well
for me.

Thanks for bash!
Andreas

(I am not a subscriber of the list, so please CC me in reply)
--- ./lib/readline/colors.c.orig        2015-03-20 21:29:42.531215281 +0100
+++ ./lib/readline/colors.c     2015-03-20 21:38:11.119857048 +0100
@@ -109,6 +109,7 @@
   const char* name;
   char *filename;
   struct stat astat;
+  struct stat lnkstat;
   mode_t mode;
   int linkok;
 
@@ -132,6 +133,17 @@
 #endif
   if( stat_ok == 0 ) {
     mode = astat.st_mode;
+#if defined (HAVE_LSTAT)
+    if (S_ISLNK(mode)) {
+      if (stat(name, &lnkstat) == -1) {
+        linkok = 0;
+      } else {
+        linkok = 1;
+        if (strncmp (_rl_color_indicator[C_LINK].string, "target", 6) == 0)
+          mode = lnkstat.st_mode;
+      }
+    } else 
+#endif
     linkok = 1; //f->linkok;
   }
   else
@@ -141,6 +153,8 @@
 
   if (linkok == -1 && _rl_color_indicator[C_MISSING].string != NULL)
     colored_filetype = C_MISSING;
+  else if (linkok == 0 && S_ISLNK(mode) && 
_rl_color_indicator[C_ORPHAN].string != NULL)
+    colored_filetype = C_ORPHAN;
   else if(stat_ok != 0)
     {
       static enum indicator_no filetype_indicator[] = FILETYPE_INDICATORS;
@@ -181,10 +195,7 @@
 #endif
         }
       else if (S_ISLNK (mode))
-        colored_filetype = ((linkok == 0
-                 && (!strncmp (_rl_color_indicator[C_LINK].string, "target", 6)
-                     || _rl_color_indicator[C_ORPHAN].string))
-                ? C_ORPHAN : C_LINK);
+        colored_filetype = C_LINK;
       else if (S_ISFIFO (mode))
         colored_filetype = C_FIFO;
       else if (S_ISSOCK (mode))

Attachment: pgp6v1ntqIjFW.pgp
Description: PGP signature

Reply via email to