6

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:

├── [email protected]
├─┬ [email protected]
│ └── [email protected]
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ └── [email protected]
...

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

1 Answer 1

10

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

13
  • 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, 2012 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 :) Jan 13, 2012 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, 2012 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? Jan 13, 2012 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, 2012 at 1:52

You must log in to answer this question.

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