Merge branch 'scols_fl_wrap' of https://github.com/ignatenkobrain/util-linux
* 'scols_fl_wrap' of https://github.com/ignatenkobrain/util-linux: libsmartcols: add scols_column_is_wrap to docs libsmartcols: don't loose colors when wrapping libsmartcols: wrap columns correctly with unicode libsmartcols: implement SCOLS_FL_WRAP
This commit is contained in:
commit
d372bcf26e
|
@ -26,6 +26,7 @@ scols_column_is_right
|
|||
scols_column_is_strict_width
|
||||
scols_column_is_tree
|
||||
scols_column_is_trunc
|
||||
scols_column_is_wrap
|
||||
scols_column_set_cmpfunc
|
||||
scols_column_set_color
|
||||
scols_column_set_flags
|
||||
|
|
|
@ -352,3 +352,17 @@ int scols_column_is_noextremes(struct libscols_column *cl)
|
|||
return -EINVAL;
|
||||
return cl->flags & SCOLS_FL_NOEXTREMES;
|
||||
}
|
||||
/**
|
||||
* scols_column_is_wrap:
|
||||
* @cl: a pointer to a struct libscols_column instance
|
||||
*
|
||||
* Gets the value of @cl's flag wrap.
|
||||
*
|
||||
* Returns: wrap flag value, negative value in case of an error.
|
||||
*/
|
||||
int scols_column_is_wrap(struct libscols_column *cl)
|
||||
{
|
||||
if (!cl)
|
||||
return -EINVAL;
|
||||
return cl->flags & SCOLS_FL_WRAP;
|
||||
}
|
||||
|
|
|
@ -84,6 +84,7 @@ enum {
|
|||
SCOLS_FL_STRICTWIDTH = (1 << 3), /* don't reduce width if column is empty */
|
||||
SCOLS_FL_NOEXTREMES = (1 << 4), /* ignore extreme fields when count column width*/
|
||||
SCOLS_FL_HIDDEN = (1 << 5), /* maintain data, but don't print */
|
||||
SCOLS_FL_WRAP = (1 << 6), /* wrap long cells across lines */
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -139,6 +140,7 @@ extern int scols_column_is_right(struct libscols_column *cl);
|
|||
extern int scols_column_is_strict_width(struct libscols_column *cl);
|
||||
extern int scols_column_is_hidden(struct libscols_column *cl);
|
||||
extern int scols_column_is_noextremes(struct libscols_column *cl);
|
||||
extern int scols_column_is_wrap(struct libscols_column *cl);
|
||||
|
||||
extern int scols_column_set_flags(struct libscols_column *cl, int flags);
|
||||
extern int scols_column_get_flags(struct libscols_column *cl);
|
||||
|
|
|
@ -124,6 +124,7 @@ global:
|
|||
|
||||
SMARTCOLS_2.28 {
|
||||
global:
|
||||
scols_column_is_wrap;
|
||||
scols_line_refer_column_data;
|
||||
scols_line_set_column_data;
|
||||
scols_symbols_set_title_padding;
|
||||
|
|
|
@ -328,7 +328,8 @@ static int print_data(struct libscols_table *tb,
|
|||
if (is_last_column(tb, cl)
|
||||
&& len < width
|
||||
&& !scols_table_is_maxout(tb)
|
||||
&& !scols_column_is_right(cl))
|
||||
&& !scols_column_is_right(cl)
|
||||
&& !scols_column_is_wrap(cl))
|
||||
width = len;
|
||||
|
||||
/* truncate data */
|
||||
|
@ -352,6 +353,33 @@ static int print_data(struct libscols_table *tb,
|
|||
if (color)
|
||||
fputs(UL_COLOR_RESET, tb->out);
|
||||
len = width;
|
||||
} else if (len > width && scols_column_is_wrap(cl)) {
|
||||
char *p = data;
|
||||
i = 0;
|
||||
|
||||
if (color)
|
||||
fputs(color, tb->out);
|
||||
|
||||
while (*p) {
|
||||
len = width;
|
||||
p = strdup(p);
|
||||
bytes = mbs_truncate(p, &len);
|
||||
if (bytes == (size_t) -1) {
|
||||
free(p);
|
||||
break;
|
||||
}
|
||||
fputs(p, tb->out);
|
||||
free(p);
|
||||
i += bytes;
|
||||
p = data + i;
|
||||
if (*p)
|
||||
for (size_t j = 0; j < cl->seqnum; j++)
|
||||
print_empty_cell (tb, scols_table_get_column(tb, j),
|
||||
NULL, buf->bufsz);
|
||||
}
|
||||
|
||||
if (color)
|
||||
fputs(UL_COLOR_RESET, tb->out);
|
||||
} else if (color) {
|
||||
char *p = data;
|
||||
size_t art = buffer_get_safe_art_size(buf);
|
||||
|
|
Loading…
Reference in New Issue