diff options
author | Karel Zak | 2017-06-12 11:51:36 +0200 |
---|---|---|
committer | Karel Zak | 2017-06-12 11:51:36 +0200 |
commit | e33b387483494711439578f209e0ce245410047c (patch) | |
tree | f45b2578af790a6c7e05746c3e5cb420dab57f37 /libsmartcols | |
parent | lib/ttyutils: return terminal lines too (diff) | |
download | kernel-qcow2-util-linux-e33b387483494711439578f209e0ce245410047c.tar.gz kernel-qcow2-util-linux-e33b387483494711439578f209e0ce245410047c.tar.xz kernel-qcow2-util-linux-e33b387483494711439578f209e0ce245410047c.zip |
libsmartcols: add scols_table_{set,get}_termheight()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libsmartcols')
-rw-r--r-- | libsmartcols/src/libsmartcols.h.in | 2 | ||||
-rw-r--r-- | libsmartcols/src/smartcolsP.h | 3 | ||||
-rw-r--r-- | libsmartcols/src/table.c | 40 |
3 files changed, 42 insertions, 3 deletions
diff --git a/libsmartcols/src/libsmartcols.h.in b/libsmartcols/src/libsmartcols.h.in index e77af857a..cfe2439ef 100644 --- a/libsmartcols/src/libsmartcols.h.in +++ b/libsmartcols/src/libsmartcols.h.in @@ -282,6 +282,8 @@ extern int scols_table_set_termforce(struct libscols_table *tb, int force); extern int scols_table_get_termforce(const struct libscols_table *tb); extern int scols_table_set_termwidth(struct libscols_table *tb, size_t width); extern size_t scols_table_get_termwidth(const struct libscols_table *tb); +extern int scols_table_set_termheight(struct libscols_table *tb, size_t height); +extern size_t scols_table_get_termheight(const struct libscols_table *tb); /* table_print.c */ diff --git a/libsmartcols/src/smartcolsP.h b/libsmartcols/src/smartcolsP.h index 0ce969bab..1a749b247 100644 --- a/libsmartcols/src/smartcolsP.h +++ b/libsmartcols/src/smartcolsP.h @@ -146,7 +146,8 @@ struct libscols_table { size_t ncols; /* number of columns */ size_t ntreecols; /* number of columns with SCOLS_FL_TREE */ size_t nlines; /* number of lines */ - size_t termwidth; /* terminal width */ + size_t termwidth; /* terminal width (number of columns) */ + size_t termheight; /* terminal height (number of lines) */ size_t termreduce; /* extra blank space */ int termforce; /* SCOLS_TERMFORCE_* */ FILE *out; /* output stream */ diff --git a/libsmartcols/src/table.c b/libsmartcols/src/table.c index 149648f05..dd412b220 100644 --- a/libsmartcols/src/table.c +++ b/libsmartcols/src/table.c @@ -61,6 +61,7 @@ static void check_padding_debug(struct libscols_table *tb) struct libscols_table *scols_new_table(void) { struct libscols_table *tb; + int c, l; tb = calloc(1, sizeof(struct libscols_table)); if (!tb) @@ -68,7 +69,10 @@ struct libscols_table *scols_new_table(void) tb->refcount = 1; tb->out = stdout; - tb->termwidth = get_terminal_width(80); + + get_terminal_dimension(&c, &l); + tb->termwidth = c > 0 ? c : 80; + tb->termheight = l > 0 ? l : 24; INIT_LIST_HEAD(&tb->tb_lines); INIT_LIST_HEAD(&tb->tb_columns); @@ -1426,9 +1430,41 @@ int scols_table_set_termwidth(struct libscols_table *tb, size_t width) * scols_table_get_termwidth * @tb: table * - * Returns: terminal width or a negative value in case of an error. + * Returns: terminal width. */ size_t scols_table_get_termwidth(const struct libscols_table *tb) { return tb->termwidth; } + +/** + * scols_table_set_termheight + * @tb: table + * @height: terminal height (number of lines) + * + * The library automatically detects terminal height or defaults to 24 lines if + * detections is unsuccessful. This function override this behaviour. + * + * Returns: 0, a negative value in case of an error. + * + * Since: 2.31 + */ +int scols_table_set_termheight(struct libscols_table *tb, size_t height) +{ + DBG(TAB, ul_debugobj(tb, "set terminatl height: %zu", height)); + tb->termheight = height; + return 0; +} + +/** + * scols_table_get_termheight + * @tb: table + * + * Returns: terminal height (number of lines). + * + * Since: 2.31 + */ +size_t scols_table_get_termheight(const struct libscols_table *tb) +{ + return tb->termheight; +} |