On 10/01/2022 18:38, David Gustavsson wrote:
In package table, with VerbosePkgLists and Color, color the part of package version strings that changes.
Signed-off-by: David Gustavsson david.e.gustavsson@gmail.com
src/pacman/conf.c | 4 ++++ src/pacman/conf.h | 2 ++ src/pacman/util.c | 35 +++++++++++++++++++++++++++++++---- src/pacman/util.h | 1 + 4 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/src/pacman/conf.c b/src/pacman/conf.c index f9edf75b..d5c598b9 100644 --- a/src/pacman/conf.c +++ b/src/pacman/conf.c @@ -80,6 +80,8 @@ void enable_colors(int colors) colstr->err = BOLDRED; colstr->faint = GREY46; colstr->nocolor = NOCOLOR;
colstr->diffrem = RED;
} else { colstr->colon = ":: "; colstr->title = "";colstr->diffadd = GREEN;
@@ -91,6 +93,8 @@ void enable_colors(int colors) colstr->err = ""; colstr->faint = ""; colstr->nocolor = "";
colstr->diffrem = "";
}colstr->diffadd = "";
}
diff --git a/src/pacman/conf.h b/src/pacman/conf.h index f7916ca9..782b5758 100644 --- a/src/pacman/conf.h +++ b/src/pacman/conf.h @@ -33,6 +33,8 @@ typedef struct __colstr_t { const char *err; const char *faint; const char *nocolor;
- const char *diffrem;
- const char *diffadd;
} colstr_t;
typedef struct __config_repo_t { diff --git a/src/pacman/util.c b/src/pacman/util.c index c0d62826..e998fa98 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -840,8 +840,10 @@ static alpm_list_t *create_verbose_row(pm_target_t *target) { char *str; off_t size = 0;
size_t i = 0; double human_size; const char *label;
const char *version; alpm_list_t *ret = NULL;
/* a row consists of the package name, */
@@ -858,12 +860,28 @@ static alpm_list_t *create_verbose_row(pm_target_t *target) add_table_cell(&ret, str, CELL_NORMAL | CELL_FREE);
/* old and new versions */
- pm_asprintf(&str, "%s",
target->remove != NULL ? alpm_pkg_get_version(target->remove) : "");
- version = alpm_pkg_get_version(target->remove);
- char old_version[strlen(version) + strlen(config->colstr.diffrem) + strlen(config->colstr.nocolor) + 1];
- memcpy(old_version, (char *)version, strlen(version) + 1);
- version = alpm_pkg_get_version(target->install);
- char new_version[strlen(version) + strlen(config->colstr.diffadd) + strlen(config->colstr.nocolor) + 1];
- memcpy(new_version, (char *)version, strlen(version) + 1);
- i = 0;
- while (old_version[i] != '\0' && new_version[i] != '\0' && old_version[i] == new_version[i]) {
- i++;
- }
- insertstring(old_version, config->colstr.diffrem, i);
- insertstring(new_version, config->colstr.diffadd, i);
- snprintf(old_version + i + strlen(old_version + i),
strlen(config->colstr.nocolor) + 1, "%s", config->colstr.nocolor);
- snprintf(new_version + i + strlen(new_version + i),
strlen(config->colstr.nocolor) + 1, "%s", config->colstr.nocolor);
- pm_asprintf(&str, "%s", old_version); add_table_cell(&ret, str, CELL_NORMAL | CELL_FREE);
- pm_asprintf(&str, "%s",
target->install != NULL ? alpm_pkg_get_version(target->install) : "");
pm_asprintf(&str, "%s", new_version); add_table_cell(&ret, str, CELL_NORMAL | CELL_FREE);
/* and size */
@@ -1849,3 +1867,12 @@ void console_erase_line(void) { printf("\x1B[K"); }
+/* inserts string insert into string at index i, modifying string */ +void insertstring(char *string, const char *insert, size_t i) +{
- char temp[strlen(string) - i + 1];
- memcpy(temp, string + i, strlen(string + i) + 1);
- memcpy(string + i, insert, strlen(insert) + 1);
- memcpy(string + i + strlen(insert), temp, strlen(temp) + 1);
+} diff --git a/src/pacman/util.h b/src/pacman/util.h index 52e79915..003961eb 100644 --- a/src/pacman/util.h +++ b/src/pacman/util.h @@ -88,6 +88,7 @@ void console_cursor_move_down(unsigned int lines); void console_cursor_move_end(void); /* Erases line from the current cursor position till the end of the line */ void console_erase_line(void); +void insertstring(char *string, const char *insert, size_t i);
int pm_printf(alpm_loglevel_t level, const char *format, ...) __attribute__((format(printf,2,3))); int pm_asprintf(char **string, const char *format, ...) __attribute__((format(printf,2,3)));
My suggestion was to use coloring that follows how alpm's version comparison works, not just where the first change is.
You can find an example of the code here: https://github.com/Morganamilo/paru/blob/501e0ba7d1bb356e415f07838057d2f7328...
Still these are just my comments and I know Allan quite dislikes colour so I can't say if the patch would be accepted either way.