Wednesday, April 1, 2009

Colorful ls (dircolors) on a mac console (terminal.app)



On linux systems when I listed the contents of a directory (ls) I saw a colorful list. Different colors were used for compressed files, directories, images, etc.


Install GNU coreutils Steps:
  1. Download coreutils (I used v7.2). d/l http://ftp.gnu.org/gnu/coreutils site: http://www.gnu.org/software/coreutils
  2. untar it tar xzvf coreututils-7.2.tar.gz
  3. cd into the coreutils-7.2 directory
  4. ./configure --prefix=/usr
  5. make
  6. make check - (I had 2 test failures, but no problems)
  7. Install all GNU core utils by executing 'sudo make install'
  8. OR just install ls and dircolors, and leave everything else BSD by copying ls & dircolors from ./src to /usr/bin
Setup bash_profile
  1. edit .bash_profile
  2. add these lines
#parses .dircolors and makes env var for GNU ls
eval `dircolors`
alias ls='ls -hF --color=auto'

Setup .dircolors
-------------------------------------BOF .dircolors
# Configuration file for dircolors, a utility to help you set the
# LS_COLORS environment variable used by GNU ls with the --color option.

# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
# slackware version of dircolors) are recognized but ignored.

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

# 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 01;36 # symbolic link. (If you set this to 'target' instead of a
# numerical value, the color is as for the file pointed to.)
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;01 # symlink to nonexistent file

# This is for files with execute permission:
EXEC 01;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 '#')

# If you use DOS-style suffixes, you may want to uncomment the following:
#.cmd 01;32 # executables (bright green)
#.exe 01;32
#.com 01;32
#.btm 01;32
#.bat 01;32

.tar 01;31 # archives or compressed (bright red)
.tgz 01;31
.arj 01;31
.taz 01;31
.lzh 01;31
.zip 01;31
.z 01;31
.Z 01;31
.gz 01;31
.bz2 01;31
.deb 01;31
.rpm 01;31
.jar 01;31
.dmg 01;31

# image formats
.jpg 01;35
.png 01;35
.gif 01;35
.bmp 01;35
.ppm 01;35
.tga 01;35
.xbm 01;35
.xpm 01;35
.tif 01;35
.png 01;35
.mpg 01;35
.avi 01;35
.fli 01;35
.gl 01;35
.dl 01;35
------------------------------------------------EOF .dircolors

All Done, type ls at a console prompt and your golden, or purple(directories), green(executables), etc...

- mattb

PS: Once an Apple update, updated ls, not problems, just remake and reinstall
PPS: A friend reminded me that if you want to keep BSD ls on your mac, you can simply alias ls='ls- -G' It is not as configurable that I know, but anything is better than colorless

3 comments:

  1. Nice!
    It appears to work also with coreutils 6.9 which is what man dircolors tells me I have installed.

    I often run a shell (via M-x shell) inside Emacs on my Macbook Pro running OS X and I had to add "TERM dumb" to the list of terms in my custom colors file to get this working properly.

    ReplyDelete
  2. I know this is kind of an old post, but it was useful to me. Wanted to let you know that if you install coreutils via MacPorts (sudo port install coreutils) then it'll create the gnu versions of ls, et. al. in a separate directory that won't be clobbered by apple updates. Then you can just include that dir in the beginning of your PATH and you'll get the gnu version by default.

    ReplyDelete
  3. Hi, Matt,
    I'm trying to follow your post but I'm wondering how to you install ls and dircolrs only? What's the command line to use?

    Thanks,
    James

    ReplyDelete