diff options
author | Elliott Hughes <enh@google.com> | 2020-08-13 09:19:11 -0700 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2020-08-13 13:44:33 -0500 |
commit | 1b276a864b311ea55d0b413b9031b8c4128bc7e5 (patch) | |
tree | 29b79bfc0f07440ac68cf26885ce4082ffbad4a1 | |
parent | b012ff9ed9cda1be1cf92c2f007df99ef15a4eec (diff) | |
download | toybox-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.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -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'); } } |