Emacs doesn't want to support 256 colors in terminal window - a slight progress

Grzegorz Junka cv at gjunka.com
Fri Feb 27 17:30:59 PST 2009

Paul B. Mahol wrote:
> On 2/27/09, Grzegorz Junka <xgjx at poczta.onet.pl> wrote:
>> Paul B. Mahol wrote:
>>> On 2/27/09, Grzegorz Junka <cv at gjunka.com> wrote:
>>>> Hi,
>>>> I hope someone will be able to help with this. I've already checked all
>>>> resources I could google but still can't get it to work. Basically my
>>>> terminal can show more than 16 colors but emacs doesn't want to use
>>>> these colors.
>>>> I run FreeBSD (7.1-RELEASE) as a virtual machine and use it without any
>>>> X interface, only through ssh from a Windows machine (the host). I have
>>>> set up both putty and ssh in cygwin to report term type as
>>>> 'xterm-256color' (putty in the configuration window and xterm using -tn
>>>> command line parameter).
>>>> That part works fine because I can run scripts available on the internet
>>>> (256colors2.pl, colortest), which surely show more than 8 colors in my
>>>> terminal window. The problem is when I run emacs and type: M-x
>>>> list-colors-display. Emacs shows only boring 8 colors (not even 16).
>>>> A bit about my configuration. Emacs was compiled without X11 support
>>>> (from ports emacs-nox11-22.3). I also don't have xterm installed. I
>>>> tried to set env variable TERM=xterm-256color but it didn't help. There
>>>> is a special note about using terms in emacs in
>>>> "/usr/local/share/emacs/22.3/lisp/term/README" I unpacked xterm.el.gz
>>>> from that folder and tried to supply it as term/xterm-256color.el or
>>>> term/xterm.el to emacs, but that also didn't work.
>>>> It is interesting to note, that when I type: tput color I get different
>>>> values depending on the user and terminal:
>>>> user grzesiu, putty, TERM=xterm-256color, tput colors: 114
>>>> the same user, putty and TERM value, but tput colors: 123, another trial
>>>> and output is 80
>>>> user root, putty, TERM=xterm, tput colors: 184
>>>> the same user and putty, but TERM=xterm-256color, tput colors: 115
>>>> user grzesiu, ssh from cygwin, TERM=xterm-256color, tput colors: 139
>>>> I don't understand these values because when I run these scripts above I
>>>> don't see any difference in colors shown (subjectively). In neither of
>>>> these configurations emacs show more than 8 colors. Any ideas or
>>>> suggestions greatly appreciated.
>>> This looks like emacs problem. Are you sure that emacs was compiled
>>> with 256 color support? (at least I know that elinks can be configured
>>> to support 88 and/or 256 and/or real colors)
>>> Also is there some kind of termcap option in emacs to be changed/read?
>>> I dont use emacs but in vim:
>>> :set t_Co=256
>>> will show 256 colors if terminal supports it.
>>> Actually if t_Co termcap setting is N, vim will not try to show more
>>> than N colors even if terminal supports X(>N) colors.
>> FreeBSD port doesn't allow to configure Emacs in any way, neither from
>> the original port, nor from the nox11 version. I don't think there is
>> any special option for emacs to show 256 colors. Wherever I could find
>> some information about this, people were saying that Emacs version >=22
>> supports 256 colors without any additional configuration. As I
>> mentioned, Emacs not only doesn't show 256 colors, but not even 16,
>> which I bet should be supported without any problems. No matter what I
>> get only 8 colors, even if terminal is able to shows much much more.
>> Another strange thing is that as far as I can see xterm-256color in
>> FreeBSD termcap is simply an alias to xterm. Nevertheless, with these
>> scripts mentioned above I can view more than 16 colors even if TERM is
>> defined only as xterm.
>> Do you think I should report it as a defect in emacs ports?
> Not really.
> You can try changing Co cap from 8 to 256 inside termcap file, dont
> forget to use cap_mkdb after that, and dont make stupid mistakes.
> Perhaps emacs should like vim enable changing Co cap inside itself.
> Related to tput command, you should use "tput Co"
> "tput colors" tends to report number of columns.
> Also it is very hard to follow you: putty vs xterm vs cygwin; dont
> forget that your terminal may use terminfo instead of termcap .....
Have you seen the termcap file in FreeBSD? It is a quite complicated 
mess with aliases everywhere, xterm defined a dozen of times in 
different places and various Co values for each of them. I wouldn't know 
where to change it without screwing everything up. Besides that, why 
normal scripts can show all these colors and emacs has a problem with it?

But you was right, tput Co shows only 8 colors, regardless of what tput 
colors shows. Many thanks for that hint!

Regarding putty vs xterm vs cygwin: xterm(-color/-256color) is just the 
logical definition of the terminal and is independent on on the program 
used as the physical terminal. For instance both putty and xterm (under 
cygwin) can be configured to report the terminal type as xterm-256color 
or any other terminal available (and if not, the TERM env variable can 
be redefined). But I am sure you already know that. Because I am logging 
from Windows I can't use xterm natively, so I tried it under cygwin. But 
it shouldn't matter as long as I know that they support 256 colors (and 
I know that because I run these scripts).

So now the question is why tput Co reports only 8 colors and how to 
change that? I tried redefining TERM env variable but it doesn't change 
anything. If I need to change termcap then for which xterm? I don't 
really know how termcap/terminfo works, or what cap_mkdb is for and I 
would appreciate any more detailed explanation.

More information about the freebsd-questions mailing list