sbase

suckless unix tools
git clone git://git.2f30.org/sbase.git
Log | Files | Refs | README | LICENSE

commit cc2d762798aa710b7e0cc916d6523ef5b7c92f2a
parent fe6144793fe7d2a4d674204f675d2e48a2fe06d2
Author: sin <sin@2f30.org>
Date:   Mon Jan 20 12:03:01 +0000

Use the width of the output device by default in mc(1)

If that fails, fallback to 65 characters as before.  If the -c
option is specified then just use that.

Diffstat:
mc.1 | 9++++-----
mc.c | 11++++++++++-
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/mc.1 b/mc.1 @@ -19,9 +19,9 @@ If no file is given, mc reads from stdin. specifies the maximum number of character columns to use (unless the input contains lines longer than .I chars -characters). -.I chars -defaults to 65. +characters). By default mc tries to figure out the width +of the output device, if that fails it defaults to 65 +chars. .SH BUGS This implementation of .B mc @@ -32,5 +32,4 @@ or TAB characters correctly. .B mc currently mangles files which contain embedded NULs. .B mc -does not attempt to determine the width of its output device, -nor does it allow the user to set a default width in its environment. +does not allow the user to set a default width in its environment. diff --git a/mc.c b/mc.c @@ -5,10 +5,12 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <sys/ioctl.h> #include "text.h" #include "util.h" static long chars = 65; +static int cflag; static struct linebuf b = EMPTY_LINEBUF; static long n_columns; @@ -26,10 +28,12 @@ main(int argc, char *argv[]) long i, l, col; size_t maxlen = 0; char *space; + struct winsize w; FILE *fp; ARGBEGIN { case 'c': + cflag = 1; chars = estrtol(EARGF(usage()), 0); if(chars < 3) eprintf("%d: too few character columns"); @@ -38,6 +42,12 @@ main(int argc, char *argv[]) usage(); } ARGEND; + if (cflag == 0) { + ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + if (w.ws_col != 0) + chars = w.ws_col; + } + /* XXX librarify this chunk, too? only useful in sponges though */ if(argc == 0) { getlines(stdin, &b); @@ -84,4 +94,3 @@ main(int argc, char *argv[]) return EXIT_SUCCESS; } -