[pacman-dev] [PATCH 07/14] introduce colstr for colourizing

Allan McRae allan at archlinux.org
Wed Mar 6 10:42:41 EST 2013


On 07/03/13 01:39, Allan McRae wrote:
> From: Simon Gomizelj <simongmzlj at gmail.com>
> 
> colstr_t colstr will hold the colourizing agents.
> 
> Signed-off-by: Simon Gomizelj <simongmzlj at gmail.com>
> ---
> 
> Sending for easy review...
> 
>  src/pacman/conf.c   | 36 ++++++++++++++++++++++++++++++++++++
>  src/pacman/conf.h   | 10 ++++++++++
>  src/pacman/pacman.c |  1 +
>  src/pacman/util.c   |  6 ++++--
>  4 files changed, 51 insertions(+), 2 deletions(-)
> 
> diff --git a/src/pacman/conf.c b/src/pacman/conf.c
> index dca6e3e..baaf6a1 100644
> --- a/src/pacman/conf.c
> +++ b/src/pacman/conf.c
> @@ -39,6 +39,37 @@
>  /* global config variable */
>  config_t *config = NULL;
>  
> +#define NC            "\033[0m"

Can this get a decent name?  NOCOLOR  And usage of "nc" throughout.

> +
> +#define BLACK         "\033[0;30m"
> +#define RED           "\033[0;31m"
> +#define GREEN         "\033[0;32m"
> +#define YELLOW        "\033[0;33m"
> +#define BLUE          "\033[0;34m"
> +#define MAGENTA       "\033[0;35m"
> +#define CYAN          "\033[0;36m"
> +#define WHITE         "\033[0;37m"
> +
> +#define BOLDBLACK     "\033[1;30m"
> +#define BOLDRED       "\033[1;31m"
> +#define BOLDGREEN     "\033[1;32m"
> +#define BOLDYELLOW    "\033[1;33m"
> +#define BOLDBLUE      "\033[1;34m"
> +#define BOLDMAGENTA   "\033[1;35m"
> +#define BOLDCYAN      "\033[1;36m"
> +#define BOLDWHITE     "\033[1;37m"
> +
> +void enable_colors(int colors)
> +{
> +	colstr_t *colstr = &config->colstr;
> +
> +	if(colors == PM_COLOR_ON) {
> +		colstr->colon = BOLDBLUE "::" BOLDWHITE " ";
> +		colstr->title = BOLDWHITE;
> +		colstr->nc    = NC;
> +	}
> +}
> +
>  config_t *config_new(void)
>  {
>  	config_t *newconfig = calloc(1, sizeof(config_t));
> @@ -60,6 +91,10 @@ config_t *config_new(void)
>  		newconfig->remotefilesiglevel = ALPM_SIG_USE_DEFAULT;
>  	}
>  
> +	newconfig->colstr.colon = ":: ";
> +	newconfig->colstr.title = "";
> +	newconfig->colstr.nc    = "";
> +
>  	return newconfig;
>  }
>  
> @@ -439,6 +474,7 @@ static int _parse_options(const char *key, char *value,
>  		} else if(strcmp(key, "Color") == 0) {
>  			if(config->color == PM_COLOR_UNSET) {
>  				config->color = isatty(fileno(stdout)) ? PM_COLOR_ON : PM_COLOR_OFF;
> +				enable_colors(config->color);
>  			}
>  		} else {
>  			pm_printf(ALPM_LOG_WARNING,
> diff --git a/src/pacman/conf.h b/src/pacman/conf.h
> index 6cabd33..aab1832 100644
> --- a/src/pacman/conf.h
> +++ b/src/pacman/conf.h
> @@ -22,6 +22,12 @@
>  
>  #include <alpm.h>
>  
> +typedef struct __colstr_t {
> +	const char *colon;
> +	const char *title;
> +	const char *nc;
> +} colstr_t;
> +
>  typedef struct __config_t {
>  	unsigned short op;
>  	unsigned short quiet;
> @@ -98,6 +104,9 @@ typedef struct __config_t {
>  
>  	alpm_list_t *explicit_adds;
>  	alpm_list_t *explicit_removes;
> +
> +	/* Color strings for output */
> +	colstr_t colstr;
>  } config_t;
>  
>  /* Operations */
> @@ -156,6 +165,7 @@ enum {
>  /* global config variable */
>  extern config_t *config;
>  
> +void enable_colors(int colors);
>  config_t *config_new(void);
>  int config_free(config_t *oldconfig);
>  
> diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
> index aabdba0..6d624d2 100644
> --- a/src/pacman/pacman.c
> +++ b/src/pacman/pacman.c
> @@ -407,6 +407,7 @@ static int parsearg_global(int opt)
>  						optarg);
>  				return 1;
>  			}
> +			enable_colors(config->color);
>  			break;
>  		case OP_CONFIG:
>  			check_optarg();


Everything below here looks out of place - it was in a separate patch
previously.  Also, note comment below.

> diff --git a/src/pacman/util.c b/src/pacman/util.c
> index 3027789..d0e70ea 100644
> --- a/src/pacman/util.c
> +++ b/src/pacman/util.c
> @@ -1491,7 +1491,7 @@ static int question(short preset, const char *format, va_list args)
>  	fflush(stdout);
>  	fflush(stderr);
>  
> -	fprintf(stream, ":: ");
> +	fputs(config->colstr.colon, stream);
>  	vfprintf(stream, format, args);

When you move this to a separate patch, merge in:

[PATCH 10/14] have question properly reset itself

>  	if(preset) {
> @@ -1558,11 +1558,13 @@ int colon_printf(const char *fmt, ...)
>  	int ret;
>  	va_list args;
>  
> -	fputs(":: ", stdout);
>  	va_start(args, fmt);
> +	fputs(config->colstr.colon, stdout);
>  	ret = vprintf(fmt, args);
> +	fputs(config->colstr.nc, stdout);
>  	va_end(args);
>  
> +	fflush(stdout);
>  	return ret;
>  }
>  
> 



More information about the pacman-dev mailing list