summaryrefslogtreecommitdiff
path: root/src/ls.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ls.c')
-rw-r--r--src/ls.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/ls.c b/src/ls.c
index 680679a9a..3025a76ef 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -1149,6 +1149,17 @@ restore_default_color (void)
put_indicator (&color_indicator[C_RIGHT]);
}
+static void
+set_normal_color (void)
+{
+ if (print_with_color && is_colored (C_NORM))
+ {
+ put_indicator (&color_indicator[C_LEFT]);
+ put_indicator (&color_indicator[C_NORM]);
+ put_indicator (&color_indicator[C_RIGHT]);
+ }
+}
+
/* An ordinary signal was received; arrange for the program to exit. */
static void
@@ -3444,6 +3455,7 @@ print_current_files (void)
case long_format:
for (i = 0; i < cwd_n_used; i++)
{
+ set_normal_color ();
print_long_format (sorted_file[i]);
DIRED_PUTCHAR ('\n');
}
@@ -4004,7 +4016,9 @@ print_name_with_quoting (const struct fileinfo *f,
const char* name = symlink_target ? f->linkname : f->name;
bool used_color_this_time
- = (print_with_color && print_color_indicator (f, symlink_target));
+ = (print_with_color
+ && (print_color_indicator (f, symlink_target)
+ || is_colored (C_NORM)));
if (stack)
PUSH_CURRENT_DIRED_POS (stack);
@@ -4048,6 +4062,8 @@ print_file_name_and_frills (const struct fileinfo *f, size_t start_col)
{
char buf[MAX (LONGEST_HUMAN_READABLE + 1, INT_BUFSIZE_BOUND (uintmax_t))];
+ set_normal_color ();
+
if (print_inode)
printf ("%*s ", format == with_commas ? 0 : inode_number_width,
format_inode (buf, sizeof buf, f));
@@ -4218,6 +4234,9 @@ print_color_indicator (const struct fileinfo *f, bool symlink_target)
= ext ? &(ext->seq) : &color_indicator[type];
if (s->string != NULL)
{
+ /* Need to reset so not dealing with attribute combinations */
+ if (is_colored (C_NORM))
+ restore_default_color ();
put_indicator (&color_indicator[C_LEFT]);
put_indicator (s);
put_indicator (&color_indicator[C_RIGHT]);