[Mono-bugs] [Bug 493776] New: System.Console.BufferWidth doesn't support pipes

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Thu Apr 9 16:44:29 EDT 2009


           Summary: System.Console.BufferWidth doesn't support pipes
    Classification: Mono
           Product: Mono: Class Libraries
           Version: SVN
          Platform: x86-64
        OS/Version: openSUSE 11.1
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: CORLIB
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: jpryor at novell.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---

If you pipe the output of a program to less(1), Console.BufferWidth will be 0
(instead of the actual terminal width).  This causes the output of programs
which rely on Console.BufferWidth to have their output changed simply by piping
the output.

Example: sqlmetal (which uses Console.BufferWidth to choose how wide text
should be displayed).

No pipe:

  $ sqlmetal --help
  # lots of output omitted...
    /readLineAtExit                    Wait for a key to be pressed after
  # ...

With a pipe:

  $ sqlmetal --help | less
  # lots of ouptut omitted...
    /readLineAtExit                    Wait
  # ...

Aside from being hilarious, the output is also unusable (who wants to read

The underlying problem appears to be System.ConsoleDriver.IsConsole, which uses
isatty(3) to determine if the output is a terminal...which it won't be here (or
when e.g. redirecting output to a file).

I'm not sure what a proper fix is.  miguel suggested using either $COLS or
using 80 as a minimum width on IRC as a solution, but that doesn't seem
appropriate either...

Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.

More information about the mono-bugs mailing list