aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2020-08-13 09:19:11 -0700
committerRob Landley <rob@landley.net>2020-08-13 13:44:33 -0500
commit1b276a864b311ea55d0b413b9031b8c4128bc7e5 (patch)
tree29b79bfc0f07440ac68cf26885ce4082ffbad4a1
parentb012ff9ed9cda1be1cf92c2f007df99ef15a4eec (diff)
downloadtoybox-1b276a864b311ea55d0b413b9031b8c4128bc7e5.tar.gz
toybox: fit list of commands in terminal width.
This can still be pretty ragged because it just leaves space for the longest name at the end of each line rather than measuring the name that actually comes next, but at least with this change we never over-run. I noticed this because ConnectBot on my current device gives me a 60-column terminal. busybox seems to do this, though it seems to actually measure, judging by how close it gets to the margin. That doesn't seem worth the effort though?
-rw-r--r--main.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/main.c b/main.c
index ffa735e3..ced2a65b 100644
--- a/main.c
+++ b/main.c
@@ -178,6 +178,7 @@ void toybox_main(void)
{
char *toy_paths[] = {"usr/", "bin/", "sbin/", 0}, *s = toys.argv[1];
int i, len = 0;
+ unsigned width = 80;
// fast path: try to exec immediately.
// (Leave toys.which null to disable suid return logic.)
@@ -195,7 +196,8 @@ void toybox_main(void)
if (toys.argv[1] && strcmp(toys.argv[1], "--long")) unknown(toys.argv[1]);
- // Output list of command.
+ // Output list of commands.
+ terminal_size(&width, 0);
for (i = 1; i<ARRAY_LEN(toy_list); i++) {
int fl = toy_list[i].flags;
if (fl & TOYMASK_LOCATION) {
@@ -205,7 +207,7 @@ void toybox_main(void)
if (fl & (1<<j)) len += printf("%s", toy_paths[j]);
}
len += printf("%s",toy_list[i].name);
- if (++len > 65) len = 0;
+ if (++len > width-15) len = 0;
xputc(len ? ' ' : '\n');
}
}