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.
This commit is contained in:
sin 2014-01-20 12:03:01 +00:00
parent fe6144793f
commit cc2d762798
2 changed files with 14 additions and 6 deletions

9
mc.1
View File

@ -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.

11
mc.c
View File

@ -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;
}