Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

The awesome application tree, which I installed in Debian with apt-get install tree, has the option of drawing its output using ANSI graphics. Its output looks like this now:

.
tqq node_modules
x   tqq coffee-script
x   tqq eco
x   tqq express
x   tqq forever
x   mqq stylus
tqq package.json
mqq src
    mqq daemontest.coffee

This is obviously wrong. These are my LANG=en_GB.UTF-8 UTF-8 and LC_ALL=C env variables. PuTTY is set to expect UTF-8 as well. If I change PuTTY to "Use font encoding" then tree -A looks right, however npm list will then break and look like this:

├── coffee-script@1.2.0
├─┬ eco@1.1.0-rc-3
│ └── strscan@1.0.1
├─┬ express@2.5.5
│ ├─┬ connect@1.8.5
│ │ └── formidable@1.0.8
│ ├── mime@1.2.4
│ ├── mkdirp@0.0.7
│ └── qs@0.4.0
...

All of this stuff should work correctly, so I'm guessing my settings are wrong somewhere. Could anyone help me tune in on exactly where?


EDIT: My env now looks like this. Problem is still there

root@chu:~# env
TERM=putty
SHELL=/bin/bash
SSH_CLIENT=**Censored**
SSH_TTY=/dev/pts/1
USER=root
LS_COLORS=rs=**Removed because wall of text**
PYTHONBREW_ROOT=/usr/local/pythonbrew
MAIL=/var/mail/root
PATH=/usr/local/pythonbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root
LANG=en_GB.UTF-8
SHLVL=1
HOME=/root
LANGUAGE=en_US:en
LS_OPTIONS=--color=auto
PYTHONPATH=:/root/pymodules
LOGNAME=root
SSH_CONNECTION=**Censored**
_=/usr/bin/env
share|improve this question
up vote 8 down vote accepted

The first problem is that you have $LC_ALL set to C. If you set $LC_ALL, it will override all other locale settings, including $LANG. Since the "C" locale uses ISO-8859-1, tree will not know about Unicode availability and will attempt to switch to the VT100 graphics codepage (there are four switchable codepages), which PuTTY refuses to do when expecting UTF-8. To fix this, stop setting LC_ALL in your environ and tree will use Unicode graphics.

The second problem is that your $LANG variable is incorrect – you don't need to specify the charset twice. Set LANG=en_GB.UTF-8 to fix this.

The third problem is that you are forcing tree to use VT100 graphics. Do not use the -A option.

Keep PuTTY configured for UTF-8 as well.

(npm is unaffected by this because it is hardcoded to use Unicode graphics regardless of locale.)

share|improve this answer
    
Hey thanks for a brilliant answer, but I have a few problems with it. First of all, I've never touched the LC_ALL or LANG variables. I don't know where they're set and I don't know how to unset them or change them. Could you elaborate just a bit on that? Thanks! – Hubro Jan 13 '12 at 20:34
    
@Codemonkey: Check your shell startup scripts first. If you are using bash, then grep LC_ALL ~/.profile ~/.bash_profile ~/.bash_login ~/.bashrc /etc/profile /etc/profile.d/* /etc/*bashrc /etc/environ* /etc/default/locale -- copy/paste that :) – grawity Jan 13 '12 at 20:39
    
Yeah I found the LC_ALL declaration as well at the LANG one. I removed the LC_ALL and edited LANG. The env output is edited into my question, because tree still just writes "tqq" and "mqq" instead of ANSI graphics – Hubro Jan 13 '12 at 20:41
    
@Codemonkey: 1) Are you running tree or tree -A? Do not use the ANSI mode; just run tree and let it use Unicode instead. 2) Does locale -a show en_GB.UTF-8 in the list? – grawity Jan 13 '12 at 20:58
    
locale -a: pastebin.com/Kzttvgm2. But why can't I use the ANSI characters? npm can use them, why can't tree? – Hubro Jan 14 '12 at 1:52

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .