This creates a dashed line underneath the header for each column in the
table, e.g.:

Name                        Old Version  New Version         Size
-----                       ------------ ------------       -----
at-spi2-core                             2.0.2-1         0.18 MiB
dconf                                    0.8.0-1         0.08 MiB
at-spi2-atk                              2.0.2-1         0.05 MiB
gsettings-desktop-schemas                3.0.1-2         0.04 MiB

Inspired-by: Pat Brisbin <[email protected]>
Signed-off-by: Dave Reisner <[email protected]>
---
I think it's a nice touch, and it's not a hugely invasive patch.

 src/pacman/util.c |   45 +++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/src/pacman/util.c b/src/pacman/util.c
index 91625a1..0c83020 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -555,6 +555,40 @@ static alpm_list_t *table_create_format(const alpm_list_t 
*header,
        return formats;
 }
 
+static char *string_create_filled(const unsigned int fill, size_t len)
+{
+       char *filled;
+
+       filled = malloc(len + 1);
+       if(!filled) {
+               return NULL;
+       }
+
+       memset(filled, fill, len);
+       filled[len] = '\0';
+
+       return filled;
+}
+
+static alpm_list_t *table_create_divider(const alpm_list_t *header,
+               const unsigned int fill)
+{
+       const alpm_list_t *i;
+       alpm_list_t *divider = NULL;
+
+       for(i = header; i; i = alpm_list_next(i)) {
+               const char *header = alpm_list_getdata(i);
+               char *div = string_create_filled(fill, string_length(header) + 
1);
+               if(!div) {
+                       FREELIST(divider);
+                       return NULL;
+               }
+               divider = alpm_list_add(divider, div);
+       }
+
+       return divider;
+}
+
 /** Displays the list in table format
  *
  * @param title the tables title
@@ -569,7 +603,7 @@ int table_display(const char *title, const alpm_list_t 
*header,
                const alpm_list_t *rows)
 {
        const alpm_list_t *i;
-       alpm_list_t *formats;
+       alpm_list_t *formats, *divider;
 
        if(rows == NULL || header == NULL) {
                return 0;
@@ -580,17 +614,24 @@ int table_display(const char *title, const alpm_list_t 
*header,
                return -1;
        }
 
+       divider = table_create_divider(header, '-');
+       if(divider == NULL) {
+               FREELIST(formats);
+               return -1;
+       }
+
        if(title != NULL) {
                printf("%s\n\n", title);
        }
 
        table_print_line(header, formats);
-       printf("\n");
+       table_print_line(divider, formats);
 
        for(i = rows; i; i = alpm_list_next(i)) {
                table_print_line(alpm_list_getdata(i), formats);
        }
 
+       FREELIST(divider);
        FREELIST(formats);
        return 0;
 }
-- 
1.7.6


Reply via email to