How about colors and terminal graphics in std.format?

Mantis mail.mantis.88 at gmail.com
Sun Mar 11 20:06:47 PDT 2012


12.03.2012 4:16, Chad J пишет:
> I remember doing colored terminal output in Python. It was pretty 
> nifty, and allows for some slick CLI design. I think D can do better 
> by putting it in the standard library.
>
> I was thinking something along the lines of this:
> http://www.chadjoan.com/d/dmd.2.058/html/d/phobos/std_format.html
>
> I figure it would probably be easy to get some of the basics down. 
> More advanced stuff would probably involve messing with terminfo or 
> <term.h>. Windows' (terribly bad) command prompt can have some of 
> these capabilities implemented too, but in a roundabout way because 
> Windows defines API functions that need to be called to affect 
> terminal graphics and coloring. I figure that would require the help 
> of the I/O routines if I were to work on that.
>
> If there's interest, I might take a stab at it.
>
> So, would this sort of thing make it in?
>
>
>
> Oh, on an unrelated note, Phobos' documentation make target is quite 
> broken:
> blahblah/dmd.git/src/phobos $ make -fposix.mak html
> make: *** No rule to make target 
> `../web/phobos-prerelease/index.html', needed by `html'. Stop.
>
> I examined the makefile and concocted this line of bash that 
> constructs my desired html file:
> dmd -m32 -d -c -o- -version=StdDdoc -I../druntime/import std/format.d 
> std.ddoc -Dfstd_format.html
> and copied std.ddoc from a release version of dmd (it's in src/phobos).

This is not exactly what you mean, but related. There are some graphics 
manipulation functions in dmc runtime: http://digitalmars.com/rtl/disp.html
These are accessible from D, but there's no header, so you'll need to 
declare them manually in your program.
Here's a translated example of outputting a red text:

//
extern( C ) void disp_open();
extern( C ) int disp_getattr();
extern( C ) void disp_setattr( int attr );
extern( C ) int disp_printf( char * format, ... );
extern( C ) void disp_close();

int main() {
int attr;

disp_open();
attr = disp_getattr();
disp_setattr(0x7C);
disp_printf( "hello world!\0".dup.ptr );
disp_setattr(attr);
disp_printf( "\r\n\0".dup.ptr );
disp_close();

return 0;
}
//


More information about the Digitalmars-d mailing list