[pacman-dev] [PATCH] Added better colourisation support for the "-{Q, S}i" operation.

xavion.0 at gmail.com xavion.0 at gmail.com
Sun Mar 27 22:35:38 UTC 2016


From: Xavion <Xavion (dot) 0 (at) Gmail (dot) com>

Specifically, the following changes have been made:
* The repository is in 'magenta'
* The package name is in 'bold'
* The version is in 'green'
* The group is in 'blue'

Signed-off-by: Xavion <Xavion (dot) 0 (at) Gmail (dot) com>
---
 src/pacman/callback.c |  3 ++-
 src/pacman/package.c  | 55 ++++++++++++++++++++++++++-------------------------
 src/pacman/pacman.c   |  3 ++-
 src/pacman/util.c     | 21 ++++++++++++--------
 src/pacman/util.h     |  4 ++--
 5 files changed, 47 insertions(+), 39 deletions(-)

diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index 1e1a4cd..3e4d7fa 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -427,6 +427,7 @@ void cb_question(alpm_question_t *question)
 				alpm_question_remove_pkgs_t *q = &question->remove_pkgs;
 				alpm_list_t *namelist = NULL, *i;
 				size_t count = 0;
+				const colstr_t *colstr = &config->colstr;
 				for(i = q->packages; i; i = i->next) {
 					namelist = alpm_list_add(namelist,
 							(char *)alpm_pkg_get_name(i->data));
@@ -436,7 +437,7 @@ void cb_question(alpm_question_t *question)
 							"The following package cannot be upgraded due to unresolvable dependencies:\n",
 							"The following packages cannot be upgraded due to unresolvable dependencies:\n",
 							count));
-				list_display("     ", namelist, getcols());
+				list_display("     ", namelist, colstr->nocolor, getcols());
 				printf("\n");
 				q->skip = noyes(_n(
 							"Do you want to skip the above package for this upgrade?",
diff --git a/src/pacman/package.c b/src/pacman/package.c
index 3ab9abc..92f6b37 100644
--- a/src/pacman/package.c
+++ b/src/pacman/package.c
@@ -148,14 +148,14 @@ static void make_aligned_titles(void)
  * @param deps a list with items of type alpm_depend_t
  */
 static void deplist_display(const char *title,
-		alpm_list_t *deps, unsigned short cols)
+		alpm_list_t *deps, const char *colour, unsigned short cols)
 {
 	alpm_list_t *i, *text = NULL;
 	for(i = deps; i; i = alpm_list_next(i)) {
 		alpm_depend_t *dep = i->data;
 		text = alpm_list_add(text, alpm_dep_compute_string(dep));
 	}
-	list_display(title, text, cols);
+	list_display(title, text, colour, cols);
 	FREELIST(text);
 }
 
@@ -198,6 +198,7 @@ void dump_pkg_full(alpm_pkg_t *pkg, int extra)
 	char bdatestr[50] = "", idatestr[50] = "";
 	const char *label, *reason;
 	alpm_list_t *validation = NULL, *requiredby = NULL, *optionalfor = NULL;
+	const colstr_t *colstr = &config->colstr;
 
 	/* make aligned titles once only */
 	static int need_alignment = 1;
@@ -260,25 +261,25 @@ void dump_pkg_full(alpm_pkg_t *pkg, int extra)
 	/* actual output */
 	if(from == ALPM_PKG_FROM_SYNCDB) {
 		string_display(titles[T_REPOSITORY],
-				alpm_db_get_name(alpm_pkg_get_db(pkg)), cols);
+				alpm_db_get_name(alpm_pkg_get_db(pkg)), colstr->repo, cols);
 	}
-	string_display(titles[T_NAME], alpm_pkg_get_name(pkg), cols);
-	string_display(titles[T_VERSION], alpm_pkg_get_version(pkg), cols);
-	string_display(titles[T_DESCRIPTION], alpm_pkg_get_desc(pkg), cols);
-	string_display(titles[T_ARCHITECTURE], alpm_pkg_get_arch(pkg), cols);
-	string_display(titles[T_URL], alpm_pkg_get_url(pkg), cols);
-	list_display(titles[T_LICENSES], alpm_pkg_get_licenses(pkg), cols);
-	list_display(titles[T_GROUPS], alpm_pkg_get_groups(pkg), cols);
-	deplist_display(titles[T_PROVIDES], alpm_pkg_get_provides(pkg), cols);
-	deplist_display(titles[T_DEPENDS_ON], alpm_pkg_get_depends(pkg), cols);
+	string_display(titles[T_NAME], alpm_pkg_get_name(pkg), colstr->title, cols);
+	string_display(titles[T_VERSION], alpm_pkg_get_version(pkg), colstr->version, cols);
+	string_display(titles[T_DESCRIPTION], alpm_pkg_get_desc(pkg), colstr->nocolor, cols);
+	string_display(titles[T_ARCHITECTURE], alpm_pkg_get_arch(pkg), colstr->nocolor, cols);
+	string_display(titles[T_URL], alpm_pkg_get_url(pkg), colstr->nocolor, cols);
+	list_display(titles[T_LICENSES], alpm_pkg_get_licenses(pkg), colstr->nocolor, cols);
+	list_display(titles[T_GROUPS], alpm_pkg_get_groups(pkg), colstr->groups, cols);
+	deplist_display(titles[T_PROVIDES], alpm_pkg_get_provides(pkg), colstr->nocolor, cols);
+	deplist_display(titles[T_DEPENDS_ON], alpm_pkg_get_depends(pkg), colstr->nocolor, cols);
 	optdeplist_display(pkg, cols);
 
 	if(extra || from == ALPM_PKG_FROM_LOCALDB) {
-		list_display(titles[T_REQUIRED_BY], requiredby, cols);
-		list_display(titles[T_OPTIONAL_FOR], optionalfor, cols);
+		list_display(titles[T_REQUIRED_BY], requiredby, colstr->nocolor, cols);
+		list_display(titles[T_OPTIONAL_FOR], optionalfor, colstr->nocolor, cols);
 	}
-	deplist_display(titles[T_CONFLICTS_WITH], alpm_pkg_get_conflicts(pkg), cols);
-	deplist_display(titles[T_REPLACES], alpm_pkg_get_replaces(pkg), cols);
+	deplist_display(titles[T_CONFLICTS_WITH], alpm_pkg_get_conflicts(pkg), colstr->nocolor, cols);
+	deplist_display(titles[T_REPLACES], alpm_pkg_get_replaces(pkg), colstr->nocolor, cols);
 
 	size = humanize_size(alpm_pkg_get_size(pkg), '\0', 2, &label);
 	if(from == ALPM_PKG_FROM_SYNCDB) {
@@ -296,15 +297,15 @@ void dump_pkg_full(alpm_pkg_t *pkg, int extra)
 	printf("%s%s%s %.2f %s\n", config->colstr.title, titles[T_INSTALLED_SIZE],
 			config->colstr.nocolor, size, label);
 
-	string_display(titles[T_PACKAGER], alpm_pkg_get_packager(pkg), cols);
-	string_display(titles[T_BUILD_DATE], bdatestr, cols);
+	string_display(titles[T_PACKAGER], alpm_pkg_get_packager(pkg), colstr->nocolor, cols);
+	string_display(titles[T_BUILD_DATE], bdatestr, colstr->nocolor, cols);
 	if(from == ALPM_PKG_FROM_LOCALDB) {
-		string_display(titles[T_INSTALL_DATE], idatestr, cols);
-		string_display(titles[T_INSTALL_REASON], reason, cols);
+		string_display(titles[T_INSTALL_DATE], idatestr, colstr->nocolor, cols);
+		string_display(titles[T_INSTALL_REASON], reason, colstr->nocolor, cols);
 	}
 	if(from == ALPM_PKG_FROM_FILE || from == ALPM_PKG_FROM_LOCALDB) {
 		string_display(titles[T_INSTALL_SCRIPT],
-				alpm_pkg_has_scriptlet(pkg) ? _("Yes") : _("No"), cols);
+				alpm_pkg_has_scriptlet(pkg) ? _("Yes") : _("No"), colstr->nocolor, cols);
 	}
 
 	if(from == ALPM_PKG_FROM_SYNCDB && extra) {
@@ -321,25 +322,25 @@ void dump_pkg_full(alpm_pkg_t *pkg, int extra)
 			keys = alpm_list_add(keys, _("None"));
 		}
 
-		string_display(titles[T_MD5_SUM], alpm_pkg_get_md5sum(pkg), cols);
-		string_display(titles[T_SHA_256_SUM], alpm_pkg_get_sha256sum(pkg), cols);
-		list_display(titles[T_SIGNATURES], keys, cols);
+		string_display(titles[T_MD5_SUM], alpm_pkg_get_md5sum(pkg), colstr->nocolor, cols);
+		string_display(titles[T_SHA_256_SUM], alpm_pkg_get_sha256sum(pkg), colstr->nocolor, cols);
+		list_display(titles[T_SIGNATURES], keys, colstr->nocolor, cols);
 
 		if(base64_sig) {
 			FREELIST(keys);
 		}
 	} else {
-		list_display(titles[T_VALIDATED_BY], validation, cols);
+		list_display(titles[T_VALIDATED_BY], validation, colstr->nocolor, cols);
 	}
 
 	if(from == ALPM_PKG_FROM_FILE) {
 		alpm_siglist_t siglist;
 		int err = alpm_pkg_check_pgp_signature(pkg, &siglist);
 		if(err && alpm_errno(config->handle) == ALPM_ERR_SIG_MISSING) {
-			string_display(titles[T_SIGNATURES], _("None"), cols);
+			string_display(titles[T_SIGNATURES], _("None"), colstr->nocolor, cols);
 		} else if(err) {
 			string_display(titles[T_SIGNATURES],
-					alpm_strerror(alpm_errno(config->handle)), cols);
+					alpm_strerror(alpm_errno(config->handle)), colstr->err, cols);
 		} else {
 			signature_display(titles[T_SIGNATURES], &siglist, cols);
 		}
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index be52d1b..b2d2735 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -1221,6 +1221,7 @@ int main(int argc, char *argv[])
 
 	if(config->verbose > 0) {
 		alpm_list_t *j;
+		const colstr_t *colstr = &config->colstr;
 		printf("Root      : %s\n", alpm_option_get_root(config->handle));
 		printf("Conf File : %s\n", config->configfile);
 		printf("DB Path   : %s\n", alpm_option_get_dbpath(config->handle));
@@ -1237,7 +1238,7 @@ int main(int argc, char *argv[])
 		printf("Lock File : %s\n", alpm_option_get_lockfile(config->handle));
 		printf("Log File  : %s\n", alpm_option_get_logfile(config->handle));
 		printf("GPG Dir   : %s\n", alpm_option_get_gpgdir(config->handle));
-		list_display("Targets   :", pm_targets, 0);
+		list_display("Targets   :", pm_targets, colstr->nocolor, 0);
 	}
 
 	/* Log command line */
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 0862de0..b4e8dff 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -473,7 +473,7 @@ static void add_transaction_sizes_row(alpm_list_t **rows, char *label, off_t siz
 	*rows = alpm_list_add(*rows, row);
 }
 
-void string_display(const char *title, const char *string, unsigned short cols)
+void string_display(const char *title, const char *string, const char *colour, unsigned short cols)
 {
 	if(title) {
 		printf("%s%s%s ", config->colstr.title, title, config->colstr.nocolor);
@@ -483,7 +483,10 @@ void string_display(const char *title, const char *string, unsigned short cols)
 	} else {
 		/* compute the length of title + a space */
 		size_t len = string_length(title) + 1;
-		indentprint(string, (unsigned short)len, cols);
+		char *clrd_str = NULL;
+		pm_asprintf(&clrd_str, "%s%s", colour, string);
+		indentprint(clrd_str, (unsigned short)len, cols);
+		free(clrd_str);
 	}
 	printf("\n");
 }
@@ -654,7 +657,7 @@ cleanup:
 }
 
 void list_display(const char *title, const alpm_list_t *list,
-		unsigned short maxcols)
+		const char *colour, unsigned short maxcols)
 {
 	const alpm_list_t *i;
 	size_t len = 0;
@@ -669,7 +672,7 @@ void list_display(const char *title, const alpm_list_t *list,
 	} else {
 		size_t cols = len;
 		const char *str = list->data;
-		fputs(str, stdout);
+		fprintf(stdout, "%s%s", colour, str);
 		cols += string_length(str);
 		for(i = alpm_list_next(list); i; i = alpm_list_next(i)) {
 			str = i->data;
@@ -687,7 +690,7 @@ void list_display(const char *title, const alpm_list_t *list,
 				printf("  ");
 				cols += 2;
 			}
-			fputs(str, stdout);
+			fprintf(stdout, "%s%s", colour, str);
 			cols += s;
 		}
 		putchar('\n');
@@ -873,6 +876,7 @@ static void _display_targets(alpm_list_t *targets, int verbose)
 	off_t isize = 0, rsize = 0, dlsize = 0;
 	unsigned short cols;
 	alpm_list_t *i, *names = NULL, *header = NULL, *rows = NULL;
+	const colstr_t *colstr = &config->colstr;
 
 	if(!targets) {
 		return;
@@ -922,10 +926,10 @@ static void _display_targets(alpm_list_t *targets, int verbose)
 		header = create_verbose_header(alpm_list_count(targets));
 		if(table_display(header, rows, cols) != 0) {
 			/* fallback to list display if table wouldn't fit */
-			list_display(str, names, cols);
+			list_display(str, names, colstr->nocolor, cols);
 		}
 	} else {
-		list_display(str, names, cols);
+		list_display(str, names, colstr->nocolor, cols);
 	}
 	printf("\n");
 
@@ -1255,9 +1259,10 @@ static void display_repo_list(const char *dbname, alpm_list_t *list,
 		unsigned short cols)
 {
 	const char *prefix = "  ";
+	const colstr_t *colstr = &config->colstr;
 
 	colon_printf(_("Repository %s\n"), dbname);
-	list_display(prefix, list, cols);
+	list_display(prefix, list, colstr->nocolor, cols);
 }
 
 void select_display(const alpm_list_t *pkglist)
diff --git a/src/pacman/util.h b/src/pacman/util.h
index f5e37c8..86aa204 100644
--- a/src/pacman/util.h
+++ b/src/pacman/util.h
@@ -55,10 +55,10 @@ void columns_cache_reset(void);
 int rmrf(const char *path);
 void indentprint(const char *str, unsigned short indent, unsigned short cols);
 char *strreplace(const char *str, const char *needle, const char *replace);
-void string_display(const char *title, const char *string, unsigned short cols);
+void string_display(const char *title, const char *string, const char *colour, unsigned short cols);
 double humanize_size(off_t bytes, const char target_unit, int precision,
 		const char **label);
-void list_display(const char *title, const alpm_list_t *list,
+void list_display(const char *title, const alpm_list_t *list, const char *colour,
 		unsigned short maxcols);
 void list_display_linebreak(const char *title, const alpm_list_t *list,
 		unsigned short maxcols);
-- 
2.7.4


More information about the pacman-dev mailing list