Subject: Re: [Balug-talk] how to, where to, configure color for ls?
From: Roger Chrisman <[email-masked]>
To: [email-masked]
Date: Sun, 17 Nov 2002 21:11:37 -0800

I hope this helps conclude this newbie thread, and might earn me credit 
towards asking another one another day :-)...

My aim is to understand my system the way it was designed to be used -- to 
find and use the configuration files its authors designed into it. I am a 14 
months old penguin using a SuSE PPC 7.3 distro on my Quicksilver Mac Terminal 
and SuSE 8.1 on my IBM server.

what I have gleaned about colors and the ls command:

/etc/DIR_COLORS
is a configuration file that controls the global color settings for the ls 
command.

/etc/DIR_COLORS can be copied into a /home/$HOME/.dir_colors and modified 
there to overide /etc/DIR_COLORS for the user of $HOME.

The selection of colors in those two config files seems to be limited to
0 black
1 red
2 green
3 yellow
4 blue
5 magenta
6 cyan
7 white

For each file item designated a foreground and a background color may be set. 
Foreground colors are indicated by a leading 3 and background colors by a 
leading 4 and ; is the separator. # starts a comment.

Also, a text style may be set:
00 none 
01 bold 
04 underscore 
05 blink 
07 reverse (I guess this inverts the fg color with the bg color)
08 concealed
01 underline

Example:

DIR	01;40;36	#directories: bold text, black bg, cyan

I have found the colors green, yellow, cyan, white and (somewhat) magenta 
show up better against black than blue or red do against black. Oddly, when I 
indicate 43 or 33 (yellow bg or yellow fg) I get white on my PPC system. 
Don't know why. Also, I tried 04 to underscore directories but it didn't work.

Changes to DIR_COLORS do not take affect until X11 is restarted or, in the 
case of non-X11 terminals, until I re-spawn the tty by killing its process 
(kill ####). I do a ps command to find the tty process # to kill. Or reboot, 
but rebooting is tedious.

There are other settings in DIR_COLORS that I do not understand and have not 
tampered with. Here is a copy of a virgin DIR_COLORS file from my SuSE 8.1 
installation, should anyone be interested:

/etc/DIR_COLORS
...............................................................................

# Configuration file for the color ls utility
#
# This file goes in the /etc directory, and must be world readable.
# You can copy this file to .dir_colors in your $HOME directory to override
# the system defaults.

# COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not
# pipes. 'all' adds color characters to all output. 'none' shuts colorization
# off.
COLOR tty

# Extra command line options for ls go here.
# Basically these ones are:
#  -F = show '/' for dirs, '*' for executables, etc.
#  -T 0 = don't trust tab spacing when formatting ls output.
OPTIONS -F -T 0

# Below, there should be one TERM entry for each termtype that is colorizable
TERM linux
TERM linux-c
TERM console
TERM con132x25
TERM con132x30
TERM con132x43
TERM con132x60
TERM con80x25
TERM con80x28
TERM con80x30
TERM con80x43
TERM con80x50
TERM con80x60
TERM gnome
TERM mach-color
TERM rxvt
TERM screen
TERM screen-w
TERM vt100
TERM vt102
TERM xterm
TERM xterm-debian

# EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output)
EIGHTBIT 1

# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
#
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

NORMAL 00       # global default, although everything should be something.
FILE   00       # normal file
DIR    01;34    # directory
LINK   00;36    # symbolic link
FIFO   40;33    # pipe
SOCK   01;35    # socket
DOOR   01;35    # door
BLK    40;33;01 # block device driver
CHR    40;33;01 # character device driver
ORPHAN 40;31    # symlink to nonexistent file

# This is for files with execute permission:
EXEC 00;32

# List any file extensions like '.gz' or '.tar' that you would like ls
# to colorize below. Put the extension, a space, and the color init string.
# (and any comments you want to add after a '#')

# executables (bright green)
.cmd  01;32
.exe  01;32
.com  01;32
.bat  01;32
.btm  01;32
.dll  01;32

# archives or compressed
.tar  00;31
.tbz  00;31
.tgz  00;31
.rpm  00;31
.deb  00;31
.arj  00;31
.taz  00;31
.lzh  00;31
.zip  00;31
.zoo  00;31
.z    00;31
.Z    00;31
.gz   00;31
.bz2  00;31
.tb2  00;31
.tz2  00;31
.tbz2 00;31

# image formats
.avi  01;35
.bmp  01;35
.fli  01;35
.gif  01;35
.jpg  01;35
.jpeg 01;35
.mng  01;35
.mov  01;35
.mpg  01;35
.pcx  01;35
.pbm  01;35
.pgm  01;35
.png  01;35
.ppm  01;35
.tga  01;35
.tif  01;35
.xbm  01;35
.xpm  01;35
.dl   01;35
.gl   01;35

# sound formats
.aiff 00;32
.au   00;32
.mid  00;32
.mp3  00;32
.ogg  00;32
.voc  00;32
.wav  00;32

From: Roger Chrisman <[email-masked]>
Subject: Re: [Balug-talk] how to, where to, configure color for ls?
To: [email-masked]
X-Mailer: KMail [version 1.3.1]
Date: Mon, 18 Nov 2002 14:05:28 -0800

On Monday 18 November 2002 09:44, you wrote:

> this is really a follow-up question.
> recently upped the version number on my linux work PC
> to RH 7.2 from 7.1.
> Post upgrade, when I open a terminal the ls is plain
> vanilla. however, if i telnet back into my system it's
> all good again. so my local term must be skipping or
> missing the DIR_COLORS. interestingly, this does not
> happen with my linux box at home which has the same RH
> distribution.
>
> what can i do to fix this?
> thanks & best Regards,
> Vinay

Vinay,

/etc/DIR_COLORS controls the colors for the ls command on the computer that 
the ls command is actually running on. So if you are telneted from computer 
foo into computer bar and do ls the ls runs on bar and uses bar's 
/etc/DIR_COLORS. If you close the telnet connection to bar and run an ls back 
on computer foo, the ls runs on foo and uses foo's /etc/DIR_COLORS.

If /home/$HOME/.dir_colors is present on the computer the ls is being run on, 
it will override that computer's /etc/DIR_COLORS.

/home/$HOME/.dir_colors if you don't have one, can be ceated with cp:

	cp /etc/DIR_COLORS /home/$HOME/.dir_colors

Then you can do user specific custom colers in .dir_colors

* Brighter colors! *
I have discovered that for me 01 does not ceate bold text, it creates 
lighter text instead. I don't know why it does that but I dig it; lighter 
text shows up better against my favorite black background.

Qwerks:
01 doesn't seem to affect blue.
Nither 33 nor 43 preduce yellow for me, but red instead.

Tip:
Changes to /home/$HOME/.dir_colors take affect as soon as I log out and log 
in again.

I hope some of this helps,

Roger
SF