views:

1310

answers:

3

When I run emacs -nw in an X terminal window, and I ask for M-x list-colors-display, I am offered a paltry palette:

black                                                     
red    
green  
yellow 
blue   
magenta
cyan   
white

I am told it is possible to get 265 colors. Setting the TERM environment variable to xterm-256color does not do the job. What does?

+2  A: 

According to this you need ncurses-term in addition to setting TERM to xerm-256color.

Okay, this has some other things to try like

The xterm in Ubuntu Edgy does not advertise 256 color support by
default.  To fix this you need to install a 256 color terminfo entry,
and tell xterm to use it:

    apt-get install ncurses-term
    echo XTerm.termName: xterm-256color \
      >>~/.Xdefaults
    xrdb -merge ~/.Xdefaults

and

So you need a file term/screen-256color.el in your load-path.  Emacs
22 expects it to contain a terminal-init-screen defun.  Emacs 21
expects it to contain a bunch of top-level forms.  Here's what I use:

    ;;; This is for GNU Emacs 22
    (defun terminal-init-screen ()
      "Terminal initialization function for screen."
      ;; Use the xterm color initialization code.
      (load "term/xterm")
      (xterm-register-default-colors)
      (tty-set-up-initial-frame-faces))

    ;;; This is for GNU Emacs 21
    (if (= 21 emacs-major-version)
        (load "term/xterm-256color"))

For Emacs 21, you also need to install the xterm-256color.el file from

    http://www.splode.com/~friedman/software/emacs-lisp/src/term/xterm-256color.el
Chas. Owens
On Debian testing, `tput colors` shows 256 but emacs sees only 8. Is emacs 22 necessary? (It has fatal bugs that prevent me from using it.)
Norman Ramsey
A: 

When I googled this I got the impression that most distros don't enable 256 colour support in the packaged terminal emulators.

I suspect if you keep looking you may come to the same conclusion that I did. The best answer is to download urxvt and compile it yourself with all the bells and whistles turned on.

I was using vim, so there may be other dependencies/gotchas that are emacs specific, but I'm pretty sure a terminal that supports 256 colours is important.

Ryan Graham
Debian users have access through the rxvt-unicode package.
Norman Ramsey
tput colors shows 88 colors, but emacs see only 8
Norman Ramsey
But is it compiled with 256 colour support?
Ryan Graham
+2  A: 

Setting TERM to xterm-256color is what you want to do. Also, Emacs 22 (at least) didn't need any special config from me in order to display 256 colors. See this related question. With the ncurses-term package installed, I was able to get 256 colors on Emacs using the vanilla xterm that came with my version of Ubuntu (Interpid, in this case, but I'm guessing it'll be fine on earlier versions). I also got 256 colors using Gnome Terminal, Konsole, and PuTTY, for what that's worth.

Jacob Gabrielson