Color your terminal's output

Jens Mueller jens.k.mueller at gmx.de
Mon Oct 10 03:28:45 PDT 2011


Johannes Pfau wrote:
> Jens Mueller wrote:
> >Johannes Pfau wrote:
> >> Jens Mueller wrote:
> >> >Johannes Pfau wrote:
> >> >> You could use ANSI codes on posix to avoid a dependency on curses:
> >> >> http://en.wikipedia.org/wiki/ANSI_escape_code#Colors
> >> >> But I think using curses is ok. ncurses is MIT licensed and can be
> >> >> used as a dynamic library, so I don't think there are license
> >> >> problems.
> >> >> 
> >> >> However, I'd recommend to load ncurses dynamically with
> >> >> dlopen/dlsym and fallback to simple text output if the ncurses
> >> >> library cannot be loaded.
> >> >
> >> >Using the ANSI codes is fine with me. I assumed they aren't that
> >> >portable but it seems fine.
> >> 
> >> I'd still use curses though, as it abstracts some things away.
> >> Finding terminal capabilities and similar stuff.
> >> 
> >> >> >Any help is very appreciated.
> >> >> >
> >> >> >Though this module is functionality-wise inferior to something
> >> >> >like ncurses it conveniently allows coloring output for most use
> >> >> >cases.
> >> >> 
> >> >> as you already use these functions:
> >> >> http://linux.die.net/man/3/setupterm
> >> >> it'd be nice to have wget-like progressbars and 'updateable' text
> >> >> labels. Shouldn't be as fancy as full ncurses, for most use cases
> >> >> it's good enough to modify the current line. +Points if it
> >> >> properly handles terminal width and resizing.
> >> >
> >> >I believe progress bars are easy to add. Boost's progress_bar
> >> >should be fairly easy to port. It'll be nice if you could provide a
> >> >pull request for this. Is this feasible for you?
> >> 
> >> Sure, I'll have a look at it soon. You're talking about this
> >> progress_display class, right?
> >> http://www.boost.org/doc/libs/1_47_0/boost/progress.hpp
> >
> >Yes. Maybe it's too simple compared to wget's.
> >
> >> >Regarding update able text labels I'm not sure how they are
> >> >typically used. So I would also prefer some pull request from
> >> >somebody with a common use case.
> >> 
> >> Well, think of wget's output:
> >>  0% [                                       ] 1.154.567    123K/s
> >> ETA 57m 6s |                        |
> >> |          |         | updateable label
> >> progressbar               u-label     u-label   u-label
> >
> >That looks very useful. Is this difficult to add?
> >Can't one just delete the entire line and replace it with an
> >appropriately updated one? Is this too naive?
> 
> Yes it's implemented exactly that way. But I think having it in a
> library is useful nevertheless.
> 
> Here's what I have so far:
> https://gist.github.com/1273678

Looks good on first view.

> Some improvements to be done:
> -Autodetect terminal width
> -test on windows
> -use isatty and produce useful output for non-ttys
> -refactoring, docs

Can you create a pull request then?
Anyway it would be nice to know if there is enough value to add it to
phobos? Is there any chance? Otherwise I will put it in its own library
and host it on github.

Jens


More information about the Digitalmars-d mailing list