[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [rfc] Colorized output for GNU make?
From: |
Eli Zaretskii |
Subject: |
Re: [rfc] Colorized output for GNU make? |
Date: |
Thu, 20 Oct 2011 20:43:30 +0200 |
> Date: Thu, 20 Oct 2011 20:19:33 +0200
> From: Sebastian Pipping <address@hidden>
>
> I have some new code ready for you to tear apart, err review :-)
Here's mine:
+ /* Determine target file (i.e. stdout or stderr) and color to pick */
+ switch (type)
+ {
+ case OT_DIR_ENTER: target = stdout; color = color_dir_enter; break;
+ case OT_DIR_LEAVE: target = stdout; color = color_dir_leave; break;
+ case OT_MISC_MESSAGE: target = stdout; color = color_misc_message;
break;
+ case OT_MISC_ERROR: target = stderr; color = color_misc_error; break;
+ case OT_MISC_FATAL: target = stderr; color = color_misc_fatal; break;
+ case OT_EXECUTION: target = stdout; color = color_execution; break;
+ default: target = stdout; color = ""; colorize = 0; break;
+ }
This should probably be a data structure, indexed by the OT_* values.
+ /* Output color start */
+ if (colorize)
+ /* TODO make "\33[K" part optional as done in grep */
+ fprintf (target, "\33[%sm\33[K", color);
+
+ /* Output prefix */
+ if (flags & OF_PREPEND_PREFIX)
+ {
+ const char * catchy = (type == OT_MISC_FATAL) ? "*** " : "";
+ if (flocp && flocp->filenm)
+ fprintf (target, "%s:%lu: %s", flocp->filenm, flocp->lineno, catchy);
+ else if (makelevel == 0)
+ fprintf (target, "%s: %s", program, catchy);
+ else
+ fprintf (target, "%s[%u]: %s", program, makelevel, catchy);
+ }
+
+ /* Output actual message */
+ /* TODO make more portabe, see misc.c */
+ vfprintf (target, format, args);
+
+ if (type == OT_MISC_FATAL)
+ fputs (_(". Stop."), target);
+
+ /* Output finishing newline and color stop */
+ if (colorize)
+ /* TODO make "\33[K" part optional as done in grep */
+ fprintf (target, "%s\33[m\33[K", append_newline ? "\n" : "");
+ else if (append_newline)
+ fputc ('\n', target);
+
+ /* Flush */
+ if (flags & OF_FLUSH)
+ fflush(target);
This will only work with a Posix console or a terminal emulator
window. To make it more portable, one more level of abstraction is in
order. E.g., provide the following APIs:
output_color_start (target, color);
output_prefix (target, type, flocp, makelevel);
output_message (target, type, format, args);
output_color_stop (target, color);
output_newline_and_flush (target, append_newline_p, flash_p);
Then your current code could be the implementation of these APIs for
Posix platforms.
Thanks.
- Re: [rfc] Colorized output for GNU make?, Sebastian Pipping, 2011/10/03
- Re: [rfc] Colorized output for GNU make?, Tim Murphy, 2011/10/03
- Re: [rfc] Colorized output for GNU make?, Sebastian Pipping, 2011/10/10
- Re: [rfc] Colorized output for GNU make?, Paul Smith, 2011/10/11
- Re: [rfc] Colorized output for GNU make?, Sebastian Pipping, 2011/10/11
- Re: [rfc] Colorized output for GNU make?, Eli Zaretskii, 2011/10/11
- Re: [rfc] Colorized output for GNU make?, Paul Smith, 2011/10/11
- Re: [rfc] Colorized output for GNU make?, Sebastian Pipping, 2011/10/20
- Re: [rfc] Colorized output for GNU make?,
Eli Zaretskii <=
- Re: [rfc] Colorized output for GNU make?, Sebastian Pipping, 2011/10/20
- Re: [rfc] Colorized output for GNU make?, Eli Zaretskii, 2011/10/20
- Re: [rfc] Colorized output for GNU make?, David Boyce, 2011/10/20
- Re: [rfc] Colorized output for GNU make?, Sebastian Pipping, 2011/10/20
- Re: [rfc] Colorized output for GNU make?, Sebastian Pipping, 2011/10/21
- Re: [rfc] Colorized output for GNU make?, Sebastian Pipping, 2011/10/19
- Re: [rfc] Colorized output for GNU make?, Sebastian Pipping, 2011/10/19
- Re: [rfc] Colorized output for GNU make?, Paul Smith, 2011/10/20
- Re: [rfc] Colorized output for GNU make?, Sebastian Pipping, 2011/10/20