ls,ps,watch: measure terminal width on fd 0, not 1
This commit is contained in:
parent
501bfe2630
commit
f893da875a
@ -811,7 +811,7 @@ int ls_main(int argc, char **argv)
|
|||||||
|
|
||||||
#if ENABLE_FEATURE_AUTOWIDTH
|
#if ENABLE_FEATURE_AUTOWIDTH
|
||||||
/* Obtain the terminal width */
|
/* Obtain the terminal width */
|
||||||
get_terminal_width_height(STDOUT_FILENO, &terminal_width, NULL);
|
get_terminal_width_height(STDIN_FILENO, &terminal_width, NULL);
|
||||||
/* Go one less... */
|
/* Go one less... */
|
||||||
terminal_width--;
|
terminal_width--;
|
||||||
#endif
|
#endif
|
||||||
|
@ -803,7 +803,8 @@ extern int crypt_make_salt(char *p, int cnt, int rnd);
|
|||||||
extern int update_passwd(const char *filename, const char *username,
|
extern int update_passwd(const char *filename, const char *username,
|
||||||
const char *new_pw);
|
const char *new_pw);
|
||||||
|
|
||||||
int get_terminal_width_height(const int fd, int *width, int *height);
|
/* NB: typically you want to pass fd 0, not 1. Think 'applet | grep something' */
|
||||||
|
int get_terminal_width_height(int fd, int *width, int *height);
|
||||||
|
|
||||||
int ioctl_or_perror(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
|
int ioctl_or_perror(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
|
||||||
void ioctl_or_perror_and_die(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
|
void ioctl_or_perror_and_die(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
|
||||||
|
@ -612,7 +612,7 @@ void selinux_or_die(void)
|
|||||||
|
|
||||||
/* It is perfectly ok to pass in a NULL for either width or for
|
/* It is perfectly ok to pass in a NULL for either width or for
|
||||||
* height, in which case that value will not be set. */
|
* height, in which case that value will not be set. */
|
||||||
int get_terminal_width_height(const int fd, int *width, int *height)
|
int get_terminal_width_height(int fd, int *width, int *height)
|
||||||
{
|
{
|
||||||
struct winsize win = { 0, 0, 0, 0 };
|
struct winsize win = { 0, 0, 0, 0 };
|
||||||
int ret = ioctl(fd, TIOCGWINSZ, &win);
|
int ret = ioctl(fd, TIOCGWINSZ, &win);
|
||||||
|
@ -322,7 +322,7 @@ int ps_main(int argc, char **argv)
|
|||||||
* and such large widths */
|
* and such large widths */
|
||||||
terminal_width = MAX_WIDTH;
|
terminal_width = MAX_WIDTH;
|
||||||
if (isatty(1)) {
|
if (isatty(1)) {
|
||||||
get_terminal_width_height(1, &terminal_width, NULL);
|
get_terminal_width_height(0, &terminal_width, NULL);
|
||||||
if (--terminal_width > MAX_WIDTH)
|
if (--terminal_width > MAX_WIDTH)
|
||||||
terminal_width = MAX_WIDTH;
|
terminal_width = MAX_WIDTH;
|
||||||
}
|
}
|
||||||
@ -364,7 +364,7 @@ int ps_main(int argc, char **argv)
|
|||||||
if (w_count) {
|
if (w_count) {
|
||||||
terminal_width = (w_count==1) ? 132 : MAX_WIDTH;
|
terminal_width = (w_count==1) ? 132 : MAX_WIDTH;
|
||||||
} else {
|
} else {
|
||||||
get_terminal_width_height(1, &terminal_width, NULL);
|
get_terminal_width_height(0, &terminal_width, NULL);
|
||||||
/* Go one less... */
|
/* Go one less... */
|
||||||
if (--terminal_width > MAX_WIDTH)
|
if (--terminal_width > MAX_WIDTH)
|
||||||
terminal_width = MAX_WIDTH;
|
terminal_width = MAX_WIDTH;
|
||||||
|
@ -28,7 +28,7 @@ int watch_main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
unsigned opt;
|
unsigned opt;
|
||||||
unsigned period = 2;
|
unsigned period = 2;
|
||||||
unsigned cmdlen = 1; // 1 for terminal NUL
|
unsigned cmdlen;
|
||||||
char *header = NULL;
|
char *header = NULL;
|
||||||
char *cmd;
|
char *cmd;
|
||||||
char *tmp;
|
char *tmp;
|
||||||
@ -42,6 +42,7 @@ int watch_main(int argc, char **argv)
|
|||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
p = argv;
|
p = argv;
|
||||||
|
cmdlen = 1; // 1 for terminal NUL
|
||||||
while (*p)
|
while (*p)
|
||||||
cmdlen += strlen(*p++) + 1;
|
cmdlen += strlen(*p++) + 1;
|
||||||
tmp = cmd = xmalloc(cmdlen);
|
tmp = cmd = xmalloc(cmdlen);
|
||||||
@ -58,7 +59,7 @@ int watch_main(int argc, char **argv)
|
|||||||
char *thyme;
|
char *thyme;
|
||||||
time_t t;
|
time_t t;
|
||||||
|
|
||||||
get_terminal_width_height(STDOUT_FILENO, &width, 0);
|
get_terminal_width_height(STDIN_FILENO, &width, 0);
|
||||||
header = xrealloc(header, width--);
|
header = xrealloc(header, width--);
|
||||||
// '%-*s' pads header with spaces to the full width
|
// '%-*s' pads header with spaces to the full width
|
||||||
snprintf(header, width, "Every %ds: %-*s", period, width, cmd);
|
snprintf(header, width, "Every %ds: %-*s", period, width, cmd);
|
||||||
|
Loading…
Reference in New Issue
Block a user