Remove hard-coded 80 column output

When stdout is detected to be a tty use the number of columns
specified by the terminal.  If that fails fall back to a default
80 column width.  In the non-tty case allow for 999 column lines.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
Craig Sanders 2012-03-27 21:37:41 +11:00 committed by Brian Behlendorf
parent 2008ab88dd
commit 9fc60702c6

View File

@ -2175,11 +2175,30 @@ print_iostat(zpool_handle_t *zhp, void *data)
return (0); return (0);
} }
static int
get_columns(void)
{
struct winsize ws;
int columns = 80;
int error;
if (isatty(STDOUT_FILENO)) {
error = ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws);
if (error == 0)
columns = ws.ws_col;
} else {
columns = 999;
}
return columns;
}
int int
get_namewidth(zpool_handle_t *zhp, void *data) get_namewidth(zpool_handle_t *zhp, void *data)
{ {
iostat_cbdata_t *cb = data; iostat_cbdata_t *cb = data;
nvlist_t *config, *nvroot; nvlist_t *config, *nvroot;
int columns;
if ((config = zpool_get_config(zhp, NULL)) != NULL) { if ((config = zpool_get_config(zhp, NULL)) != NULL) {
verify(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, verify(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE,
@ -2191,13 +2210,15 @@ get_namewidth(zpool_handle_t *zhp, void *data)
} }
/* /*
* The width must fall into the range [10,38]. The upper limit is the * The width must be at least 10, but may be as large as the
* maximum we can have and still fit in 80 columns. * column width - 42 so that we can still fit in one line.
*/ */
columns = get_columns();
if (cb->cb_namewidth < 10) if (cb->cb_namewidth < 10)
cb->cb_namewidth = 10; cb->cb_namewidth = 10;
if (cb->cb_namewidth > 38) if (cb->cb_namewidth > columns - 42)
cb->cb_namewidth = 38; cb->cb_namewidth = columns - 42;
return (0); return (0);
} }