summaryrefslogtreecommitdiffstats
path: root/libsmartcols
diff options
context:
space:
mode:
authorKarel Zak2017-06-12 11:51:36 +0200
committerKarel Zak2017-06-12 11:51:36 +0200
commite33b387483494711439578f209e0ce245410047c (patch)
treef45b2578af790a6c7e05746c3e5cb420dab57f37 /libsmartcols
parentlib/ttyutils: return terminal lines too (diff)
downloadkernel-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.in2
-rw-r--r--libsmartcols/src/smartcolsP.h3
-rw-r--r--libsmartcols/src/table.c40
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;
+}