Wednesday, September 29, 2010

Changing xterm-new/xterm text output colors

I recently found that in my iterm (and Mac terminal) applications the text coloring was not optimal. For instance, I use a dark background, but when issuing a command such as 'ls' would list directories in dark blue. This is impossible to read. It seemed to me that this would affect most who prefer a dark background in their terminals. I think this only applies to Mac terminal since the environment variable used is a bit different than what Linux uses.

to find out which terminal you are using (aside from the application running the terminal such as terminal app or iterm) issue this command:

echo $TERM

as always, you can read all about the information here in the ls man page

man ls

here is what you can do to change one or all of your lscolors, environment variable is LSCOLORS

Add the following to .bashrc or .bash_profile or whatever file runs when you start an interactive shell: (mine is called .bash_profile and lives in my home directory)

LSCOLORS='fxfxcxdxbxegedabagacad'
export LSCOLORS

straight from 'man ls'

LSCOLORS
The value of this variable describes what color to use for which attribute when colors are enabled with CLICOLOR. This string
is a concatenation of pairs of the format fb, where f is the foreground color and b is the background color.
The color designators are as follows:

a black
b red
c green
d brown
e blue
f magenta
g cyan
h light grey
A bold black, usually shows up as dark grey
B bold red
C bold green
D bold brown, usually shows up as yellow
E bold blue
F bold magenta
G bold cyan
H bold light grey; looks like bright white
x default foreground or background


Note that the above are standard ANSI colors. The actual display may differ depending on the color capabilities of the terminal in use.


The order of the attributes are as follows:


1. directory
2. symbolic link
3. socket
4. pipe
5. executable
6. block special
7. character special
8. executable with setuid bit set
9. executable with setgid bit set
10. directory writable to others, with sticky bit
11. directory writable to others, without sticky bit


The default is "exfxcxdxbxegedabagacad", i.e. blue foreground and default background for regular directories, black foreground and red background for setuid executables, etc.



So add the following to your .bash_profile or equivalent:

LSCOLORS='fxfxcxdxbxegedabagacad'
export LSCOLORS

As you can see I just changed the first character from 'e' to 'f'. This has the effect of making directory listings be listed in a magenta color instead of a dark blue.

Save .bash_profile and issue:

. !$

that is the same as:

source ~/.bash_profile

if issued right after the command to edit .bash_profile. In other words, you are asking bash to source (which is what the dot is) and then reprint the last argument to the last command.

No comments: