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
LS_COLORS=rs=**Removed because wall of text**

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.)

  • 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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.