Package: psmisc
Version: 21.6-1
Severity: normal
Tags: patch

A command like:

  $ pstree | less

prints terminal special codes to a plain pipe, resulting in ugly and unreadable
stuff like:

initESC(0^OqwqESC(Bamule
     ESC(0^OtqESC(Bartsd
     ESC(0^OtqESC(Batd
     ESC(0^OtqESC(B7*[bonobo-activati]
     ESC(0^OtqESC(Bcdparanoia

Simply check wether stdout is a terminal via isatty().  Patch attached.

-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.11-1-k7
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ANSI_X3.4-1968) (ignored: LC_ALL 
set to C)

Versions of packages psmisc depends on:
ii  libc6                         2.3.5-4    GNU C Library: Shared libraries an
ii  libncurses5                   5.4-9      Shared libraries for terminal hand

psmisc recommends no packages.

-- no debconf information
diff -ur psmisc-21.6.old/src/pstree.c psmisc-21.6/src/pstree.c
--- psmisc-21.6.old/src/pstree.c	2004-12-15 12:15:52.000000000 +0100
+++ psmisc-21.6/src/pstree.c	2005-09-03 21:00:57.000000000 +0200
@@ -785,10 +785,10 @@
    * command-line options, if given.
    */
 
-  if (!strcmp(nl_langinfo(CODESET), "UTF-8")) {
+  if (isatty(1) && !strcmp(nl_langinfo(CODESET), "UTF-8")) {
     /* Use UTF-8 symbols if the locale's character set is UTF-8. */
     sym = &sym_utf;
-  } else if ((termname = getenv ("TERM")) && \
+  } else if (isatty (1) && (termname = getenv ("TERM")) && \
              (strlen (termname) > 0) && \
              (setupterm (NULL, 1 /* stdout */, NULL) == OK) && \
              (tigetstr ("acsc") > 0)) {

Reply via email to