]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libsmartcols: support columns separators greater than one output cell
authorKarel Zak <kzak@redhat.com>
Thu, 2 Mar 2017 15:56:39 +0000 (16:56 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 2 Mar 2017 15:56:39 +0000 (16:56 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
libsmartcols/src/table.c
libsmartcols/src/table_print.c

index 68f570d2664a8977901717e33b57945534be1fe4..4f3b13db411c1685f9a8a63d812688dec4ccef55 100644 (file)
@@ -1102,7 +1102,6 @@ int scols_table_is_tree(const struct libscols_table *tb)
  * @sep: separator
  *
  * Sets the column separator of @tb to @sep.
- * Please note that @sep should always take up a single cell in the output.
  *
  * Returns: 0, a negative value in case of an error.
  */
index afcbc1647004574226ae5e21c827868b1b178f0b..1fe70027393ff8b19d7ae7b4035d451845a99f9e 100644 (file)
@@ -1092,10 +1092,13 @@ static int recount_widths(struct libscols_table *tb, struct libscols_buffer *buf
        size_t width = 0, width_min = 0;        /* output width */
        int trunc_only, rc = 0;
        int extremes = 0;
+       size_t colsepsz;
 
 
        DBG(TAB, ul_debugobj(tb, "recounting widths (termwidth=%zu)", tb->termwidth));
 
+       colsepsz = mbs_safe_width(colsep(tb));
+
        /* set basic columns width
         */
        scols_reset_iter(&itr, SCOLS_ITER_FORWARD);
@@ -1110,8 +1113,8 @@ static int recount_widths(struct libscols_table *tb, struct libscols_buffer *buf
 
                is_last = is_last_column(cl);
 
-               width += cl->width + (is_last ? 0 : 1);         /* separator for non-last column */
-               width_min += cl->width_min + (is_last ? 0 : 1);
+               width += cl->width + (is_last ? 0 : colsepsz);          /* separator for non-last column */
+               width_min += cl->width_min + (is_last ? 0 : colsepsz);
                extremes += cl->is_extreme;
        }
 
@@ -1291,7 +1294,7 @@ static int recount_widths(struct libscols_table *tb, struct libscols_buffer *buf
                                width -= r;
                        } else {
                                cl->flags |= SCOLS_FL_HIDDEN;
-                               width -= cl->width + 1;         /* +1 means separator between columns */
+                               width -= cl->width + colsepsz;
                        }
                }
        }